iptables — это служебная программа пользовательского пространства , которая позволяет системному администратору настраивать правила фильтрации IP-пакетов брандмауэра ядра Linux , реализованные в виде различных модулей Netfilter . Фильтры организованы в различные таблицы, содержащие цепочки правил обработки пакетов сетевого трафика. В настоящее время для разных протоколов используются разные модули ядра и программы; iptables применяется к IPv4, ip6tables к IPv6, arptables к ARP и ebtables к кадрам Ethernet .
Для работы iptables требуются повышенные привилегии, и он должен выполняться пользователем root , иначе он не сможет работать. В большинстве систем Linux iptables устанавливается как /usr/sbin/iptables и документируется на его страницах руководства , которые можно открыть с помощью команды man iptables
после установки. Его также можно найти в /sbin/iptables
, но поскольку iptables больше похож на службу, чем на «основной двоичный файл», предпочтительным расположением остается /usr/sbin .
Термин iptables также часто используется для обозначения компонентов уровня ядра. x_tables — это имя модуля ядра, несущего общую часть кода, используемую всеми четырьмя модулями, которая также предоставляет API, используемый для расширений; впоследствии Xtables в той или иной степени используется для обозначения всей архитектуры брандмауэра (v4, v6, arp и eb).
iptables заменил ipchains ; а преемником iptables является nftables , который был выпущен 19 января 2014 года [2] и был объединен с основной веткой ядра Linux в версии ядра 3.13.
iptables позволяет системному администратору определять таблицы , содержащие цепочки правил обработки пакетов. Каждая таблица связана с различным типом обработки пакетов . Пакеты обрабатываются путем последовательного прохождения правил в цепочках. Правило в цепочке может вызывать переход или переход к другой цепочке, и это можно повторять до любого желаемого уровня вложенности. (Прыжок аналогичен «вызову», т. е. запоминается точка, из которой был выполнен переход.) Каждый сетевой пакет, приходящий на компьютер или исходящий от него, проходит как минимум одну цепочку.
Происхождение пакета определяет, какую цепочку он пересекает изначально. Существует пять предопределенных цепочек (соответствующих пяти доступным перехватчикам Netfilter), хотя в таблице могут быть не все цепочки. Предопределенные цепочки имеют политику , например DROP, которая применяется к пакету, если он достигает конца цепочки. Системный администратор может создать любое количество других цепочек. У этих сетей нет политики; если пакет достигает конца цепочки, он возвращается в цепочку, вызвавшую его. Цепочка может быть пустой.
PREROUTING
: Пакеты попадут в эту цепочку до того, как будет принято решение о маршрутизации.INPUT
: Пакет будет доставлен на месте. Это не имеет ничего общего с процессами, имеющими открытый сокет; локальная доставка контролируется таблицей маршрутизации «local-delivery»: ip route show table local
.FORWARD
: все пакеты, которые были маршрутизированы и не предназначены для локальной доставки, будут проходить через эту цепочку.OUTPUT
: Пакеты, отправленные с самой машины, будут посещать эту цепочку.POSTROUTING
: Решение о маршруте принято. Пакеты попадают в эту цепочку непосредственно перед передачей их оборудованию.Цепь не существует сама по себе; он принадлежит таблице . Есть три таблицы: nat , filter и mangle . Если перед ней не стоит опция -t , iptables
команда по умолчанию касается таблицы фильтров . Например, команда iptables -L -v -n
, показывающая некоторые цепочки и их правила, эквивалентна iptables -t filter -L -v -n
. Чтобы показать цепочки таблицы nat , используйте командуiptables -t nat -L -v -n
Каждое правило в цепочке содержит спецификацию, каким пакетам оно соответствует. Он также может содержать цель (используется для расширений) или вердикт (одно из встроенных решений). По мере прохождения пакета по цепочке поочередно проверяется каждое правило. Если правило не соответствует пакету, пакет передается следующему правилу. Если правило соответствует пакету, оно выполняет действие, указанное целью/вердиктом, что может привести к тому, что пакету будет разрешено продолжить движение по цепочке, а может и нет. Совпадения составляют большую часть наборов правил, поскольку они содержат условия, на которые проверяются пакеты. Это может произойти практически на любом уровне модели OSI , как, например, с параметрами --mac-source
и -p tcp --dport
, а также существуют совпадения, независимые от протокола, такие как -m time
.
Пакет продолжает перемещаться по цепочке до тех пор, пока
ACCEPT
или DROP
, или модуля, возвращающего такую конечную судьбу; илиRETURN
вердикт, и в этом случае обработка возвращается в цепочку вызовов; илиRETURN
она использовалась), либо используется политика базовой цепочки, которая является окончательной судьбой.Целевые объекты также возвращают вердикт типа ACCEPT
( NAT
модули сделают это) или DROP
(например, REJECT
модуль), но также могут подразумевать CONTINUE
(например, LOG
модуль; CONTINUE
это внутреннее имя) продолжить выполнение следующего правила, как если бы цель/вердикт вообще не были указаны.
Существует множество сторонних программных приложений для iptables, которые пытаются облегчить настройку правил. Интерфейсы в текстовой или графической форме позволяют пользователям создавать простые наборы правил щелчком мыши; сценарии обычно относятся к сценариям оболочки (но возможны и другие языки сценариев), которые вызывают iptables или (чем быстрее) iptables-restore
с набором предопределенных правил, либо правила, расширенные из шаблона с помощью простого файла конфигурации. В дистрибутивах Linux обычно используется последняя схема использования шаблонов. Такой подход на основе шаблонов представляет собой практически ограниченную форму генератора правил, и такие генераторы также существуют автономно, например, в виде веб-страниц PHP.
Такие интерфейсы, генераторы и скрипты часто ограничены встроенными системами шаблонов, а шаблоны предлагают места для замены определяемых пользователем правил. Кроме того, сгенерированные правила обычно не оптимизированы для конкретного эффекта брандмауэра, которого желает пользователь, поскольку это, скорее всего, увеличит затраты на обслуживание для разработчика. Пользователям, которые достаточно хорошо понимают iptables и хотят оптимизировать свой набор правил, рекомендуется создать свой собственный набор правил.