понедельник, 17 мая 2010 г.

Ограничение скорости с помощью iptables

Несмотря на наличие специальных утилит для разграничения скорости передаваемых пакетов, ограничивать скорость можно и с помощью iptables.

Для этой цели используется модуль limit. Пакеты, проходящие через правило с этим критерием будут соответствовать такому условию до тех пор, пока лимит не исчерпается.

Например:
iptables -I FORWARD -i eth0 -p tcp -s 192.0.2.12 -m limit --limit 3/hour --limit-burst 5 -j ACCEPT

Такому правилу будут соответствовать первые 5 пакетов, пришедшие из интерфейса eth0 с адреса 192.0.2.12. Каждый проходящий пакет увеличивает счетчик на единицу, пока тот не достигнет значения параметра --limit-burst. Последующие пакеты такому правилу соответствовать не будут, а перейдут к следующему в таблице правил iptables (что с ними будет потом - наше правило не волнует).

В течение следующих 20 минут (это задает параметр --limit 3/hour, что значит три раза за час уменьшить значение счетчика на единицу) ни один пакет через это правило не пройдет (не прошедшие пакеты передаются следующим правилам). По истечении заданного интервала счетчик уменьшается на единицу. Теперь правило может принять еще один пакет. Если пакет придет - счетчик снова достигнет значения limit-burst. А если не придет в течение еще 20 минут, то в дальнейшем правило сможет принять сразу два пакета, и т.д.

Комментариев нет:

Отправить комментарий