Linux: IPTABLES — руководство: часть 1 — основы IPTABLES
Часть 1 — основы IPTABLES: структура IPTABLES, таблицы, цепочки, кроткий обзор правил и действий;
Часть 2 — управление IPTABLES: основы управления — опции, команды для создания-удаления правил, цепочек, таблиц, сохранение и восстановление правил;
Часть 3 — параметры правил: — наиболее полезные параметры для создания правил, модули;
Часть 4 — цели для правил — описание целей (действий) для пакетов, попадающих под параметры правил;
IPTABLES является утилитой (!), а не непосредственно фаерволом. Роль фаервола в Linux играет пакетNetfilter (в Linux с версии 2.4).
IPTABLES представляет собой утилиту для конфигурирования Netfilter.
Структура IPTABLES
Структуру можно представить так:
iptables -> Tables -> Chains -> Rules
Пакет приходит на IPTABLES > далее на таблицы (Tables) > попадает в цепочки (Chains) > проходит по правилам (Rules).
Фактически, IPTABLES состоит из трёх основных частей:
таблицы: фактически, являют собой набор цепочек;
цепочки: набор правил;
правила;
Таблицы IPTABLES
У IPTABLES имеется 4 встроенных типа таблиц.
1. Filter Table
Является таблицей по-умолчанию. Если при создании/изменении правила не указана таблица — используется именно filter
. Используется в основном для фильтрации пакетов. К примеру, тут можно выполнить DROP, LOG, ACCEPT
или REJECT
без каких либо сложностей, как в других таблицах. Использует 3 встроенных цепочки:
INPUT
chain – входящие пакеты, используется только для пакетов, цель которых — сам сервер, не используется для транзитного (роутинга) трафикаOUTPUT
chain – исходящие пакеты, созданные локально и отправленные «за пределы» сервера;FORWARD
chain – пакеты, предназначенные другому сетевому интерфейсу (роут на другие машины сети, например).
2. NAT table
Таблица nat
используется главным образом для преобразования сетевых адресов (Network Address Translation). Через эту таблицу проходит только первый пакет из потока. Преобразования адресов автоматически применяется ко всем последующим пакетам. Это один из факторов, исходя из которых мы не должны осуществлять какую-либо фильтрацию в этой таблице.
PREROUTING
chain – преобразование адресовDNAT
(Destination Network Address Translation), фильтрация пакетов здесь допускается только в исключительных случаях;POSTROUTING
chain – выполняется преобразование адресовSNAT
(Source Network Address Translation), фильтрация пакетов здесь крайне нежелательна;OUTPUT
chain –NAT
для локально сгенерированных пакетов;
3. Mangle table
Таблица Mangle
предназначена только для внесения изменения в некоторые заголовки пакетов — TOS
(Type of Service), TTL
(Time to Live), MARK
(особая метка для IPTABLES или других служб). Важно: в действительности поле MARK
не изменяется, но в памяти ядра заводится структура, которая сопровождает данный пакет все время его прохождения через машину, так что другие правила и приложения на данной машине (и только на данной машине) могут использовать это поле в своих целях.
Включает в себя такие цепочки:
PREROUTING
chainOUTPUT
chainFORWARD
chainINPUT
chainPOSTROUTING
chain
4. Raw table
Применяется до передачи пакета механизму определения состояний (state machine, connection tracking — система трассировки соединений, при помощи которой реализуется межсетевой экран на сеансовом уровне (stateful firewall), позволяет определить, к какому соединению или сеансу принадлежит пакет, анализирует все пакеты кроме тех, которые были помечены NOTRACK
в таблице raw).
PREROUTING
chainOUTPUT
chain
Цепочки IPTABLES
Существует 5 типов стандартных цепочек, встроенных в систему:
PREROUTING
— для изначальной обработки входящих пакетов;INPUT
— для входящих пакетов адресованных непосредственно локальному процессу (клиенту или серверу);FORWARD
— для входящих пакетов перенаправленных на выход (заметьте, что перенаправляемые пакеты проходят сначала цепьPREROUTING
, затемFORWARD
иPOSTROUTING
);OUTPUT
— для пакетов генерируемых локальными процессами;POSTROUTING
— для окончательной обработки исходящих пакетов.
Схематично путь пакетов через IPTABLES хорошо представлен на следующей схеме:
Правила IPTABLES
Правила имеют следующую структуру:
правило > цель > счётчик
Если пакет соответствует правилу, к нему применяется цель, и он учитывается счетчиком. Если правило(или критерий ) не задан — то цель применяется ко всем проходящим через цепочку пакетам. Если не указаны ни цель, ни правило — для правила будет срабатывать только счётчик пакетов. Если пакет не попадает под правило и цель — он передаётся следующему правилу в списке.
Параметры для формирования правил смотрите в посте Linux: IPTABLES — руководство: часть 3 — параметры правил.
Цели (targets) IPTABLES
Правило может содержать одно из следующих целей (или действий):
ACCEPT
– принять пакет, и передать следующей цепочке (или приложению, или передать для дальнейшего роутинга);DNAT
— (Destination Network Address Translation) используется для преобразования адреса места назначения в IP заголовке пакета; если пакет подпадает под критерий правила, выполняющегоDNAT
, то этот пакет, и все последующие пакеты из этого же потока, будут подвергнуты преобразованию адреса назначения и переданы на требуемое устройство, хост или сеть; действиеDNAT
может выполняться только в цепочкахPREROUTING
иOUTPUT
таблицыnat
, и во вложенных под-цепочках; важно запомнить, что вложенные подцепочки, реализующиеDNAT
не должны вызываться из других цепочек, кромеPREROUTING
иOUTPUT
;DROP
– просто «сбрасывает» пакет и IPTABLES «забывает» о его существовании; «сброшенные» пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действиемACCEPT
; следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые «мертвые» сокеты как на стороне сервера, так и на стороне клиента, наилучшим способом защиты будет использование действияREJECT
, особенно при защите от сканирования портов;LOG
— действие, которое служит для журналирования отдельных пакетов и событий; в журнал могут заноситься заголовки IP пакетов и другая полезная информация; информация из журнала может быть затем прочитана с помощьюdmesg
илиsyslogd
, либо с помощью других программ; обратите ваше внимание так же на цельULOG
, которое позволяет выполнять запись информации не в системный журнал, а в базу данных MySQL и т.п.;MARK
— используется для установки меток для определенных пакетов; это действие может выполняться только в пределах таблицыmangle
; установка меток обычно используется для нужд маршрутизации пакетов по различным маршрутам, для ограничения трафика и т.п.; «метка» пакета существует только в период времени пока пакет не покинул брандмауэр, т.е. метка не передается по сети;MASQUERADE
— в основе своей представляет то же самое, что иSNAT
только не имеет ключа--to-source
; причиной тому то, что маскарадинг может работать, например, с dialup подключением или DHCP, т.е. в тех случаях, когда IP адрес присваивается устройству динамически; если у вас имеется динамическое подключение, то нужно использовать маскарадинг, если же у вас статическое IP подключение, то лучше будет использованиеSNAT
;MIRROR
— может использоваться вами только для экспериментов и в демонстрационных целях, поскольку это действие может привести к «зацикливанию» пакета и в результате к «Отказу от обслуживания»; в результате действияMIRROR
в пакете, поля source и destination меняются местами и пакет отправляется в сеть; допускается использовать только в цепочкахINPUT, FORWARD
иPREROUTING
, и в цепочках, вызываемых из этих трех;QUEUE
– ставит пакет в очередь на обработку пользовательскому процессу; оно может быть использовано для нужд учета, проксирования или дополнительной фильтрации пакетов;REDIRECT
— выполняет перенаправление пакетов и потоков на другой порт той же самой машины; можно пакеты, поступающие на HTTP порт перенаправить на порт HTTP-proxy; удобен для выполнения «прозрачного» проксирования (transparent proxy), когда машины в локальной сети даже не подозревают о существовании прокси; может использоваться только в цепочкахPREROUTING
иOUTPUT
таблицыnat
;REJECT
— используется, как правило, в тех же самых ситуациях, что иDROP
, но в отличие отDROP
, командаREJECT
выдает сообщение об ошибке на хост, передавший пакет;RETURN
— прекращает движение пакета по текущей цепочке правил и производит возврат следующему правилу в вызывающей (предыдущей) цепочке, если текущая цепочка была вложенной, или, если текущая цепочка лежит на самом верхнем уровне (напримерINPUT
), то к пакету будет применена политика по-умолчанию; обычно, в качестве политики по-умолчанию назначают действияACCEPT
илиDROP
;SNAT
— используется для преобразования сетевых адресов (Source Network Address Translation), т.е. изменение исходящего IP адреса в IP в заголовке пакета;SNAT
допускается выполнять только в таблицеnat
, в цепочкеPOSTROUTING
; если первый пакет в соединении подвергся преобразованию исходящего адреса, то все последующие пакеты, из этого же соединения, будут преобразованы автоматически и не пойдут через эту цепочку правил;TOS
— используется для установки битов в поле Type of Service IP заголовка; полеTOS
содержит 8 бит, которые используются для маршрутизации пакетов; важно помнить, что данное поле может обрабатываться различными маршрутизаторами с целью выбора маршрута движения пакета; в отличие отMARK
, сохраняет свое значение при движении по сети, а поэтому может использоваться для маршрутизации пакета; лучше всего использовать это поле для своих нужд только в пределах WAN или LAN;TTL
— используется для изменения содержимого поля Time To Live в IP заголовоке;ULOG
— система журналирования пакетов, которая заменяет традиционное действиеLOG
, базирующееся на системном журнале; при использовании этого действия, пакет, через сокетыnetlink
, передается специальному демону который может выполнять очень детальное журналирование в различных форматах (обычный текстовый файл, база данных MySQL и пр.), млжет формировать отчёты в CSV, XML, Netfilter’s LOG, Netfilter’s conntrack; подробнее смотрите на домашней странице проекта;
Параметры для формирования действий смотрите в посте Linux: IPTABLES — руководство: часть 4 — цели для правил.
Критерий так же может использовать состояние пакета для принятия решений:
NEW
— пакет открывает новый сеанс, например — пакетTCP
с флагомSYN
;ESTABLISHED
— пакет является частью уже существующего сеанса;RELATED
— пакет открывает новый сеанс, связанный с уже открытым сеансом, например, во время сеанса пассивного FTP, клиент подсоединяется к порту 21 сервера, сервер сообщает клиенту номер второго, случайно выбранного порта, после чего клиент подсоединяется ко второму порту для передачи файлов; в этом случае второй сеанс (передача файлов по второму порту) связан с уже существующим сеансом (изначальное подсоединение к порту 21);INVALID
— все прочие пакеты.
Ссылки на материалы
https://www.frozentux.net — полный мануал по IPTABLES + много информации по структуре сети и пакетов; обновлялся в 2006 году; IPTABLES 1.2.2;
http://www.opennet.ru — то же, но на русском, обновлялся в 2003, IPTABLES 1.1.9;
http://www.netfor2.com — краткое описание протокола TCP и структуры пакетов;
http://ipset.netfilter.org
http://www.opennet.ru
http://help.ubuntu.ru
http://www.cinetel.ru
http://fideloper.com
https://www.digitalocean.com