Консольная утилита iptables представляет собой стандартный интерфейс для управления межсетевым экраном (брандмауэром) netfilter в Linux, начиная с ядра версии 2.4. Возможности iptables весьма обширны, а потому этой утилите будет посвящена целая серия статей.
Первоначально разработка iptables и netfilter шла совместно, это объясняет широкие возможности iptables по управлению межсетевым экраном. Идеология iptables строится на наборе правил, каждое из которых содержит условие и действие, которое применяется к пакетам, подпадающим под это условие. Независимые списки правил объединяются в цепочки, а независимые группы цепочек в таблицы.
Ниже схематично отображено, какие цепочки и таблицы проходит пакет данных.
Синтаксис iptables
В общем виде синтаксис iptables выглядит так:
iptables [таблица] [команда] [цепочка] [критерии] [действие]
Надо отметить, что iptables позволяет генерировать великое множество правил для прохождения сетевых пакетов. Для лучшего понимания синтаксиса iptables рассмотрим элементы этих правил.
Цепочки iptables
Существует пять видов цепочек:
PREROUTING — предназначена для первичной обработки входящих пакетов, адресованных как непосредственно данному узлу, так и другим узлам сети. В этой таблице оказывается абсолютно весь входящий трафик для дальнейшего анализа;
INPUT — таблица для входящих пакетов, отправленных непосредственно этому узлу;
FORWARD — таблица для пакетов, не адресованных этому узлу. Они будут переданы следующему узлу, если текущий узел выполняет роль маршрутизатора;
OUTPUT — применяется для пакетов, отправленных с этого узла;
POSTROUTING — в этой таблице оказываются пакеты, предназначенные для передачи на другие узлы сети.
Имеется возможность создавать свои цепочки, но обычно в этом нет необходимости. Названия цепочек записывают заглавными буквами.
Таблицы iptables
А вот названия таблиц пишут строчными буквами. Во избежание путаницы. Рассмотрим основные таблицы:
raw — содержит цепочки PREROUTING и OUTPUT. В этой таблице производятся манипуляции с пакетами до задействования механизма определения состояний;
mangle — данная таблица предназначена для модификации заголовков сетевых пакетов, таких параметров как ToS (Type of Service), TTL (Time To Live), MARK. Содержит все существующие пять цепочек;
nat — эта таблица используется для трансляции сетевых адресов, т.е. подмены адреса получателя/отправителя. Применяется, если узел используется в качестве маршрутизатора. Содержит цепочки PREROUTING, OUTPUT, POSTROUTING;
filter — используется для фильтрации пакетов. Именно в этой таблице происходит принятие решений о разрешении или запрете дальнейшего движения пакета в системе. Используется по умолчанию, если явно не указано имя другой таблицы. Содержит цепочки INPUT, FORWARD и OUTPUT.
Действия iptables
Как уже было сказано, каждое правило в сетевом экране обязательно содержит действие, которое должно быть применено к пакету. Вот самые распространённые из действий:
ACCEPT — разрешение на дальнейшее прохождение пакета;
DROP — выбросить пакет без уведомления отправителя;
REJECT — отказ в прохождении пакета с уведомлением отправителя. Данный способ может привести к дополнительным затратам вычислительных ресурсов узла, поэтому обычно рекомендуется использовать DROP;
LOG — фиксация информации о пакете в файле системного журнала;
MARK — пометка определённых пакетов. Данная метка перестанет существовать, как только пакет покинет межсетевой экран. Обычно применяется при маршрутизации;
CONNMARK — аналогично MARK, но для соединений;
QUEUE — отправка пакета в очередь приложению для дальнейшего взаимодействия;
RETURN — прекращение движения пакета по текущей цепочке и возврат в предыдущую цепочку. Если текущая цепочка единственная, тогда к пакету будет применено действие по умолчанию;
REDIRECT — перенаправление пакета на указанный в пределах этого же узла порт. Применяется для реализации «прозрачного» прокси;
DNAT — подмена адреса получателя в заголовке IP-пакета. В основном применяется для предоставления доступа к ресурсам, находящимся внутри сети, снаружи;
SNAT — подмена адреса отправителя в заголовке IP-пакета. Обычно применяется для предоставления доступа к внешним ресурсам (Интернет) при нехватке IP-адресов, выданных провайдером;
MASQUERADE — аналогично SNAT. Отличие в том, что может использоваться в ситуациях, когда провайдер предоставляет динамический IP-адрес (SNAT требует статический IP). Более затратный способ с точки зрения потребляемых вычислительных ресурсов устройства;
TOS — управление битами в одноимённом поле заголовка IP-пакета;
ULOG — более продвинутый вариант записи информации. Позволяет писать как в обычный текстовый файл, так и в базу данных;
TTL — изменение значения в одноимённом заголовке IP-пакета, установка времени жизни пакета.
Команды iptables
Команды iptables можно определить как своеобразные инструкции к действию. С их помощью можно добавлять, удалять или сбрасывать правила, задавать действия по умолчанию и т.д. Команды имеют две формы записи — полную и краткую. Использовать можно любую. В перечне ниже формы записи приведены через косую черту.
—append / -A — добавление правила в конец указанной цепочки;
—check / -C — проверка существующих в указанной цепочке правил;
—delete / -D — удаление правила с указанным номером в заданной цепочке;
—insert / -I — вставить правило с указанным номером. Если номер не указан, правило будет добавлено первым;
—replace / -R — замена правила с указанным номером;
—list / -L — вывод списка всех действующих правил со всех цепочек. Если указать конкретную цепочку, будут выведены правила только по ней;
—list-rules / -S — построчный вывод всех правил во всех цепочках. Если указать конкретную цепочку, будут выведены правила только по ней;
—flush / -F — удаление всех правил. Если указать конкретную цепочку, правила будут удалены только в ней;
—zero / -Z — обнуление всех счётчиков во всех цепочках. Если указать конкретную цепочку, обнуление произойдёт только в ней;
—new / -N — создание пользовательской цепочки;
—delete-chain / -X — удаление пользовательской цепочки;
—policy / -P — установка политики по умолчанию для цепочки. Обычно это ACCEPT или DROP. Данная политика будет применена к пакетам, не попавшим ни под один из критериев;
—rename-chain / -E — переименование цепочки. Сначала указывается текущее имя цепочки, через пробел новое имя;
—help / -h — вывод справки по синтаксису iptables.
Критерии iptables
Напоследок рассмотрим критерии iptables. Это те условия, при соблюдении которых к пакетам применяются действия. Обратите внимание, что правило может содержать не только один критерий, но и несколько. Критерии тоже имеют полную и краткую форму записи. А некоторые из них поддерживают логическое НЕ. Инверсия достигается подстановкой знака «!» перед критерием.
—protocol / -p — указание протокола (TCP, UDP и другие). Поддерживается инверсия;
—source / -s — указание адреса источника пакета. Можно указать как один IP-адрес, так и диапазон адресов. Поддерживается инверсия;
—destination / -d — указание адреса получателя пакета. Можно указать как один IP-адрес, так и диапазон адресов. Поддерживается инверсия;
—match / -m — подключение указанного модуля;
—jump / -j — выполнение указанного действия, если правило подошло;
—goto / -g — переход к указанной цепочке правил;
—in-interface / -i — задаёт входящий сетевой интерфейс. Поддерживается инверсия;
—out-interface / -o — задаёт исходящий сетевой интерфейс. Поддерживается инверсия;
—fragment / -f — указывает на фрагменты у фрагментированных пакетов. Поддерживается инверсия;
—set-counters / -c — установка начальных значений счётчиков пакетов и байтов;
—destination-port / —dport — порт получателя пакета. Поддерживается инверсия;
—source-port / —sport — порт отправителя пакета. Поддерживается инверсия.
Примеры
Заблокировать компьютер с адресом 170.10.10.5:
iptables -A INPUT -s 170.10.10.5 -j DROP
Разрешить входящие ICMP-пакеты:
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
О том, как при помощи iptables решать практические задачи, мы поговорим в отдельных статьях.
Статьи по теме: