iptables: теория и основы

iptables linuxКонсольная утилита iptables представляет собой стандартный интерфейс для управления межсетевым экраном (брандмауэром) netfilter в Linux, начиная с ядра версии 2.4. Возможности iptables весьма обширны, а потому этой утилите будет посвящена целая серия статей.

Первоначально разработка iptables и netfilter шла совместно, это объясняет широкие возможности iptables по управлению межсетевым экраном. Идеология iptables строится на наборе правил, каждое из которых содержит условие и действие, которое применяется к пакетам, подпадающим под это условие. Независимые списки правил объединяются в цепочки, а независимые группы цепочек в таблицы.

Ниже схематично отображено, какие цепочки и таблицы проходит пакет данных.

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 решать практические задачи, мы поговорим в отдельных статьях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *