SYNи сброшенными флагами ACKи FIN. Этот критерий аналогичен критерию –tcp-flags SYN,ACK,FIN SYN. Такие пакеты используются для открытия соединения TCP. Заблокировав такие пакеты, вы надежно заблокируете все входящие запросы на соединение, однако этот критерий не способен заблокировать исходящие запросы на соединение. Как и ранее, допускается инвертирование критерия символом !. Так критерий ! –synозначает – «все пакеты, не являющиеся запросом на соединение», т.е. все пакеты с установленными флагами FINили ACK.
 
    Критерий: –tcp-option
    Пример: iptables -p tcp –tcp-option 16
    Описание: Удовлетворяющим условию данного критерия будет будет считаться пакет, TCPпараметр которого равен заданному числу. TCP Option– это часть заголовка пакета. Она состоит из 3 различных полей. Первое 8-ми битовое поле содержит информацию об опциях, используемых в данном соединении. Второе 8-ми битовое поле содержит длину поля опций. Если следовать стандартам до конца, то следовало бы реализовать обработку всех возможных вариантов, однако, вместо этого мы можем проверить первое поле и в случае, если там указана неподдерживаемая нашим брандмауэром опция, то просто перешагнуть через третье поле (длина которого содержится во втором поле). Пакет, который не будет иметь полного TCPзаголовка, будет сброшен автоматически при попытке изучения его TCPпараметра. Как и ранее, допускается использование флага инверсии условия !. Дополнительную информацию по TCP Optionsвы сможете найти на Internet Engineering Task Force

Владимир Холманов(снимаю шляпу в глубочайшем поклоне) не объяснил мне просто и понятно его суть. Постараюсь передать его пояснения:
    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. По умолчанию принято значение 3 пакета в час, или 3/hour. Использование флага инверсии условия !в данном критерии недопустим.
 
    Ключ: –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-битных систем.
    Таблица 6-10. Ключи критерия Mark
   (Ключ – Пример – Описание)
 
    Ключ: –mark
    Пример: iptables -t mangle -A INPUT -m mark –mark 1
    Описание: Критерий производит проверку пакетов, которые были предварительно «помечены». Метки устанавливаются действием MARK, которое мы будем рассматривать ниже. Все пакеты, проходящие через netfilter имеют специальное поле mark. Запомните, что нет никакой возможности передать состояние этого поля вместе с пакетом в сеть. Поле markявляется целым беззнаковым, таким образом можно создать не более 4294967296 различных меток. Допускается использовать маску с меткам. В данном случае критерий будет выглядеть подобным образом: –mark 1/1. Если указывается маска, то выполняется логическое AND метки и маски.

6.4.3.4. Критерий Multiport

   Расширение multiportпозволяет указывать в тексте правила несколько портов и диапазонов портов.
 
    ПРИМЕЧАНИЕ: Вы не сможете использовать стандартную проверку портов и расширение -m multiport(например –sport 1024:63353 -m multiport –dport 21,23,80) одновременно. Подобные правила будут просто отвергаться iptables.
 
    Таблица 6-11. Ключи критерия Multiport
   (Ключ – Пример – Описание)
 
    Ключ: –source-port
    Пример: iptables -A INPUT -p tcp -m multiport –source-port 22,53,80,110
    Описание: Служит для указания списка исходящих портов. С помощью данного критерия можно указать до 15 различных портов. Названия портов в списке должны отделяться друг от друга запятыми, пробелы в списке не допустимы. Данное расширение может использоваться только совместно с критериями -p tcpили -p udp. Главным образом используется как расширенная версия обычного критерия –source-port.
 
    Ключ: –destination-port
    Пример: iptables -A INPUT -p tcp -m multiport –destination-port 22,53,80,110
    Описание: Служит для указания списка входных портов. Формат задания аргументов полностью аналогичен -m multiport –source-port.
 
    Ключ: –port
    Пример: iptables -A INPUT -p tcp -m multiport –port 22,53,80,110
    Описание: Данный критерий проверяет как исходящий так и входящий порт пакета. Формат аргументов аналогичен критерию –source-portи –destination-port. Обратите внимание на то что данный критерий проверяет порты обеих направлений, т.е. если вы пишете -m multiport –port 80, то под данный критерий подпадают пакеты, идущие с порта 80 на порт 80.

6.4.3.5. Критерий Owner

   Расширение ownerпредназначено для проверки «владельца» пакета. Изначально данное расширение было написано как пример демонстрации возможностей iptables. Допускается использовать этот критерий только в цепочке OUTPUT. Такое ограничение наложено потому, что на сегодняшний день нет реального механизма передачи информации о «владельце» по сети. Справедливости ради следует отметить, что для некоторых пакетов невозможно определить «владельца» в этой цепочке. К такого рода пакетам относятся различные ICMP responses. Поэтому не следует применять этот критерий к ICMP responsesпакетам.
 
    Таблица 6-12. Ключи критерия Owner
   (Ключ – Пример – Описание)
 
    Ключ: -uid-owner
    Пример: iptables -A OUTPUT -m owner –uid-owner 500
    Описание: Производится проверка «владельца» по User ID (UID). Подобного рода проверка может использоваться, к примеру, для блокировки выхода в Интернет отдельных пользователей.
 
    Ключ: –gid-owner
    Пример: iptables -A OUTPUT -m owner –gid-owner 0
    Описание: Производится проверка «владельца» пакета по Group ID (GID).
 
    Ключ: –pid-owner
    Пример: iptables -A OUTPUT -m owner –pid-owner 78
    Описание: Производится проверка «владельца» пакета по Process ID(PID). Этот критерий достаточно сложен в использовании, например, если мы хотим позволить передачу пакетов на HTTPпорт только от заданного демона, то нам потребуется написать небольшой сценарий, который получает PIDпроцесса (хотя бы через ps) и затем подставляет найденный PIDв правила. Пример использования критерия можно найти в Pid-owner.txt.
 
    Ключ: –sid-owner
    Пример: iptables -A OUTPUT -m owner –sid-owner 100
    Описание: Производится проверка Session IDпакета. Значение SIDнаследуются дочерними процессами от «родителя», так, например, все процессы HTTPDимеют один и тот же SID(примером таких процессов могут служить HTTPDApache и Roxen). Пример использования этого критерия можно найти в Sid-owner.txt. Этот сценарий можно запускать по времени для проверки наличия процесса HTTPD, и в случае отсутствия – перезапустить «упавший» процесс, после чего сбросить содержимое цепочки OUTPUTи ввести ее снова.

6.4.3.6. Критерий State

   Критерий stateиспользуется совместно с кодом трассировки соединений и позволяет нам получать информацию о признаке состояния соединения, что позволяет судить о состоянии соединения, причем даже для таких протоколов как ICMPи UDP. Данное расширение необходимо загружать явно, с помощью ключа -m state. Более подробно механизм определения состояния соединения обсуждается в разделе Механизм определения состояний.
 
    Таблица 6-13. Ключи критерия State
   (Ключ – Пример – Описание)
 
    Ключ: –state
    Пример: iptables -A INPUT -m state –state RELATED,ESTABLISHED
    Описание: Проверяется признак состояния соединения (state) На сегодняшний день можно указывать 4 состояния: INVALID, ESTABLISHED, NEWи RELATED. INVALIDподразумевает, что пакет связан с неизвестным потоком или соединением и, возможно содержит ошибку в данных или в заголовке. Состояние ESTABLISHEDуказывает на то, что пакет принадлежит уже установленному соединению через которое пакеты идут в обеих направлениях. Признак NEWподразумевает, что пакет открывает новое соединение или пакет принадлежит однонаправленному потоку. И наконец, признак RELATEDуказывает на то что пакет принадлежит уже существующему соединению, но при этом он открывает новое соединение Примером тому может служить передача данных по FTP, или выдача сообщения ICMPоб ошибке, которое связано с существующим TCPили UDPсоединением. Замечу, что признак NEWэто не то же самое, что установленный бит SYNв пакетах TCP, посредством которых открывается новое соединение, и, подобного рода пакеты, могут быть потенциально опасны в случае, когда для защиты сети вы используете один сетевой экран. Более подробно эта проблема рассматривается ниже в главе Механизм определения состояний.

6.4.3.7. Критерий TOS

   Критерий TOSпредназначен для проведения проверки битов поля TOS. TOS – Type Of Service– представляет собой 8-ми битовое, поле в заголовке IP-пакета. Модуль должен загружаться явно, ключом -m tos.
    От переводчика:Далее приводится описание поля TOS, взятое не из оригинала, поскольку оригинальное описание я нахожу несколько туманным.
   Данное поле служит для нужд маршрутизации пакета. Установка любого бита может привести к тому, что пакет будет обработан маршрутизатором не так как пакет со сброшенными битами TOS. Каждый бит поля TOSимеет свое значение. В пакете может быть установлен только один из битов этого поля, поэтому комбинации не допустимы. Каждый бит определяет тип сетевой службы:
    Минимальная задержкаИспользуется в ситуациях, когда время передачи пакета должно быть минимальным, т.е., если есть возможность, то маршрутизатор для такого пакета будет выбирать более скоростной канал. Например, если есть выбор между оптоволоконной линией и спутниковым каналом, то предпочтение будет отдано более скоростному оптоволокну.
    Максимальная пропускная способностьУказывает, что пакет должен быть переправлен через канал с максимальной пропускной способностью. Например спутниковые каналы, обладая большей задержкой имеют высокую пропускную способность.
    Максимальная надежностьВыбирается максимально надежный маршрут во избежание необходимости повторной передачи пакета. Примером могут служить PPP и SLIP соединения, которые по своей надежности уступают, к примеру, сетям X.25, поэтому, сетевой провайдер может предусмотреть специальный маршрут с повышенной надежностью.
    Минимальные затратыПрименяется в случаях, когда важно минимизировать затраты (в смысле деньги) на передачу данных. Например, при передаче через океан (на другой континент) аренда спутникового канала может оказаться дешевле, чем аренда оптоволоконного кабеля. Установка данного бита вполне может привести к тому, что пакет пойдет по более «дешевому» маршруту.
    Обычный сервисВ данной ситуации все биты поля TOS сброшены. Маршрутизация такого пакета полностью отдается на усмотрение провайдера.
 
    Таблица 6-14. Ключи критерия TOS
   (Ключ – Пример – Описание)
 
    Ключ: –tos
    Пример: iptables -A INPUT -p tcp -m tos –tos 0x16
    Описание: Данный критерий предназначен для проверки установленных битов TOS, которые описывались выше. Как правило поле используется для нужд маршрутизации, но вполне может быть использовано с целью «маркировки» пакетов для использования с iproute2 и дополнительной маршрутизации в linux. В качестве аргумента критерию может быть передано десятичное или шестнадцатиричное число, или мнемоническое описание бита, мнемоники и их числовое значение вы можете получить выполнив команду iptables -m tos -h. Ниже приводятся мнемоники и их значения. Minimize-Delay 16 (0x10) (Минимальная задержка), Maximize-Throughput 8 (0x08) (Максимальная пропускная способность), Maximize-Reliability 4 (0x04) (Максимальная надежность), Minimize-Cost 2 (0x02) (Минимальные затраты), Normal-Service 0 (0x00) (Обычный сервис).

6.4.3.8. Критерий TTL

    TTL(Time To Live) является числовым полем в IP заголовке. При прохождении очередного маршрутизатора, это число уменьшается на 1. Если число становится равным нулю, то отправителю пакета будет передано ICMPсообщение типа 11 с кодом 0 (TTL equals 0 during transit)или с кодом 1 (TTL equals 0 during reassembly). Для использования этого критерия необходимо явно загружать модуль ключом -m ttl.
    От переводчика:Опять обнаружилось некоторое несоответствие оригинального текста с действительностью, по крайней мере для iptables 1.2.6a, о которой собственно и идет речь, существует три различных критерия проверки поля TTL, это –m ttl –ttl-eq число, -m ttl –ttl-lt числои -m ttl –ttl-gt число. Назначение этих критериев понятно уже из их синтаксиса. Тем не менее, я все таки приведу перевод оригинала:
 
    Таблица 6-15. Ключи критерия TTL
   (Ключ – Пример – Описание)
 
    Ключ: –ttl
    Пример: iptables -A OUTPUT -m ttl –ttl 60
    Описание: Производит проверку поля TTLна равенство заданному значению. Данный критерий может быть использован при наладке локальной сети, например: для случаев, когда какая либо машина локальной сети не может подключиться к серверу в Интернете, или для поиска «троянов» и пр. Вобщем, области применения этого поля ограничиваются только вашей фантазией. Еще один пример: использование этого критерия может быть направлено на поиск машин с некачественной реализацией стека TCP/IPили с ошибками в конфигурации ОС.

6.4.4. Критерий «мусора» (Unclean match)

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

6.5. Действия и переходы

   Действия и переходы сообщают правилу, что необходимо выполнить, если пакет соотвествует заданному критерию. Чаще всего употребляются действия ACCEPTи DROP. Однако, давайте кратко рассмотрим понятие переходов.
   Описание переходов в правилах выглядит точно так же как и описание действий, т.е. ставится ключ -jи указывается название цепочки правил, на которую выполняется переход. На переходы накладывается ряд ограничений, первое – цепочка, на которую выполняется переход, должна находиться в той же таблице, что и цепочка, из которой этот переход выполняется, второе – цепочка , являющаяся целью перехода должна быть создана до того как на нее будут выполняться переходы. Например, создадим цепочку tcp_packetsв таблице filter с помощью команды
    iptables -N tcp_packets
   Теперь мы можем выполнять переходы на эту цепочку подобно:
    iptables -A INPUT -p tcp -j tcp_packets
   Т.е. встретив пакет протокола tcp, iptables произведет переход на цепочку tcp_packetsи продолжит движение пакета по этой цепочке. Если пакет достиг конца цепочки то он будет возвращен в вызывающую цепочку (в нашем случае это цепочка INPUT) и движение пакета продолжится с правила, следующего за правилом, вызвавшем переход. Если к пакету во вложенной цепочке будет применено действие ACCEPT, то автоматически пакет будет считаться принятым и в вызывающей цепочке и уже не будет продолжать движение по вызывающим цепочкам. Однако пакет пойдет по другим цепочкам в других таблицах. Дополнительную информацию о порядке прохождения цепочек и таблиц вы сможете получить в главе