Пример приведен для спутникового канала в 8 мбит/с с провайдерским ограничением 1000 пакетов в секнуду
Задача
Торрент у одного пользователя забивает весь канал, за счет выкачивания лимита, который установил вышестоящий провайдер
Решение
Внимание! Указанные действия необходимо производить когда сервер находится в режиме удаленного помощника.
Сначала нужно разрешить редактирование файла /usr/local/ics/bin/ics_tune.sh
mount -o rw,remount /mnt/ro_disc chattr -i /usr/local/ics/bin/ics_tune.sh
Дальше нужно отредактировать файл /usr/local/ics/bin/ics_tune.sh
и привести его к подобному виду
#!/bin/bash if [ "$1" = "firewall.sh" ]; then #Добавляем новую цепочку iptables -t mangle -N short_packet #Ограничиваем трафик по количеству пакетов в секунду iptables -t mangle -I short_packet -m limit --limit 300/sec -j RETURN iptables -t mangle -A short_packet -j DROP #Перенаправляем в нее маленькие пакеты iptables -t mangle -I PREROUTING 12 -p udp --dport 1024: -m length --length 0:300 -j short_packet iptables -t mangle -I PREROUTING 12 -p tcp --dport 1024: -m length --length 0:300 -j short_packet iptables -t mangle -I PREROUTING 12 -p udp --sport 1024: -m length --length 0:300 -j short_packet iptables -t mangle -I PREROUTING 12 -p tcp --sport 1024: -m length --length 0:300 -j short_packet fi true
300 - размер пакета в кбайтах
300/sec - количество пакетов в секунду
Для применения изменений выполните команду (Перезагрузка не потреуется):
/usr/local/ics/bin/ics_tune.sh firewall.sh
Если файл не пустой, то старое содержимое оставить нетронутым и добавить в любое место файла основной условный блок из примера выше.