Якщо ідеться про алгоритм реалізації, то на мою думку реальним є наступний варіант:
1) Для маркування пакетів використаємо потік PREROUTING. Тоді у FORWARD-і маємо можливсіть савити правила захисту (заборона тих чи інших портів) а в PREROUTING маркувати трафік.
iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6
В результаті увесь трафік у нас маркується цифрою 6. Тепер з
http://colocall.net/ua/ стягуємо список ір-адрес і для кожної з них робимо
iptables -I PREROUTING -i eth0 -d <UA-IX-ip> -j ACCEPT.
Список на колокалі -- це плейнтекст, його можна просто взяти wget-ом і кинути на вхід елементарному bash-скріпту.
Тобто вставляємо правила вище. Таким чином увесь UA-IX трафік маркуватись не буде, увест решта -- буде.
2) Робимо шейпінг. Рекомендую
http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm -- це непогана реалізація шейпінгу. Її можливості цілком достатні. Хоча можливо Вам вистачитьі простіших способів шейпінгу.
3) Залишилось на створений в п. 2 шейпінг завернути трафік маркований в п. 1
пиблизно так: tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid <шейпінг>.
Взагалі про це добре почитати тут:
http://www.lartc.org/lartc.html#LARTC.QDISC.FILTERS4) Калькуляцію можна робити по статистиці з htb. Блокувати трафік -- тим самим iptables. Тут уже вся фантазія + bash/perl/awk.
Ну тобто реалізувати те, що Ви просите ІМНО цілком реально. Єдиний нез'ясований момент -- який саме шейпінг Ви хочете. Від цього залежатиме вибір реалізації і можливо трохи зміниться алгоритм. Дуже рекомендую
http://www.lartc.org/lartc.html.