В каждом правиле цепочек iptables указывается действие (target), выполняемое по отношению к пакету при совпадении с условиями, заданными спецификацией правила. Если пакет не удовлетворяет спецификации, он передается следующему правилу, а для соответствующих спецификации пакетов используется операция, заданная параметром -j. В качестве действия может использоваться одна из описанных ниже стандартных операций iptables или пользовательская цепочка. Кроме встроенных операций можно использовать дополнительные операции, загрузив соответствующий код с сайта http://www.netfilter.org/patch-o-matic/ и собрав модули на своем компьютере из исходных кодов. Отметим, что некоторые расширения netfilter/iptables могут потребовать компиляции ядра.
Основные операции
Основные операции поддерживаются программой iptables независимо от загрузки модулей ядра и подключения модулей netfilter, если при компиляции ядра была включена опция глобальной поддержки Netfilter/iptables (Network packet filtering).
ACCEPT
Операция ACCEPT означает восприятие пакета, завершение его обработки в цепочках данной таблицы и передачу на дальнейшие этапы обработки. Для такого пакета последующие правила цепочек данной таблицы уже не используются, однако следует помнить, что пакет может попасть в другие цепочки на этапах дальнейшей обработки.
DROP
В результате операции DROP пакет отбрасывается без дальнейшей обработки и передачи отправителю пакета какого-либо уведомления.
Отметим, что в некоторых случаях отбрасывание пакетов без уведомления их отправителя может вызывать побочные эффекты (в частности, возникновение “мертвых” сокетов). В таких случаях разумно использовать описанную ниже операцию REJECT в результате которой пакет удаляется из обработки, но отправителю выдается сообщение об ошибке. В частности, использование операции REJECT позволяет предотвратить получение с помощью сканеров информации о закрытых в вашей системе номерах портов и т. п.
Важно понимать, что отброшенный с помощью операции DROP пакет просто исключается из какой-либо дальнейшей обработки и не передается никаким приложениям или протоколам вышележащих уровней – пакет просто “тихо умирает”.
QUEUE
Операция QUEUE ведет к передаче пакета в пользовательское пространство, если такая возможность поддерживается ядром. Для использования этой операции также требуется приложение1 пользовательского пространства, способное работать с очередями пакетов.
Стандартный обработчик очередей для iptables и протокола IPv4 реализуется в модуле ip_queue.
Ниже показан пример использования операции QUEUE в пакетном фильтре:
modprobe iptable_filter
modprobe ip_queue
iptables -A OUTPUT -p icmp -j QUEUE
В соответствии с этим правилом локально сгенерированные пакеты ICMP (скажем, ping) будут передаваться модулю ip_queue, который попытается доставить эти пакеты приложению пользовательского пространства. Если ожидающего пакетов приложения пользовательского пространства не будет обнаружено, пакеты будут отброшены.
Для создания приложений используется интерфейсная библиотека libipq (API), включенная в дистрибутив iptables. Примеры таких приложений можно найти среди тестовых программ из дистрибутива iptables (например, redirect.c).
Состояние очереди ip_queue можно посмотреть в файле:
/proc/net/ip_queue
Максимальный размер очереди (число пакетов, доставляемых в пользовательское пространство до вынесения решения об их судьбе) определяется переменной в файле:
/proc/sys/net/ipv4/ip_queue_maxlen
По умолчанию максимальный размер очереди составляет 1024 пакета. По достижении этого значения новые пакеты будут отбрасываться, пока размер очереди не уменьшится. “Деликатные” протоколы типа TCP интерпретируют отбрасывание пакетов как насыщение и будут снижать скорость передачи пакетов при заполнении очереди. Однако для определения оптимального значения порога переполнения очереди в вашем конкретном случае могут потребоваться эксперименты.
RETURN
Операция RETURN завершает обработку пакета в данной цепочке и возвращает управление в вызвавшую ее (предыдущую) цепочку. Если операция RETURN используется во встроенной цепочке или достигнут конец встроенной цепочки, для пакета используется операция, заданная политикой данной цепочки. Логически операция RETURN эквивалентна переходу в конец цепочки и во многих случаях позволяет значительно сократить время прохождения пакета через последовательность правил цепочки.
Дополнительные операции
Поддержка дополнительных операций обусловлена опциями компиляции ядра и загрузкой соответствующих модулей ядра. Однако, эти операции не требуют подключения дополнительных модулей iptables.
BALANCE
Эта операция позволяет транслировать адреса получателя (как это делает операция DNAT, но с перебором адресов из заданного опцией блока.
--to-destination <начало>-<конец блока>
задает блок адресов из которого данная операция будет по кругу выбирать адреса для трансляции DNAT.
Для использования операции BALANCE требуется ядро со включенной опцией IP: fast network address translation.
CLASSIFY
Операция CLASSIFY позволяет устанавливать для пакетов значение поля уровня приоритета skb->priority, которое может использоваться некоторыми дисциплинами для классификации пакетов в системах QoS. К такого типа дисциплинам относятся:
-
atm
-
cbq
-
dsmark
-
pfifo_fast
-
htb
-
prio
Операция может применяться только в цепочке POSTROUTING таблицы mangle и использует единственный параметр
--set-class MAJOR:MINOR
задающий значение для поля приоритета в сетевом буфере skb.
iptables -t mangle -A POSTROUTING .. -j CLASSIFY --set-class MAJOR:MINOR
Для использования операции CLASSIFY требуется ядро со включенной поддержкой опции CLASSIFY target support. Если для опции было выбрано значение M, использовать классификацию пакетов можно будет после загрузки модуля ipt_CLASSIFY.
CLUSTERIP
Операция CLUSTERIP позволяет создать простой кластер узлов, использующих общую пару адресов IP и MAC, без явной системы распределения (балансировки) трафика перед этим кластером. Соединения будут статически распределяться между узлами кластера.
Операция поддерживает несколько опций для создания и управления кластером.
--new
создает новый кластер ClusterIP. Эта операция всегда должна быть первой среди операций для данного ClusterIP.
--hashmode <режим>
задает режим хэширования2 и может принимать значения sourceip (распределение по адресу отправителя), sourceip-sourceport (адрес и порт отправителя), sourceip-sourceport-destport (адрес и порт отправителя, порт получателя).
--clustermac mac
задает MAC-адрес для кластера. По сути, этот адрес является multicast-адресом канального уровня.
--total-nodes <количество>
задает общее число узлов в кластере.
--local-node <номер>
определяет локальный номер узла в кластере.
--hash-init rnd
задает случайное значение, используемое при инициализации hash-функции.
Для использования операции CLUSTERIP требуется ядро со включенной опцией CLUSTERIP target support. Если для опции было выбрано значение M, потребуется также загрузка модуля ядра ipt_CLUSTERIP.
CONNMARK
Эта операция позволяет установить маркер netfilter для данного соединения. Маркеры могут использоваться другими правилами (см. описание проверки connmark) для фильтрации соединений или распределения трафика. Операция использует несколько опций для установки и управления маркерами соединений.
--set-mark <маркер>[/<маска>]
устанавливает маркер для соединения. Если опция содержит маску, устанавливаются только те биты маркера, которые соответствуют этой маске.
--save-mark [--mask <маска>]
копирует установленное для пакета значение маркера в качестве маркера соединения. Если опция содержит маску, копируются только соответствующие этой маске биты маркера.
--restore-mark [--mask <маска>]
копирует маркер соединения в поле маркера пакета. Если опция содержит маску, копируются только соответствующие этой маске биты маркера. Эту опцию можно использовать только в цепочках таблицы mangle.
Для маркировки соединений в ядре должна быть включена поддержка опции Connection mark tracking support и CONNMARK target support. Если при компиляции ядра для второй опции было выбрано значение M, потребуется также загрузить модуль ядра ipt_CONNMARK.
DNAT
Операция DNAT может использоваться в цепочках PREROUTING и OUTPUT таблицы nat, а также пользовательских цепочках, которые могут вызываться только из указанных цепочек и служит для трансляции адреса получателя в исходящих пакетах. При использовании этой операции в заголовке данного пакета и всех последующих пакетов данного потока (соединения) изменяется значение поля IP-адреса получателя. При маршрутизации пакетов они пересылаются в интерфейс, соответствующий измененному адресу получателя.
Опция
--to-destination <адрес>[-<адрес>][:<порт>-<порт>]
служит для указания адреса (диапазона адресов) и номера (диапазона номеров) порта, используемого в качестве адреса получателя после трансляции. Отметим, что задание портов допускается только в правилах, содержащих опцию -p tcp или -p udp. Если порт получателя не указан, сохраняется исходный номер порта. Допускается использование в одном правиле нескольких опций --to-destination, задающих различные адреса. Из всех указанных опциями значений адресов создается пул с последовательным круговым перебором адресов.
Эта операция очень полезна для тех случаев, когда к тому или иному серверу, находящемуся внутри вашей сети и не имеющему публичного адреса, требуется обеспечить доступ извне. Хорошим примером может служить ситуация размещения web-сервера в локальной сети и трансляция на адрес (частный) этого сервера всех пакетов, обращающихся к порту http по имеющемуся у вас3 публичному адресу. Операция может использоваться с диапазоном адресов, значения из которого будут выбираться последовательно (по кругу), что может быть весьма полезно для распределения нагрузки между множеством серверов, которые для внешнего пользователя имеют общий адрес, а реально работают на разных хостах с различными адресами.
Например, команда
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10
обеспечит переадресацию всех запросов http, отправленных по адресу 15.45.23.67 на хосты с адресами из диапазона 192.168.1.1-192.168.1.10 без смены номера порта.
Вы можете также использовать круговую подстановку адреса получателя из заданного блока, выполняемую с помощью операции BALANCE.
Для использования операции DNAT требуется ядро со включенной опцией Full NAT4.
DSCP
Операция DSCP служит для изменения битов DSCP5 в полях TOS заголовков IPv4. Поскольку операция меняет содержимое пакетов, ее можно использовать только в цепочках таблицы mangle. Операция может использоваться с двумя опциями
--set-dscp value
устанавливает для поля DSCP значение value (его можно указать в десятичном или шестнадцатеричном формате)
--set-dscp-class class
устанавливает в поле DSCP значение класса DiffServ.
Для использования операции потребуется ядро со включенной опцией DSCP target support. Если при компиляции ядра для опции было выбрано значение M, следует загрузить модуль ipt_DSCP.
ECN
Эта операция может использоваться только в цепочках таблицы mangle служит для борьбы с “черными дырами ECN6”, возникающими при обмене пакетами с хостами и маршрутизаторами, которые не понимают или некорректно трактуют биты ECN. Поддерживаемая для этой операции опция
--ecn-tcp-remove
удаляет все биты ECN из заголовка TCP. Отметим, что использование такой возможности требует наличия в правиле параметра -p tcp.
Для работы с операцией ECN требуется включить опцию ECN target support при компиляции ядра. Если для опции было выбрано значение M, потребуется загрузка модуля ipt_ECN.
LOG
Операция LOG служит для записи в системный журнал информации о соответствующих пакетах. Для записи используются встроенные средства ядра Linux (syslog). Увидеть эти сообщения можно в файле /var/log/messages, а последние записи выводятся на экран по команде dmesg. Эта операция не прерывает прохождения пакета через цепочку (после передачи ядру информации о пакете данный пакет передается следующему правилу цепочки). Если вы хотите использовать эту операцию о записи сведений об отвергнутых или отброшенных пакетах, следует использовать два последовательных правила с одинаковым набором условий7. В первом правиле используется операция LOG, а во втором - DROP или REJECT.
Операция LOG поддерживает несколько опций:
--log-level <уровень протоколирования>
определяет уровень протоколирования для syslog. Уровень может быть задан числом или предопределенным именем8.
--log-prefix <префикс>
определяет префикс для записей в журнальном файле. Префикс может включать до 29 символов и весьма полезен при анализе и обработке журнальных файлов.
--log-tcp-sequence
говорит ядру о необходимости записи в системный журнал порядковых номеров TCP9.
--log-tcp-options
говорит ядру о необходимости записи в журнал значений некоторых опций из заголовков TCP.
--log-ip-options
говорит ядру о необходимости записи в журнал значений большинства опций из заголовков IP.
Для работы с операцией LOG требуется ядро со включенной при компиляции опцией LOG target support. Если для опции было задано значение M, операция LOG будет работать после загрузки модуля ipt_LOG.
MARK
Эта операция используется для маркировки пакетов и может применяться только в цепочках таблицы mangle. Установленные с помощью этой операции маркеры впоследствии могут использоваться для маршрутизации (например, с помощью iproute2), фильтрации, управления трафиком10. Операция использует 1 опцию
--set-mark mark
которая задает значение11 устанавливаемого маркера.
Для использования операции маркировки пакетов ядро должно иметь включенную опцию MARK target support. Если для опции было выбрано значение M, потребуется загрузка модуля ipt_MARK.
MASQUERADE
Эта операция служит для маскирования (Masquerading) адресов и может применяться только в цепочке POSTROUTING таблицы nat. Операцию следует применять для соединений с динамическими адресами IP, а при работе со статическими адресами разумнее использовать операцию SNAT.
Маскирование эквивалентно отображению пакетов на IP-адрес исходящего интерфейса с удалением информации об этом отображении при отключении (down) интерфейса. Такое поведение корректно для случаев, когда при следующем соединении вероятность получить такой же адрес мала и, следовательно, все организованные ранее соединения так или иначе будут потеряны. Операция MASQUERADE может использоваться с опцией
--to-ports port[-port]
задающей номер (или диапазон номеров) порта отправителя для маскируемых пакетов. Эта опция позволяет изменить используемое по умолчанию значение номера порта, выбранное эвристической машиной SNAT. Использование опции ограничивается правилами, содержащими в спецификации указание на протокол TCP или UDP12 (-p tcp или -p udp).
Для поддержки операции маскирования при компиляции ядра должна быть включена опция MASQUERADE target support. Если при компиляции было выбрано значение M, для маскирования адресов потребуется загрузка модуля ipt_MASQUERADE.
NETMAP
Операций NETMAP позволяет создавать статическое взаимно-однозначное (1:1) отображение сетевых адресов без смены адреса хоста. Операция NETMAP использует опцию
--to адрес[/маска]
для задания диапазона адреса или адресов, в который выполняется отображение.
Приведенная ниже команда позволяет изменить адреса получателей для входящих соединений с 1.2.3.0/24 на 5.6.7.0/24
iptables -t nat -A PREROUTING -d 1.2.3.0/24 -j NETMAP --to 5.6.7.0/24
Для использования операции NETMAP требуется ядро со включенной поддержкой опции NETMAP target support (стр. 104). Если для опции было выбрано значение M, операция станет доступной после загрузки модуля ipt_NETMAP.
NOTRACK
Эта операция может использоваться в цепочках таблицы raw, которая используется в netfilter самой первой (даже до системы отслеживания соединений conntrack) и включает две встроенных цепочки PREROUTING и OUTPUT.
Операция NOTRACK позволяет выбрать пакеты, которые не будут передаваться в подсистему conntrack/NAT для контроля соединений и трансляции адресов. Следует помнить, что при использовании операции NOTRACK для пакетов
-
не используется система контроля соединений conntrack (не отслеживаются сообщения ICMP об ошибках, helper-модули и т. п.);
-
не выполняется никаких действий по преобразованию сетевых адресов и номеров портов - NAT.
Пакеты, отмеченные с помощью операции NOTRACK, соответствуют предопределенному состоянию UNTRACKED, которое может использоваться в других правилах. Например, для сильно загруженного web-сервера можно использовать правила
iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -s 1.2.3.4 -p tcp --sport 80 -j NOTRACK
а в цепочку фильтрации включить правило
iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT
в соответствии с которым все такие пакеты будут безоговорочно приниматься.
Для использования операции NOTRACK в ядре должна быть включена опция NOTRACK target support. Если при компиляции ядра для опции было выбрано значение M, для работы с NOTRACK потребуется загрузить модуль ipt_NOTRACK.
REDIRECT
Операция REDIRECT позволяет переправлять пакеты и потоки трафика на данный хост. Операция может использоваться в цепочках PREROUTING и OUTPUT таблицы nat, а также пользовательских цепочках, которые могут вызываться только из указанных цепочек. При использовании REDIRECT изменяется IP-адрес получателя и пакеты перенаправляются маршрутизатором на себя13. Опция
--to-ports port[-port]
позволяет задать порт или диапазон портов, куда будут перенаправляться пакеты. Эту опцию можно использовать только в правилах, задающих протокол -p tcp или -p udp.
Операция REDIRECT очень эффективна для создания прозрачных proxy, о которых пользователи вашей локальной сети просто не догадываются.
Для использования операции перенаправления трафика следует включить опцию REDIRECT target support при компиляции ядра. Если для опции было выбрано значение M, перенаправление пакетов станет возможным после загрузки модуля ipt_REDIRECT.
REJECT
Эта операция задает отбрасывание пакета с возвратом отправителю сообщения об ошибке (причине отказа). Как и в случае DROP дальнейшая обработка пакета прекращается. Эту операцию можно использовать только во встроенных цепочках INPUT, FORWARD или OUTPUT и пользовательских цепочках, которые вызываются только из трех перечисленных встроенных цепочек. Возвращаемая отправителю информация задается опцией
--reject-with <тип сообщения ICMP>
В качестве значения параметра тип сообщения ICMP можно использовать:
icmp-net-unreachable – сеть недоступна;
icmp-host-unreachable – хост недоступен;
icmp-port-unreachable – порт недоступен;
icmp-proto-unreachable – протокол недоступен;
icmp-net-prohibited – доступ в сеть закрыт;
icmp-host-prohibited – доступ к хосту закрыт;
icmp-admin-prohibited – доступ закрыт администратором14.
Отметим, что в соответствии с требованиями RFC 1122 сообщения ICMP не передаются в следующих случаях:
-
отброшенный пакет был сообщением ICMP об ошибке или пакетом ICMP неизвестного типа;
-
отброшенный пакет был не первым фрагментом;
-
за последнее время по этому адресу было передано слишком много сообщений ICMP об ошибках (см. описание переменной /proc/sys/net/ipv4/icmp_ratelimit на стр. 453).
В правилах для протокола TCP можно также использовать значение tcp-reset. В этом случае отправителю передается пакет TCP RST. Эта возможность полезна для блокировки запросов ident (113/tcp), которые часто используются при попытках отправить почту на неработающие (отказывающиеся принимать вашу почту) почтовые серверы.
Например команда
iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
будет добавлять в цепочку FORWARD правило, отвергающее все пакеты TCP, адресованные в порт 22, с возвратом отправителю пакета TCP RST.
Для использования операции REJECT при компиляции ядра должна быть включена опция REJECT target support. Если вы выбрали для данной опции значение M для использования операции REJECT потребуется загрузить модуль ipt_REJECT.
ROUTE
Операция ROUTE служит для явной отмены решения о маршрутизации, принятого на уровне ядра и указания иного маршрута передачи пакета. Операция использует несколько опций, обеспечивающих управление маршрутизацией пакетов.
--oif <интерфейс>
задает отправку пакета через заданный именем интерфейс.
--iif <интерфейс>
меняет для пакета информацию о принявшем его интерфейсе (поле real_dev структуры skb, описанное на стр. 494).
--gw
указывает шлюз для маршрутизации пакета.
--continue
задает продолжение обработки пакета в цепочке правил. Эта опция не может использоваться совместно с –iif.
SAME
Операция SAME транслирует сетевые адреса подобно SNAT и предоставляет клиенту один и тот же адрес для каждого соединения. Операция использует опцию
--to -
для задания диапазона адресов, используемых операцией при подстановке, а опция
--nodst
говорит о том, что при выборе адреса отправителя для подстановки, адрес получателя не должен приниматься во внимание.
Приведенная ниже команда
iptables -t nat -A POSTROUTING -j SAME --to 1.2.3.4-1.2.3.7
будет менять в исходящих пакетах поле адреса отправителя на значение из диапазона 1.2.3.4-1.2.3.7.
Для использования операции SAME требуется ядро со включенной поддержкой опции SAME target support. Если для опции было выбрано значение M, операция станет доступной после загрузки модуля ipt_ SAME.
SNAT
Операция SNAT, использовать которую можно только в цепочке POSTROUTING таблицы nat, обеспечивает трансляцию (замену) адреса отправителя для исходящего пакета (и всех последующих пакетов в этом соединении). Команда используется с опцией
--to-source ipaddr[-ipaddr][:port-port]
которая позволяет задать новый адрес (диапазон адресов) IP и номер (диапазон номеров) порта15 в поле заголовка IP. Если номер порта для протокола TCP или UDP не указан, порты с номерами < 512 будут отображаться в порты с номерами ниже 512, порты из диапазона 512 – 1023 будут отображаться в порты с номерами <1024, а все остальные порты будут отображаться в порты с номерами 1024 и выше. В таких случаях преобразование номера порта происходит только при реальной необходимости. Допускается использование в одном правиле нескольких опций --to-source. Если задано использование множества адресов отправителя (диапазон или несколько опций –to-source), эти адреса будут перебираться последовательно (по кругу).
Опция SNAT полезна в тех случаях, когда в вашей сети используются адреса из частных блоков16 IP, поскольку она позволяет отобразить для всех исходящих соединений адреса отправителей на публичный адрес, предоставленный вам провайдером Internet.
При использовании операции SNAT на граничном маршрутизаторе не забудьте разрешить прием пакетов для указанного при трансляции адреса в цепочке FORWARD для этого маршрутизатора. Например, при использовании на маршрутизаторе команды
iptables -t nat -A POSTROUTING -s x.x.x.x -j SNAT –to-source z.z.z.z
нужно добавить также команду
iptables -A FORWARD -d z.z.z.z -j ACCEPT
или иную команду, которая обеспечит прием пакетов, поскольку без этого правила пакеты, направленные по адресу z.z.z.z могут отбрасываться другими правилами.
Для использования операции SNAT требуется ядро со включенной опцией Full NAT17.
TCPMSS
Эта операция изменяет значение MSS18 в заголовках пакетов TCP SYN, позволяя управлять максимальным размером сегмента для соединения. Операция может использоваться только для пакетов TCP и требует наличия в строке правила спецификации протокола -p tcp. Кроме того, для использования этой операции нужно включить опцию TCPMSS target support. Эта операция может служить для борьбы с “отмороженными” провайдерами и серверами, которые блокируют сообщения ICMP Fragmentation Needed19. Симптомы проблемы состоят в том, что с Linux-брандмауэра (маршрутизатора) обеспечивается беспрепятственный доступ, но стоящие за брандмауэром компьютеры не могут обмениваться большими пакетами с внешними хостами:
-
подключение к Web-серверам происходит беспрепятственно, но при загрузке содержимого процесс “умирает”;
-
мелкие почтовые сообщения приходят нормально, а большие не доходят совсем;
-
ssh работает хорошо, но scp зависает после стартовой инициализации.
Для решения проблемы можно использовать команду типа приведенной ниже:
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Опция
--set-mss value
используется для явной установки значения MSS, а
--clamp-mss-to-pmtu
автоматически выбирает для MSS значение (path_MTU – 40). Опции исключают одна другую и не могут использоваться совместно.
Для работы с операцией TCPMSS в ядре должна быть включена опция TCPMSS target support. Если для опции было выбрано значение M, потребуется также загрузка модуля ipt_TCPMSS.
TOS
Эта операция используется для установки значения 8-битового поля Type of Service (TOS) в заголовках пакетов IP. Операция может использоваться только в цепочках таблицы mangle. Для использования этой операции нужно включить поддержку опции TOS target support при компиляции ядра. При выборе для опции значения M, использование операции TOS потребует предварительной загрузки модуля ipt_TOS.
Опция
--set-tos tos
определяет значение поля TOS, устанавливаемое для пакета. Для просмотра возможных значений используйте команду Linux
iptables -j TOS -h
Установленное значение TOS может использоваться локальными программами обработки сетевых пакетов (например, iproute2) или внешними маршрутизаторами20. Значительная часть современных маршрутизаторов поддерживает TOS, поэтому имеет смысл предпринять попытку запросить нужные условие доставки перед отправкой пакетов во внешние сети. Ничего страшного не произойдет, если маршрутизаторы на пути доставки не поддерживают TOS – в таких случаях это поле просто не принимается во внимание. При использовании же этого поля в пределах своей сети можно оказать существенное влияние на картину внутрисетевого трафика.
Приведенная ниже команда
iptables -t mangle -A PREROUTING -p TCP --dport 22 -j TOS --set-tos 0x10
запрашивает для пакетов TCP, передающих данные протокола SSH, минимальную задержку при доставке.
TRACE21
С помощью операции TRACE можно отслеживать прохождение пакета через цепочки правил. Если при прохождении цепочек таблицы rawдля пакета указана операция TRACE, при выполнении условий любого из следующих правил на пути прохождения пакета через цепочки в журнальный файл системы будет помещаться запись вида:
TRACE: <имя таблицы>/<имя цепочки>/<номер правила> <пакет>
Операция не использует каких-либо опций.
Для записи в журнал требуется также загрузка по крайней мере одного из модулей протоколирования (ipt_LOG или ipt_ULOG). Если вы загружены оба модуля, будет использоваться “встроенное” журналирование с помощью ipt_LOG, но вы можете отдать предпочтение пользовательскому модулю ipt_ULOG, если при его загрузке воспользуетесь параметром takeover
modprobe ipt_ULOG takeover=1
TTL
Операция TTL позволяет задать значение поля времени жизни в заголовках пакетов IP. Операцию можно применять только в цепочках таблицы mangle. Операция может использовать 3 параметра
--ttl-set <значение TTL>
позволяет явно задать значение времени жизни для пакета. Не следует устанавливать слишком большое значение TTL для пакетов, направленных в вашу внутреннюю сеть, это может вызвать проблемы.
--ttl-dec <шаг уменьшения TTL>
позволяет задать дополнительное снижение значения TTL. Не следует забывать, что каждый маршрутизатор при пересылке пакетов уменьшает это значение на 1. Например, при установке для параметра значения 3 реальное уменьшение TTL после маршрутизации составит 4.
--ttl-inc <шаг увеличения TTL>
позволяет увеличить значение времени жизни для пакетов. С помощью этого параметра можно попытаться “спрятать” ваш брандмауэр от программ трассировки.
На практике эта операция нужна пожалуй лишь для борьбы с провайдерами, которые не позволяют подключать по одному каналу более одной машины. В таких случаях мы просто устанавливаем одинаковое значение (скажем, стандартное для Linux значение 64) для всех исходящих пакетов. Может эта операция быть полезной также в тех случаях, когда желательно ограничить сферу досягаемости тех или иных служб22.
ULOG
Операция ULOG служит для записи информации о соответствующих заданным условиям пакетов с помощью средств ведения рабочих журналов на уровне пользовательского пространства. Эта операция не прерывает прохождения пакета через цепочку и служит лишь для записи сведений о пакете. При соответствии пакета заданным условиям ядро Linux будет передавать этот пакет с использованием групповой адресации (multicast) через сокет netlink. Включенные в соответствующую multicast-группу приложения пользовательского пространства будут получать такие пакеты. Команда ULOG поддерживает несколько опций:
--ulog-nlgroup nlgroup
позволяет задать номер группы netlink (1-32), которой будут адресоваться пакеты. По умолчанию используется группа 1.
--ulog-prefix prefix
задает префикс, который включается в начало записи журнального файла. Префикс может включать до 32 символов. Использование префиксов упрощает анализ и обработку журнальных файлов.
--ulog-cprange size
число байтов из пакета, копируемых в пользовательское пространство. При выборе значения 0 (используется по умолчанию) пакет копируется целиком, независимо от его размера.
--ulog-qthreshold size
определяет размер очереди пакетов в ядре. При установке отличного от 1 значения ядро будет аккумулировать заданное число пакетов и передавать его в пользовательское пространство как одно сообщение netlink (это сообщение может быть разбито на части). Для обратной совместимости по умолчанию используется значение 1.
Для работы с операцией ULOG требуется ядро со включенной при компиляции опцией ULOG target support. Если для опции было задано значение M, операция ULOG будет работать после загрузки модуля ipt_ULOG.
Операции расширения
Кроме основных и дополнительных операций программа iptables может работать с операциями расширения, которые существуют в виде отдельных модулей и не входят в стандартный комплект распространения программы. Такие модули доступны на сайте http://www.netfilter.org. Установка дополнительных модулей из пакета patch-o-matic в отдельной статье.
|