Межсетевой экран 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 →

