"Oskar Andreasson. Iptables Tutorial 1.1.19 " - читать интересную книгу автора


Должен подгружаться явно ключом -m limit. Прекрасно подходит для
правил, производящих запись в системный журнал (logging) и т.п. Добавляя
этот критерий, мы тем самым устанавливаем предельное число пакетов в единицу
времени, которое способно пропустить правило. Можно использовать символ !
для инверсии, например -m limit ! -limit 5/s. В этом случае подразумевается,
что пакеты будут проходить правило только после превышения ограничения.
Более наглядно этот критерий можно представить себе как некоторую
емкость с выпускным отверстием, через которое проходит определенное число
пакетов за единицу времени (т.е. скорость "вытекания"). Скорость "вытекания"
как раз и определяет величина -limit. Величина -limit-burst задает общий
"объем емкости". А теперь представим себе правило -limit
3/minute -limit-burst 5, тогда после поступления 5 пакетов (за очень
короткий промежуток времени), емкость "наполнится" и каждый последующий
пакет будет вызывать "переполнение" емкости, т.е. "срабатывание" критерия.
Через 20 секунд "уровень" в емкости будет понижен (в соответствии с
величиной -limit), таким образом она готова будет принять еще один пакет, не
вызывая "переполнения" емкости, т.е. срабатывания критерия.
Рассмотрим еще подробнее.
1. Предположим наличие правила, содержащего критерий -m limit -limit
5/second -limit-burst 10. Ключ limit-burst установил объем "емкости" равный
10-ти. Каждый пакет, который подпадает под указанное правило, направляется в
эту емкость.
2. Допустим, в течение 1/1000 секунды, мы получили 10 пакетов, тогда с
получением каждого пакета "уровень" в "емкости" будет возрастать:
1-2-3-4-5-6-7-8-9-10.
3. Емкость наполнилась. Теперь пакеты, подпадающие под наше
ограничительное правило, больше не смогут попасть в эту "емкость" (там
просто нет места), поэтому они (пакеты) пойдут дальше по набору правил, пока
не будут явно восприняты одним из них, либо подвергнутся политике
по-умолчанию.
4. Каждые 1/5 секунды "уровень" в воображаемой емкости снижается на 1,
и так до тех пор, пока "емкость" не будет опустошена. Через секунду, после
приема 10-ти пакетов "емкость" готова будет принять еще 5 пакетов.
5. Само собой разумеется, что "уровень" в "емкости" возрастает на 1 с
каждым вновь пришедшим пакетом.
От переводчика: Очень долгое время мое понимание критериев limit
находилось на интуитивном уровне, пока Владимир Холманов (снимаю шляпу в
глубочайшем поклоне) не объяснил мне просто и понятно его суть. Постараюсь
передать его пояснения:
1. Расширение -m limit подразумевает наличие ключей -limit
и -limit-burst. Если вы не указываете эти ключи, то они принимают значение
по-умолчанию.
2. Ключ -limit-burst - это максимальное значение счетчика пакетов, при
котором срабатывает ограничение.
3. Ключ -limit - это скорость, с которой счетчик burst limit
"откручивается назад".
Принцип, который просто реализуется на C и широко используется во
многих алгоритмах-ограничителях.
Таблица 6-8. Ключи критерия limit