Iptables Tutorial 1.1.19
Шрифт:
6.4.3.1. Критерий Limit
Должен подгружаться явно ключом – m limit. Прекрасно подходит для правил, производящих запись в системный журнал (logging) и т.п. Добавляя этот критерий, мы тем самым устанавливаем предельное число пакетов в единицу времени, которое способно пропустить правило. Можно использовать символ ! для инверсии, например – m limit ! –limit 5/s. В этом случае подразумевается, что пакеты будут проходить правило только после превышения ограничения.
Более наглядно этот критерий можно представить себе как некоторую емкость с выпускным отверстием, через которое проходит
Рассмотрим еще подробнее.
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
(Ключ – Пример – Описание)
Ключ: –limit
Пример: iptables -A INPUT -m limit –limit 3/hour
Описание: Устанавливается средняя скорость «освобождения емкости» за единицу времени. В качестве аргумента указывается число пакетов и время. Допустимыми считаются следующие единицы измерения времени: /second/minute/hour/day.
Ключ: –limit-burst
Пример: iptables -A INPUT -m limit –limit-burst 5
Описание: Устанавливает максимальное значение числа burst limit для критерия limit. Это число увеличивается на единицу если получен пакет, подпадающий под действие данного правила, и при этом средняя скорость (задаваемая ключом –limit) поступления пакетов уже достигнута. Так происходит до тех пор, пока число burst limit не достигнет максимального значения, устанавливаемого ключом –limit-burst. После этого правило начинает пропускать пакеты со скоростью, задаваемой ключом –limit. Значение по-умолчанию принимается равным 5. Для демонстрации принципов работы данного критерия я написал сценарий Limit-match.txt С помощью этого сценария вы увидите как работает критерий limit, просто посылая ping-пакеты с различными временнЫми интервалами.
6.4.3.2. Критерий MAC
MAC (Ethernet Media Access Control) критерий используется для проверки исходного MAC-адреса пакета. Расширение – m mac, на сегодняшний день, предоставляет единственный критерий, но возможно в будущем он будет расширен и станет более полезен.
ПРИМЕЧАНИЕ: Модуль расширения должен подгружаться явно ключом – m mac. Упоминаю я об этом потому, что многие, забыв указать этот ключ, удивляются, почему не работает этот критерий.
Таблица 6-9. Ключи критерия MAC
(Ключ – Пример – Описание)
Ключ: –mac-source
Пример: iptables -A INPUT -m mac –mac-source 00:00:00:00:00:01
Описание: MAC адрес сетевого узла, передавшего пакет. MAC адрес должен указываться в форме XX:XX:XX:XX:XX:XX. Как и ранее, символ ! используется для инверсии критерия, например –mac-source ! 00:00:00:00:00:01, что означает – «пакет с любого узла, кроме узла, который имеет MAC адрес 00:00:00:00:00:01» . Этот критерий имеет смысл только в цепочках PREROUTING, FORWARD и INPUT и нигде более.
6.4.3.3. Критерий Mark
Критерий mark предоставляет возможность «пометить» пакеты специальным образом. Mark – специальное поле, которое существует только в области памяти ядра и связано с конкретным пакетом. Может использоваться в самых разнообразных целях, например, ограничение трафика и фильтрация. На сегодняшний день существует единственная возможность установки метки на пакет в Linux – это использование действия MARK. Поле mark представляет собой беззнаковое целое число в диапазоне от 0 до 4294967296 для 32-битных систем.