ИМЯ
ОБЗОР
ОПИСАНИЕ
ЦЕЛИ
ТАБЛИЦЫ
ОПЦИИ
КОМАНДЫ
ПАРАМЕТРЫ
ПРОЧИЕ ОПЦИИ
РАСШИРЕНИЯ МЕХАНИЗМА ТЕСТИРОВАНИЯ
РАСШИРЕНИЯ МЕХАНИЗМА ОБРАБОТКИ
ДИАГНОСТИКА
ОШИБКИ
СОВМЕСТИМОСТЬ С IPCHAINS
СМ. ТАКЖЕ
АВТОРЫ
ПЕРЕВОД
iptables – инструмент администрирования фильтра пакетов IPv4 и NAT
iptables [-t таблица] -[AD] цепочка описание-правил [опции]
iptables [-t таблица] -I цепочка [номер-правила] описание-правил [опции]
iptables [-t таблица] -R цепочка номер-правила описание-правил [опции]
iptables [-t таблица] -D цепочка номер-правила [опции]
iptables [-t таблица] -[LFZ] [цепочка] [опции]
iptables [-t таблица] -N цепочка
iptables [-t таблица] -X [цепочка]
iptables [-t таблица] -P цепочка цель [опции]
iptables [-t таблица] -E старое-имя-цепочки новое-имя-цепочки
Iptables используется для установки, настройки и просмотра таблиц правил фильтрации IP-пакетов в ядре Linux.
Каждая таблица содержит несколько предопределённых цепочек и может содержать цепочки, определённые пользователем. Каждая цепочка – это список правил, которые могут воздействовать на множество пакетов. Каждое правило определяет, какие действие произвести с пакетами, на которые оно действует. Эти действия называются целью, целью может быть и переход на другую (определённую пользователем) цепочку в этой же таблице.
Правило брандмауэра (межсетевого экрана) определяет критерии для пакета и цели. Если пакет не попадает под действие правила, проверяется следующее правило в цепочке; если попадает – проверяется правило, указанное в цели, которая может быть именем новой цепочки или одно из специальных целей: ACCEPT, DROP, QUEUE или RETURN
.
ACCEPT принять (пропустить далее) пакет DROP проигнорировать (отбросить) пакет. QUEUE передать пакет в адресное пространство пользователя (получение пакета пользовательским процессом зависит от обработчика очереди; в ядрах 2.4.x и 2.6.x до 2.6.13 использовался обработчик ip_queue; в ядрах начиная с 2.6.14 появился дополнительный обработчик nfnetlink_queue; в этом случае пакеты с целью QUEUE отправляются очереди номер 0; см. также цель NFQUEUE ниже по тексту). RETURN остановить применение правил этой цепочки и передать пакет следующему правилу предыдущей (вызывающей) цепочки. Если достигается конец встроенной (предопределённой) цепочки или в ней к пакету применяется правило с целью RETURN, то окончательное действие над пакетом (цель) определяется стратегией (политикой) цепочки.
Существует три независимых таблицы (какие именно таблицы присутствуют в данный момент — зависит от конфигурации ядра и наличия его модулей).
-t, –table таблица
Опции iptables могут быть разделены на несколько групп.
Эти опции определяют действие, выполняемое в данном сеансе работы программы. В командной строке может быть указана только одна из этих опций, если противоположное явно не указано в описании. Длинные команды можно сокращать до первых букв, но их должно быть достаточно, чтобы программа могла однозначно идентифицировать команду.
-A, –append цепочка определение-правила
iptables -t nat -n -L
Обратите внимание на опцию -n которая часто используется для отключения (медленного) определения имён DNS. Также можно указать опцию -Z -Z (zero), в этом случае автоматически произойдёт перечисление правил цепочки и обнуление её счётчиков. Вид результата зависит от других аргументов. Самый детальный результат может быть получен так:
iptables -L -v
Следующие параметры предназначены для формирования правил (используются в командах add, delete, insert, replace и append).
-p, –protocol [!] протокол
Имеются следующие дополнительные опции:
-v, –verbose
Возможности тестирования пакетов расширяются через модули. Последние загружаются либо автоматически при указании -p / –protocol , либо явно при указании имени модуля через -m / –match . После загрузки модуля становятся доступными дополнительные опции командной строки, в зависимости от модуля. Справку по новым ключам можно получить с помощью ключа -h / –help . Допустимо указание нескольких модулей. Результаты тестирования, выдаваемые модулем, обычно можно инвертировать указав ! перед его именем. В базовую поставку входят следующие модули.
Вести учёт трафика для всех хостов в определённой подсети (по маске).
Возможности:
- подробная (один счётчик на протокол – TCP/UDP/IMCP/Прочие) и краткая статистика
- одно правило iptables для всех хостов в определённой подсети (по маске).
- загрузка/сохранение счётчиков (посредством записей procfs)
–aaddr сеть/маска
# iptables -A FORWARD -m account –aname mynetwork –aaddr 192.168.0.0/24
Вести учёт трафика WWW-сервера из/в сеть 192.168.0.0/24 в таблице mywwwserver:
# iptables -A INPUT -p tcp –dport 80
-m account –aname mywwwserver –aaddr 192.168.0.0/24 –ashort
# iptables -A OUTPUT -p tcp –sport 80
-m account –aname mywwwserver –aaddr 192.168.0.0/24 –ashort
Снять показания счётчиков:
# cat /proc/net/ipt_account/mynetwork # cat /proc/net/ipt_account/mywwwserver
Установить показания счётчиков:
# echo “ip = 192.168.0.1 packets_src = 0″ > /proc/net/ipt_account/mywwserver
Веб-страница:
http://www.barbara.eu.org/~quaker/ipt_account/
Данный модуль тестирует пакеты по типу адреса. Точное определение конкретного “типа адреса” зависит от соответствующего протокола третьего уровня.
Имеются следующие типы адресов:
UNSPEC
Этот модуль тестирует по последовательным периферийным интерфейсам (SPI) в аутентификационном заголовке пакетов IPsec.
–ahspi [!] spi[:spi]
Экспериментальный модуль. Он тестирует по факту принадлежности пакета к основному соединению непосредственно или через дочерние соединения. Например, большинство пакетов принадлежат к основному соединению непосредственно (уровень 0). Данные FTP – дочернему (уровень 1). Уровень может быть сколь угодно большим.
–childlevel [!] уровень
Позволяет добавлять комментарии (до 256 символов) в правила.
–comment комментарий
Пример:
Результат теста совпадает со значением в соответствующем файле /proc – 0 или 1.
–condition [!] имя-файла
Результат теста будет зависеть от количества байт или пакетов, переданных на данный момент (в обоих или одном из направлений), или по среднему числу байт, приходящихся на пакет.
Под каждый из счётчиков отводится 64 бита, поэтому их переполнение практически невозможно.
Обычно данный модуль используется для уменьшения приоритета долгих загрузок.
Статистику по трафику соединений можно просмотреть в файле /proc/net/ip_conntrack, для обращения к ней воспользуйтесь ctnetlink
[!] –connbytes мин:[макс]
Позволяет ограничить число одновременных соединений TCP для одного IP-адреса (клиента) либо блока адресов.
[!] –connlimit-above n
Этот модуль позволяет использовать в правилах проверку значений маркеров соединения, установленных с помощью операции (цели) CONNMARK (см. ниже).
–mark маркер[/маска]
Выдаёт результат теста на основе текущей скорости передачи данных по соединению.
–connrate [!] [мин]:[макс]
Этот модуль при использовании совместно с компонентом мониторинга соединений предоставляет более широкие сведения о состоянии соединения, чем “state”. Модуль доступен если сборка iptables проводилась с ядром, имеющим возможности требуемые для модуля.
–ctstate состояния
–source-port,–sport [!] порт[:порт]
–destination-port,–dport [!] порт[:порт]
–dccp-types [!] типы-пакетов
Этот модуль проверяет 6-разрядное значение DSCP в поле TOS заголовка IP. В соответствии с RFC 247413 значение DSCP заменяет собой значение TOS.
–dscp значение
Позволяет ограничивать скорость обмена пакетами в секунду (pps) для одного целевого IP/порта.
ЭТОТ МОДУЛЬ УСТАРЕЛ. ИСПОЛЬЗУЙТЕ МОДУЛЬ “hashlimit”
–dstlimit скорость
Используется для проверки соответствия значения поля ECN в заголовках IPv4 и TCP. ECN - это механизм явного предуведомления о перегрузке (Explicit Congestion Notification) определённый RFC3168
--ecn-tcp-cwr
Модуль esp служит для проверки значений SPI в заголовках ESP пакетов IPSec.
--espspi [!] spi[:spi]
Результат теста зависит от скорости доставки пакетов по методу FLC (Fuzzy Logic Controller): пока скорость доставки пакетов не достигает нижнего порога, условие никогда не будет выполняться; при скорости в диапазоне между нижним и верхним порогами частота выполнения условий будет расти пропорционально скорости доставки пакетов; после превышения верхнего порога скорости частота выполнения условий достигнет максимального значения.
–lower-limit скорость
Этот модуль добавляет новое условие проверки hashlimit, позволяющее вводить ограничения на один адрес назначения или пару “адрес-порт”.
С помощью данного условия можно задавать ограничения типа
Выдаёт положительный результат для пакетов относящихся к конкретному вспомогательному компоненту conntrack.
–helper имя
Аналогично и для других компонентов.
Эта расширение загружается при указании `–protocol icmp’.
–icmp-type [!] тип
iptables -p icmp -h
Результат теста зависит от адреса IPv4.
[!]–src-range ip-ip
Результат теста зависит от параметров заголовка IPv4, таких как параметры маршрутизации, запись маршрута, запрос времени, оповещение маршрутизатора.
–ssrr
Позволяет проверять размеры пакетов (точно или по диапазону).
–length [!] размер[:размер]
Этот модуль выдаёт положительный результат с фиксированной частотой. Правило использующее это расширение будет выполняться до момента достижения лимита (и наоборот, если указан “!”). Может использоваться вместе с целью LOG для получения ограниченного протоколирования.
–limit частота
–mac-source [!] адрес
Тестирует по полю mark. Это специальное поле, которое существует только в области памяти ядра и связывается с конкретным пакетом. (для установки этого поля используется цель MARK , описанная ниже).
–mark число[/маска]
Модуль пропускает пакеты на заданном наборе портов (исходных или целевых). Возможно указание до 15 портов. Используется только вместе с -p tcp или -p udp.
–source-ports порт[,порт[,порт...]]
Позволяет указывать в тексте правила несколько (до 15) портов и диапазонов портов. Диапазон портов (порт:порт) считается за два порта (в отношении ограничения в 15). Используется только вместе с -p tcp или -p udp.
–source-ports [!] порт[,порт[,порт:порт...]]
Пропускает каждый `n’-ый пакет
–every n
Идея фильтрации по пассивным сигнатурам ОС (passive OS fingerprint) была изначально реализована в брандмауэре pf из OpenBSD.
Оригинальная таблица сигнатур составлена Михаилом Залевски (Michal Zalewski) <lcamtuf@coredump.cx>.
Данный модуль фильтрует пакеты по данным из (первого) пакета SYN (WS, MSS, опциям и их порядку, ttl, df и т.д.), определяя ОС отправителя на основе динамической таблицы сигнатур ОС.
–log 1/0
Обратите внимание, что указание -p tcp обязательно, поскольку проверка ведётся на уровне этого протокола.
Сигнатуры хранятся в файле /proc/sys/net/ipv4/osf. Очистить список сигнатур можно командой
Позволяет фильтровать по параметрам “владельца” пакета. Этот критерий можно использовать только в цепочке OUTPUT , но даже в этом случае могут попадаться пакеты без владельца (например, ответы ISMP ping), и такие пакеты не будут пропускаться.
–uid-owner идентификатор-пользователя
Позволяет организовывать фильтрацию по устройствам используемым для связи двух локальных сетей. Это модуль является частью инфраструктуры для IP-брандмауэра “прозрачно” связывающего сети. Имеет смысл использовать только с ядрами 2.5.44.
–physdev-in [!] имя
Позволяет фильтровать пакеты по их типу на уровне канала связи.
–pkt-type [unicast|broadcast|multicast]
Позволяет фильтровать пакеты по стратегии обработки пакета IPsec.
–dir in|out
Пытаться обнаружить сканирование портов TCP и UDP. Реализовано на основе scanlogd из Solar Designer.
–psd-weight-threshold порог
Позволяет квотировать использование сети – уменьшает счётчик байтов на единицу при обработке каждого пакета.
–quota размер
Вероятностная фильтрация.
–average доля
Фильтровать пакеты по области маршрутизации. Последние используются в сложных конфигурациях сетей, задействующих динамические протоколы маршрутизации наподобие BGP.
–realm [!] значение[/маска]
Позволяет динамически составлять списки IP-адресов и выполнять фильтрацию по ним различными способами.
Например, можно создать список `badguy’, соответствующий компьютерам,
с которых поступали запросы на порт 139, и затем отбрасывать все их любые последующие запросы.
–name имя
Таблицы адресов хранятся в /proc/net/ipt_recent/.
Таким образом, можно просмотреть текущее содержимое списков адресов, а также модифицировать их:
–source-port,–sport [!] порт[:порт]
–destination-port,–dport [!] порт[:порт]
–chunk-types [!] all|any|only
тип части доступные флаги
DATA U B E u b e
ABORT T t
SHUTDOWN_COMPLETE T t
(нижний регистр = флаг должен быть “выключен”, верхний – “включен”) Примеры:
iptables -A INPUT -p sctp –dport 80 -j DROP
iptables -A INPUT -p sctp –chunk-types any DATA,INIT -j DROP
iptables -A INPUT -p sctp –chunk-types any DATA:Be -j ACCEPT
Фильтрует по принадлежности IP множествам определяемым с помощью ipset(8).
–set имя-множества флаг[,флаг...]
iptables -A FORWARD -m set --set test src,dst
будут соответствовать пакеты, адрес или порт (в зависимости от множества) источника которых имеется во множестве.Если адрес/порт имеется в множестве, и для соответствующего элемента множества (либо для всего множества) определён адрес назначения (т.е. адрес), то для получения положительного результата необходимо также чтобы совпадали адреса назначения.
Используется с компонентом мониторинга соединений, и позволяет использовать состояние трассировки пакета.
–state состояния
Фильтровать по содержимому пакета. Для работы требуется ядро linux >= 2.6.14.
–algo bm|kmp
Это расширение загружается при указании `–protocol tcp’. Становятся доступными следующие ключи:
–source-port [!] порт[:порт]
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
будут соответствовать пакеты с установленным флагом SYN, и снятыми флагами ACK, FIN, RST.
Фильтрует по полю MSS (maximum segment size – максимальный размер сегмента) заголовка TCP. Возможно применять только к пакетам TCP SYN и SYN/ACK, т.к. MSS определяется в рамках процедуры согласования (handshake) в начале соединения.
[!] –mss число[:число]
Фильтрует пакеты по времени/дате прибытия. Все ключи являются необязательными.
–timestart чч:мм
Фильтрует по разрядам байта TOS (Type Of Service – говоря вообще, приоритет пакета) в заголовке IP-пакета.
–tos tos
iptables -m tos -h
) или число.
Фильтрует по полю заголовка IP, определяющему время жизни пакета.
–ttl-eq ttl
Позволяет извлекать из пакета данные размером до 4 байт, применять к ним операции логического И, сдвига, и проверять принадлежность получающихся данных определённым диапазонам.
Более подробное описание и примеры доступны в исходном коде ядра.
Это расширение загружается при указании `–protocol udp’. Доступны следующие ключи:
–source-port [!] порт[:порт]
Фильтрует предположительно ошибочные и бесполезные пакеты. Это экспериментальный модуль.
В iptables можно добавлять дополнительные цели: Далее описаны модули включенные в стандартную поставку.
Позволяет равномерно распределять соединения между компьютерами в локальной сети в заданном диапазоне (целевых) адресов.
–to-destination ip1-ip2
Устанавливает значение skb->priority (т.е. классифицировать пакет по критерию CBQ).
–set-class главное-число:дополнительное-число
Позволяет реализовывать простые конфигурации кластеров с общим IP и MAC без явного использования балансировщика (см. выше). Соединения распределяются статически.
–new
Помечает соединения.
–set-mark метка[/маска]
Переносит метки механизма защиты из пакетов в соединения (если они ещё не имеют меток), и из соединений обратно в пакеты (также если они ещё не имеют меток). Обычно используется совместно с SECMARK и только в таблице mangle .
–save
Применяется только в таблице nat и цепочках PREROUTING , OUTPUT и вызываемых из них цепочках определяемых пользователем. DNAT (Destination Network Address Translation) используется для преобразования адреса места назначения в IP заголовке пакета. Если пакет подпадает под критерий правила, выполняющего DNAT, то этот пакет, и все последующие пакеты из этого же потока, будут подвергнуты преобразованию адреса назначения и переданы на требуемое устройство, хост или сеть. Доступен один ключ:
–to-destination
Позволяет изменять разряды DSCP в заголовке TOS пакетов IPv4. Может использоваться только в mangle.
–set-dscp значение
Позволяет закрывать известные “дыры” ECN. Используется в mangle.
–ecn-tcp-remove
Отмечает принимаемые пакеты на основе IP-адресов, связанных с ними. Позволяет заменить несколько записей mangle/mark одной в случае использования классификатора брандмауэра.
Используется в mangle, PREROUTING, POSTROUTING и FORWARD.
–addr src/dst
Создадим очередь для каждого пользователя, номер очереди будет соответствовать IP-адресу: все пакеты приходящие от/отправляемые в 192.168.5.2 будут перенаправляться в очередь 1:0502, 192.168.5.12 -> 1:050c и т.д.
Имеется одно правило классификации:
Удаляет все опции IP из пакета.
Никаких дополнительных параметров не требуется:
# iptables -t mangle -A PREROUTING -j IPV4OPTSSTRIP
Вносить в протокол ядра записи о пакетах (например, поля заголовка IP), для которых указана данная цель. Протокол ядра доступен по команде dmesg . См. syslogd(8)). Обработка после этой цели продолжается. Так, для внесения записей о блокируемых пакетах укажите два отдельных правила с одинаковыми условиями, для первого укажите цель LOG, для второго – DROP (или REJECT).
–log-level уровень
Используется для присвоения пакетам меток. Может использоваться только в пределах таблицы mangle . Обычно используется вместе с iproute2.
–set-mark значение
Цель допустима только в таблице nat в цепочке POSTROUTING , для конфигураций с динамической выдачей IP (dialup): если у вас статический IP-адрес, используйте SNAT (это уменьшит нагрузку на систему). Маскарадинг – это по сути привязывание к IP-адресу интерфейса, через который пакет выходит, но он также имеет хорошее свойство – забывать соединения при остановке сетевого интерфейса. Это корректное поведение если каждый раз при установлении связи с Internet получается новый адрес (потому имеющиеся соединения теряются в любом случае).
–to-ports порт[-порт]
Экспериментальная цель, созданная в демонстрационных целях, поскольку это действие может привести к “зацикливанию” пакета и, в результате, к отказу в обслуживании.
Данное действие допускается использовать только в цепочках INPUT, FORWARD , PREROUTING и в цепочках, вызываемых из них. Пакеты, отправляемые в сеть действием MIRROR, больше не подвергаются фильтрации, трассировке или NAT, избегая тем самым “зацикливания” и других неприятностей. NOT .
Позволяет задать статическое отображение адресов одной подсети в адреса другой. Используется только в таблице nat .
–to адрес[/маска]
Это расширение QUEUE. В отличие от QUEUE, позволяет помещать пакет в определённую очередь, идентифицируемую по 16-разрядному номеру.
–queue-num номер
Исключает пакет из множества наблюдаемых.
Используется только в таблице
Может использоваться только в цепочках PREROUTING и OUTPUT таблицы nat , а также в цепочках, вызываемых из вышеуказанных.
Выполняет перенаправление пакетов на другой порт той же самой машины. Очень удобно для выполнения “прозрачного” проксирования (transparent proxying), когда машины в локальной сети даже не подозревают о существовании прокси-сервера. При перенаправлении целевой IP-адрес пакета меняется на основной адрес интерфейса отправки (локальным пакетам присваивается 127.0.0.1). Для действия REDIRECT предусмотрен только один ключ:
–to-ports порт[-порт]
Используется для отправки сообщения об ошибке на хост, от которого получен исходный пакет, в остальном эквивалентно DROP , обработка пакета останавливается на этой цели. Может использоваться только в цепочках INPUT, FORWARD , OUTPUT , а также в цепочках, вложенных в них. Следующий ключ определяет форму пакета с сообщением об ошибке:
–reject-with тип
icmp-net-unreachable icmp-host-unreachable icmp-port-unreachable icmp-proto-unreachable icmp-net-prohibited icmp-host-prohibited icmp-admin-prohibited (*)
По умолчанию отправляется port-unreachable. Для правил, которые фильтруют пакеты только принадлежащие протоколу TCP, можно указывать tcp-reset : это приведёт к возврату пакетов TCP RST и полезно для блокирования тестов ident (113/tcp) выполняемых при отправке почты на недоступные узлы.
Позволяет явно изменять логику маршрутизации сетевой подсистемы. Используется в таблице mangle .
–oif интерфейс
Аналогично SNAT/DNAT, в зависимости от цепочки: на вход принимается диапазон адресов (`–to 1.2.3.4-1.2.3.7′), после чего клиентам выдаётся одна и та же пара исходного/целевого адресов для одного соединения.
–to ip1-ip2
Устанавливает метки механизма защиты в пакетах. Они используются подсистемами защиты наподобие SELinux. Допустимо указание только в таблице mangle .
–selctx контекст-защиты
Добавляет и удаляет элементы из множеств IP, определяемых с помощью ipset(8).
–add-set имя-множества флаг[,флаг...]
Используется только в цепочке POSTROUTING таблицы nat . Изменяет адрес источника пакета, если он удовлетворяет условиям, и всех последующих пакетов соединения (последние не будут тестироваться).
–to-source ip1[-ip2][:порт1-порт2]
Удерживает входящие соединения TCP (объём используемых модулем ресурсов не зависит от количества соединений). Запросы на установление соединения принимаются, но сразу после этого соединения переводятся в состояние удерживания (persist – окно нулевого размера), в которых удалённая сторона не посылает никаких данных, и только отправляет запросы на продолжение каждые 60-240 секунд. Попытки закрытия соединения игнорируются, и оно закрывается по истечении времени ожидания (12-24 минут).
Аналогично LaBrea <http://www.hackbusters.net/LaBrea/>, но не требует выделенного сервера и IP-адресов. Любой порт TCP, для которого иначе бы выполнялось одно из действий DROP или REJECT, может удерживать соединения (стать tarpit).
Для удерживания соединений на порт TCP 80 данного компьютера:
Позволяет изменять значение MSS пакетов TCP SYN, для ограничения размера пакетов соединения (обычно ограничение равно MTU исходящего интерфейса минус 40). Натурально, может использоваться только при -p tcp, в таблице mangle.
Эта цель полезна если провайдер или серверы блокируют пакеты ICMP запроса фрагментации. Определить, так ли это в вашем случае, легко: с компьютера Linux, выступающего в роли брандмауэра/маршрутизатора всё работает, но компьютеры, которые он обслуживает, не могут обмениваться пакетами большого размера:
Как это можно исправить: включите указанную опцию и добавьте правило в брандмауэр:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \
-j TCPMSS --clamp-mss-to-pmtu
–set-mss значение
Используется для установки разрядов в поле Type of Service заголовка IP. Допустимо только в таблице mangle .
–set-tos tos
iptables -j TOS -h
Включает трассировку пакетов соответствующих условию правила.
Используется для изменения содержимого поля Time To Live в заголовке IPv4. TTL определяет число маршрутизаторов которое пакет должен пройти прежде чем он будет считаться утерянным.
Изменение (особенно – увеличение) поля TTL может быть опасным, потому желательно
Предоставляет возможность протоколирования сведений о пакетах в пользовательском пространстве. При использовании этого действия пакет через сокеты netlink доставляется произвольному количеству адресатов. В качестве адресатов выступают процессы в пользовательском пространстве. Как и в случае с LOG, тестирование пакета в цепочке не прекращается.
–ulog-nlgroup группа-netlink
Шифровать трафик TCP и UDP простым кодом XOR
–key строка
Разнообразные сообщения выводятся на стандартный вывод. Код выхода в случае отсутствия ошибок – 0. Если команде переданы недопустимые ключи, код выхода равен 2, при остальных ошибках код выхода равен 1.
См. http://bugzilla.netfilter.org/
Пакет iptables очень похож на ipchains, написанные Расти Расселом (Rusty Russell). Основное различие состоит в том, что цепочки INPUT и OUTPUT не применяются для “проходящих” пакетов. Потому каждый пакет проходит только через одну из цепочек (кроме трафика кольцевого интерфейса loopback, проходящего через INPUT и OUTPUT).
Другое различие состоит в том, что -i относится с входному интерфейсу; -o – к выходному, и оба они доступны для пакетов в цепочке FORWARD .
В стандартной конфигурации iptables работает как фильтр пакетов (таблица `filter’), и к нему можно подключать дополнительные расширения. Это должно помочь избежать “неразберихи” с IP-маскарадингом и собственно фильтрацией. Так, следующие ключи обрабатываются иначе:
-j MASQ -M -S -M -L
Натурально, имеется много менее значительных изменений.
iptables-save(8), iptables-restore(8), ip6tables(8), ip6tables-save(8), ip6tables-restore(8), libipq(3). О фильтрации пакетов более подробно написано в packet-filtering-HOWTO, о трансляции адресов – в NAT-HOWTO, о нестандартных расширениях – в netfilter-extensions-HOWTO, о программировании – в netfilter-hacking-HOWTO.
См. http://www.netfilter.org/ и http://www.linuxshare.ru/docs/security/iptables/iptables-tutorial.html.
Пакет создал Расти Рассел (Rusty Russell), консультируясь с Майклом Ньюлингом (Michael Neuling) на ранних этапах.
Благодаря Марку Бушэ (Marc Boucher) был удалён код ipnatctl, он был заменен более общей инфраструктурой отбора пакетов. Им была реализована таблица mangle, фильтрация по владельцу, метки и ещё много чего другого.
Джеймс Моррис (James Morris) реализовал цель TOS и фильтрацию по tos.
Джозеф Кадлецик (Jozsef Kadlecsik) реализовал цель REJECT.
Гаральд Уэльт (Harald Welte) реализовал цели ULOG и nd NFQUEUE, libiptc, а также цели и фильтры TTL, DSCP, ECN.
Команду Netfilter Core Team составляют: Марк Бушэ (Marc Boucher), Мартин Джозефсон (Martin Josefsson), Дожзеф Кадлецик (Jozsef Kadlecsik), Патрик МакХарди (Patrick McHardy), Джеймс Моррис (James Morris), Гаральд Уэльт (Harald Welte) и Расти Рассел (Rusty Russell).
Настоящий документ написан Херви Ейчинном (Herve Eychenne) <rv@wallfire.org>.
Николай Шафоростов <shafff@ukr.net> 2007