Открыть сервис

Межсетевой экран iptables

iptables — утилита командной строки и компонент подсистемы Netfilter в ядрах Linux, предназначенный для управления правилами фильтрации и трансформации сетевых пакетов. Функционирует на уровне межсетевого экрана, обеспечивая фильтрацию трафика, трансляцию сетевых адресов (NAT) и модификацию пакетов. Является стандартным интерфейсом настройки брандмауэра во многих дистрибутивах Linux, хотя в современных системах постепенно вытесняется преемником nftables.

История

Разработка iptables началась в конце 1990-х годов как часть проекта Netfilter, созданного для замены устаревшего межсетевого экрана ipchains, использовавшегося в ядрах Linux 2.2. Основным автором выступил польский программист Расти Расселл (Rusty Russell). В ядро Linux версии 2.4, выпущенное в январе 2001 года, был включён фреймворк Netfilter, а iptables стала его пользовательским интерфейсом.

В 2014 году началась разработка преемника — nftables, который должен был устранить недостатки iptables, связанные с избыточностью кода и сложностью поддержки. Начиная с ядра Linux 3.13, nftables включён в основную ветку ядра. Однако iptables остаётся широко используемой и поддерживаемой утилитой благодаря большому количеству существующих систем и документации.

Архитектура и принцип работы

Подсистема Netfilter предоставляет набор хуков (точек перехвата) в стеке сетевой обработки ядра. Пакеты, проходящие через эти точки, могут быть проверены и обработаны в соответствии с загруженными правилами. iptables оперирует тремя основными структурами: таблицами, цепочками и правилами.

Таблицы

Таблица — это набор цепочек, сгруппированных по функциональному назначению. Основные встроенные таблицы:

  • filter — основная таблица для фильтрации трафика; содержит цепочки INPUT, FORWARD и OUTPUT.
  • nat — используется для трансляции сетевых адресов; содержит цепочки PREROUTING, INPUT, OUTPUT и POSTROUTING.
  • mangle — предназначена для специализированной модификации полей заголовков пакетов, таких как TTL или DSCP.
  • raw — применяется для отключения отслеживания соединений для конкретных пакетов.
  • security — используется в связке с SELinux для реализации политик мандатного доступа.

Цепочки

Цепочка — это упорядоченный список правил. Пакет последовательно сравнивается с каждым правилом цепочки до тех пор, пока не будет найдено совпадение. Существуют встроенные цепочки, которые вызываются ядром автоматически в определённых точках прохождения пакета, и пользовательские цепочки, создаваемые администратором для структурирования правил.

Правила

Правило состоит из критериев (условий) и действия (таргета). Критерии могут включать проверку IP-адресов источника и назначения, портов, протоколов, сетевых интерфейсов, состояния соединения и других параметров. При совпадении всех условий к пакету применяется указанный таргет.

Основные встроенные таргеты:

  • ACCEPT — разрешить прохождение пакета.
  • DROP — отбросить пакет без уведомления отправителя.
  • REJECT — отбросить пакет и отправить отправителю сообщение об ошибке.
  • LOG — записать информацию о пакете в системный журнал.
  • SNAT и DNAT — изменить исходный или целевой адрес пакета (используются в таблице nat).
  • MASQUERADE — разновидность SNAT для динамических внешних адресов.

Синтаксис и основные команды

Утилита iptables вызывается с указанием таблицы (по умолчанию filter) и действия. Базовый синтаксис для добавления правила выглядит следующим образом:

`` iptables -t <таблица> -A <цепочка> <условия> -j <таргет> ``

Основные опции управления правилами:

  • -A (append) — добавить правило в конец цепочки;
  • -I (insert) — вставить правило в начало цепочки или на указанную позицию;
  • -D (delete) — удалить правило;
  • -L (list) — вывести список правил;
  • -F (flush) — очистить все правила в цепочке;
  • -P (policy) — установить политику по умолчанию для цепочки.

Типичные условия задаются опциями: -s (источник), -d (назначение), -p (протокол), --dport (порт назначения), -i (входящий интерфейс), -o (исходящий интерфейс).

Пример правила, разрешающего входящие SSH-подключения:

`` iptables -A INPUT -p tcp --dport 22 -j ACCEPT ``

Отслеживание соединений

Важной особенностью Netfilter является механизм conntrack, который позволяет отслеживать состояние сетевых соединений. Это даёт возможность создавать правила, реагирующие не только на отдельные пакеты, но и на состояние потока. Состояния, определяемые conntrack:

  • NEW — первый пакет нового соединения;
  • ESTABLISHED — пакет существующего соединения;
  • RELATED — пакет, относящийся к существующему соединению (например, FTP-данные);
  • INVALID — пакет, не соответствующий ни одному из известных соединений.

Типичное правило для разрешения ответного трафика:

`` iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT ``

Применение

Фильтрация трафика

Основное применение iptables — защита хоста или сети от нежелательного трафика. Администратор может разрешать или запрещать соединения по IP-адресам, портам, протоколам и другим признакам. Правила обычно строятся по принципу «запрещено всё, что явно не разрешено».

Трансляция адресов

С помощью таблицы nat реализуется NAT, что позволяет нескольким компьютерам локальной сети выходить в интернет через один публичный IP-адрес (маскарадинг) или перенаправлять входящие соединения на внутренние серверы (проброс портов). Пример правила маскарадинга для интерфейса eth0:

`` iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``

Маркировка пакетов и продвинутая маршрутизация

Таблица mangle позволяет устанавливать метки на пакеты, которые затем могут использоваться для принятия решений о маршрутизации (policy routing) или для приоритизации трафика в системах QoS.

Недостатки и ограничения

К числу недостатков iptables относят линейный поиск по правилам, что при большом количестве правил снижает производительность. Синтаксис считается сложным для изучения, а отсутствие единого механизма для работы с IPv6 (используется отдельная утилита ip6tables) усложняет администрирование. Кроме того, изменения правил не сохраняются автоматически после перезагрузки системы — требуется использование дополнительных инструментов, таких как iptables-save и iptables-restore.

Сравнение с nftables

nftables, официальный преемник iptables, предлагает единый фреймворк для IPv4 и IPv6, более чистый синтаксис и улучшенную производительность за счёт использования хеш-таблиц. Однако iptables сохраняет актуальность благодаря обширной документации, совместимости с существующими скриптами и поддержке в многочисленных дистрибутивах и сторонних инструментах, таких как fail2ban и Docker.

Интересные факты

  • Несмотря на название, iptables управляет также трафиком IPv6 через утилиту ip6tables.
  • Начиная с ядра Linux 4.18, появился слой совместимости, позволяющий использовать синтаксис iptables поверх nftables.
  • Многие графические интерфейсы, такие как Firewalld и UFW, являются надстройками над iptables или nftables.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →