Руководства по командной строке

Man » iptables Manual online - подробная онлайн-документация для страницы руководства iptables

🌍
iptables/ip6tables — инструмент администрирования для фильтрации IPv4/IPv6 пакетов и NAT

СИНТАКСИС

iptables [-t table] {-A|-C|-D|-V} chain rule-specification

ip6tables [-t table] {-A|-C|-D|-V} chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain policy

iptables [-t table] -E old-chain-name new-chain-name

rule-specification := [matches...] [target]

match := -m matchname [per-match-options]

target := -j targetname [per-target-options]

ОПИСАНИЕ

Iptables и ip6tables используются для настройки, обслуживания и проверки таблиц правил фильтрации IPv4 и IPv6 в ядре Linux. Может быть определено несколько различных таблиц. Каждая таблица содержит ряд встроенных цепочек и может также содержать пользовательские цепочки.

Каждая цепочка представляет собой список правил, которые могут соответствовать набору пакетов. Каждое правило указывает, что делать с пакетом, который соответствует. Это называется целью, которая может быть переходом в пользовательскую цепочку в той же таблице.

ЦЕЛИ

Правило брандмауэра указывает критерии для пакета и цель. Если пакет не соответствует, следующее правило в цепочке проверяется; если он соответствует, то следующее правило указывается значением цели, которым может быть имя пользовательской цепочки, одна из целей, описанных в iptables-extensions(8), или одно из специальных значений ACCEPT, DROP или RETURN.

ACCEPT означает разрешить пакету проходить. DROP означает отбросить пакет. RETURN означает прекратить обход этой цепочки и продолжить со следующего правила в предыдущей (вызывающей) цепочке. Если конец встроенной цепочки достигнут или в встроенной цепочке правило с целью RETURN соответствует, то цель, указанная в политике цепочки, определяет судьбу пакета.

ТАБЛИЦЫ

В настоящее время существует пять независимых таблиц (какие таблицы присутствуют в любой момент времени, зависит от параметров конфигурации ядра и какие модули присутствуют).

-t, --table table

Эта опция указывает, с какой таблицей соответствия пакетов должна работать команда. Если ядро настроено на автоматическую загрузку модулей, будет предпринята попытка загрузить соответствующий модуль для этой таблицы, если он еще не там.


Приведенные ниже таблицы:

filter:

Это таблица по умолчанию (если не указана опция -t). Она содержит встроенные цепочки INPUT (для пакетов, предназначенных для локальных сокетов), FORWARD (для пакетов, маршрутизируемых через этот компьютер) и OUTPUT (для локально сгенерированных пакетов).

nat:

Эта таблица используется при обнаружении пакета, который создает новое соединение. Она состоит из четырех встроенных цепочек: PREROUTING (для изменения пакетов сразу после их поступления), INPUT (для изменения пакетов, предназначенных для локальных сокетов), OUTPUT (для изменения локально сгенерированных пакетов перед маршрутизацией) и POSTROUTING (для изменения пакетов непосредственно перед их отправкой). Поддержка IPv6 NAT доступна, начиная с ядра 3.7.

mangle:

Эта таблица используется для специализированного изменения пакетов. До версии ядра 2.4.17 она имела две встроенные цепочки: PREROUTING (для изменения входящих пакетов перед маршрутизацией) и OUTPUT (для изменения локально сгенерированных пакетов перед маршрутизацией). Начиная с версии ядра 2.4.18, также поддерживаются три другие встроенные цепочки: INPUT (для пакетов, поступающих на этот компьютер), FORWARD (для изменения пакетов, маршрутизируемых через этот компьютер) и POSTROUTING (для изменения пакетов непосредственно перед их отправкой).

raw:

Эта таблица используется в основном для настройки исключений из отслеживания соединений в сочетании с целевым объектом NOTRACK. Она регистрируется в сетевых фильтрах с более высоким приоритетом и, таким образом, вызывается перед ip_conntrack или любыми другими IP-таблицами. Она предоставляет следующие встроенные цепочки: PREROUTING (для пакетов, поступающих через любой сетевой интерфейс) и OUTPUT (для пакетов, сгенерированных локальными процессами).

security:

Эта таблица используется для правил сетевого управления обязательным доступом (MAC), таких как те, которые включены целевыми объектами SECMARK и CONNSECMARK. Управление обязательным доступом реализуется модулями безопасности Linux, такими как SELinux. Таблица безопасности вызывается после таблицы фильтров, что позволяет любым правилам дискреционного доступа (DAC) в таблице фильтров вступать в силу до правил MAC. Эта таблица предоставляет следующие встроенные цепочки: INPUT (для пакетов, поступающих на этот компьютер), OUTPUT (для изменения локально сгенерированных пакетов перед маршрутизацией) и FORWARD (для изменения пакетов, маршрутизируемых через этот компьютер).

ОПЦИИ

Опции, которые распознаются командами iptables и ip6tables, можно разделить на несколько групп.

КОМАНДЫ

Эти опции указывают желаемое действие для выполнения. На командной строке можно указать только одну из них, если иное не указано ниже. Для длинных версий имен команд и опций необходимо использовать только достаточное количество букв, чтобы iptables мог различать их.

-A, --append chain rule-specification

Добавляет одну или несколько правил в конец выбранной цепочки. Когда имена источника и/или назначения разрешаются в более одного адреса, для каждой возможной комбинации адресов добавляется правило.

-C, --check chain rule-specification

Проверяет, существует ли правило, соответствующее указанной спецификации, в выбранной цепочке. Эта команда использует ту же логику, что и -D, для поиска соответствующей записи, но не изменяет существующую конфигурацию iptables и использует свой код выхода для указания успеха или неудачи.


-D, --delete chain правило
-D, --delete chain номер_правила

Удалить одно или несколько правил из выбранной цепочки. Существует две версии этой команды: правило можно указать как число в цепочке (начиная с 1 для первого правила) или правило для сопоставления.

-I, --insert chain [номер_правила] правило

Вставить одно или несколько правил в выбранную цепочку в качестве указанного номера правила. Таким образом, если номер правила равен 1, правило или правила вставляются в начало цепочки. Это также значение по умолчанию, если номер правила не указан.

-R, --replace chain номер_правила правило

Заменить правило в выбранной цепочке. Если имена источника и/или назначения разрешаются в несколько адресов, команда завершится с ошибкой. Правила нумеруются, начиная с 1.

-L, --list [цепочка]

Перечислить все правила в выбранной цепочке. Если цепочка не выбрана, перечисляются все цепочки. Как и любая другая команда iptables, она применяется к указанной таблице (фильтр является таблицей по умолчанию), поэтому правила NAT перечисляются с помощью iptables -t nat -n -L Обратите внимание, что ее часто используют с опцией -n, чтобы избежать длительных обратных DNS-поисков. Также допустимо указать опцию -Z (обнуление), в этом случае цепочка (цепочки) будут атомарно перечислены и обнулены. Точный вывод зависит от других переданных аргументов. Точные правила подавляются, пока вы не используете iptables -L -v или iptables-save(8).

-S, --list-rules [цепочка]

Вывести все правила в выбранной цепочке. Если цепочка не выбрана, выводятся все цепочки, как в iptables-save. Как и любая другая команда iptables, она применяется к указанной таблице (фильтр является таблицей по умолчанию).

-F, --flush [цепочка]

Очистить выбранную цепочку (все цепочки в таблице, если ни одна не указана). Это эквивалентно удалению всех правил по одному.

-Z, --zero [цепочка [номер_правила]]

Обнулить счетчики пакетов и байтов во всех цепочках или только в указанной цепочке или только в указанном правиле в цепочке. Допустимо указать опцию -L, --list (список), чтобы увидеть счетчики непосредственно перед их очисткой. (См. выше.)

-N, --new-chain цепочка

Создать новую пользовательскую цепочку с указанным именем. Не должно быть цели с этим именем.

-X, --delete-chain [цепочка]

Удалить указанную цепочку. Не должно быть ссылок на цепочку. Если они есть, необходимо удалить или заменить ссылающиеся правила, прежде чем цепочку можно будет удалить. Цепочка должна быть пустой, то есть не содержать правил. Если аргумент не указан, она удалит все пустые цепочки в таблице. Пустые встроенные цепочки можно удалить только с помощью iptables-nft.

-P, --policy цепочка цель

Установить политику для встроенной (не пользовательской) цепочки в указанную цель. Целевая политика должна быть либо ACCEPT, либо DROP.


-E, --rename-chain old-chain new-chain

Переименовывает указанную пользователем цепочку в указанное пользователем имя. Это изменение чисто косметическое и не влияет на структуру таблицы.

-h     Справка. Предоставляет (в настоящее время очень краткое) описание синтаксиса команды.

ПАРАМЕТРЫ

Следующие параметры составляют спецификацию правила (используется в командах add, delete, insert, replace и append).

-4, --ipv4

Этот параметр не имеет эффекта в iptables и iptables-restore. Если правило, использующее параметр -4, вставляется (и только с помощью) ip6tables-restore, оно будет проигнорировано. Любое другое использование вызовет ошибку. Этот параметр позволяет использовать правила IPv4 и IPv6 в одном файле правил для использования как с iptables-restore, так и с ip6tables-restore.

-6, --ipv6

Если правило, использующее параметр -6, вставляется (и только с помощью) iptables-restore, оно будет проигнорировано. Любое другое использование вызовет ошибку. Этот параметр позволяет использовать правила IPv4 и IPv6 в одном файле правил для использования как с iptables-restore, так и с ip6tables-restore. Этот параметр не имеет эффекта в ip6tables и ip6tables-restore.

[!] -p, --protocol protocol

Протокол правила или пакета, который необходимо проверить. Указанный протокол может быть одним из tcp, udp, udplite, icmp, icmpv6, esp, ah, sctp, mh или специальным ключевым словом "all", или это может быть числовое значение, представляющее один из этих протоколов или другой протокол. Также разрешено имя протокола из файла /etc/protocols. Аргумент "!" перед протоколом инвертирует тест. Число ноль эквивалентно значению "all". "all" будет соответствовать всем протоколам и используется по умолчанию, если этот параметр опущен. Обратите внимание, что в ip6tables расширения IPv6, за исключением esp, не разрешены. esp и ipv6-nonext можно использовать с версией ядра 6.11 или более поздней. Число ноль эквивалентно значению "all", что означает, что нельзя напрямую проверить поле протокола на значение 0. Чтобы сопоставить заголовок HBH, даже если он является последним, нельзя использовать -p 0, но всегда нужно использовать -m hbh.

[!] -s, --source address[/mask][,...]

Спецификация источника. Адрес может быть именем сети, именем хоста, IP-адресом сети (с /маской) или простым IP-адресом. Имена хостов разрешаются только один раз, перед отправкой правила в ядро. Обратите внимание, что указание любого имени для разрешения с помощью удаленного запроса, такого как DNS, — очень плохая идея. Маска может быть либо маской сети IPv4 (для iptables), либо обычным числом, указывающим количество единиц в левой части маски сети. Таким образом, маска iptables, равная 24, эквивалентна 255.255.255.0. Аргумент "!" перед спецификацией адреса инвертирует смысл адреса. Флаг --src является псевдонимом для этого параметра. Можно указать несколько адресов, но это приведет к расширению до нескольких правил (при добавлении с помощью -A) или приведет к удалению нескольких правил (с помощью -D).

[!] -d, --destination address[/mask][,...]

Спецификация назначения. См. описание флага -s (источник) для получения подробной информации о синтаксисе. Флаг --dst является псевдонимом для этого параметра.


-m, --match match

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

-j, --jump target

Это указывает целевой объект правила, то есть, что делать, если пакет соответствует правилу. Целевой объект может быть пользовательской цепочкой (отличной от той, в которой находится это правило), одной из специальных встроенных целевых объектов, которые определяют дальнейшую судьбу пакета, или расширением (см. РАСШИРЕНИЯ ДЛЯ СОПОСТАВЛЕНИЯ И ЦЕЛЕВЫХ ОБЪЕКТОВ). Если этот параметр опущен в правиле (и -g не используется), то соответствие правилу не будет оказывать никакого влияния на судьбу пакета, но счетчики правила будут увеличиваться.

-g, --goto chain

Это указывает, что обработка должна продолжаться в указанной пользователем цепочке. В отличие от параметра --jump, RETURN не будет продолжать обработку в этой цепочке, а вместо этого продолжит обработку в цепочке, которая вызвала нас через --jump.

[!] -i, --in-interface name

Имя интерфейса, через который был получен пакет (только для пакетов, входящих в цепочки INPUT, FORWARD и PREROUTING). Когда аргумент "!" используется перед именем интерфейса, смысл инвертируется. Если имя интерфейса заканчивается на "+", то любой интерфейс, начинающийся с этого имени, будет соответствовать. Если этот параметр опущен, любому имени интерфейса будет соответствовать.

[!] -o, --out-interface name

Имя интерфейса, через который пакет будет отправлен (для пакетов, входящих в цепочки FORWARD, OUTPUT и POSTROUTING). Когда аргумент "!" используется перед именем интерфейса, смысл инвертируется. Если имя интерфейса заканчивается на "+", то любой интерфейс, начинающийся с этого имени, будет соответствовать. Если этот параметр опущен, любому имени интерфейса будет соответствовать.

[!] -f, --fragment

Это означает, что правило относится только ко второму и последующим фрагментам IPv4-пакетов. Поскольку нет способа узнать исходный или целевой порты такого пакета (или тип ICMP), такой пакет не будет соответствовать каким-либо правилам, которые их указывают. Когда аргумент "!" предшествует флагу "-f", правило будет соответствовать только головным фрагментам или нефрагментированным пакетам. Этот параметр относится только к IPv4, он недоступен в ip6tables.

-c, --set-counters packets bytes

Это позволяет администратору инициализировать счетчики пакетов и байтов правила (во время операций INSERT, APPEND, REPLACE).

ДРУГИЕ ПАРАМЕТРЫ

Следующие дополнительные параметры могут быть указаны:

-v, --verbose

Подробный вывод. Этот параметр заставляет команду list отображать имя интерфейса, параметры правила (если они есть) и маски TOS. Также отображаются счетчики пакетов и байтов с суффиксами 'K', 'M' или 'G' для умножителей 1000, 1 000 000 и 1 000 000 000 соответственно (но см. флаг -x, чтобы изменить это). Для добавления, вставки, удаления и замены это приводит к выводу подробной информации о правиле или правилах. Параметр -v может быть указан несколько раз для возможного вывода еще более подробных отладочных сообщений: если указано дважды, iptableslegacy выводит информацию о таблице и записях в libiptc, iptables-nft выводит правила в виде netlink (представление в коде VM). Если указано трижды, iptables-nft также выводит любые сообщения netlink, отправляемые в ядро.


-V, --version

Отображает версию программы и API ядра, которое используется.

-w, --wait [секунды]

Ожидает блокировки xtables. Чтобы предотвратить одновременный запуск нескольких экземпляров программы, при запуске будет предпринята попытка получить эксклюзивную блокировку. По умолчанию программа завершает работу, если не удается получить блокировку. Этот параметр заставит программу ждать (бесконечно или в течение указанного количества секунд), пока эксклюзивную блокировку не удастся получить.

-n, --numeric

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

-x, --exact

Отображает полные числа. Отображает точное значение счетчиков пакетов и байтов, а не только округленное число в K (кратных 1000), M (кратных 1000K) или G (кратных 1000M). Этот параметр имеет смысл только для команды -L.

--line-numbers

При отображении правил добавляет номера строк в начало каждого правила, соответствующие позиции этого правила в цепочке.

--modprobe=команда

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

ФАЙЛ БЛОКИРОВКИ

iptables использует файл /run/xtables.lock для получения эксклюзивной блокировки при запуске.

Переменную среды XTABLES_LOCKFILE можно использовать для переопределения значения по умолчанию.

РАСШИРЕНИЯ СОПОСТАВЛЕНИЯ И ЦЕЛЕЙ

iptables может использовать расширенные модули сопоставления и целей пакетов. Список этих модулей можно найти в справочной странице iptables-extensions(8).

СООБЩЕНИЯ ОБ ОШИБКАХ

Различные сообщения об ошибках выводятся в стандартный поток ошибок. Код выхода равен 0, если программа работает правильно. Ошибки, вызванные неверными или некорректными параметрами командной строки, приводят к коду выхода 2. Ошибки, указывающие на несовместимость между ядром и пользовательским пространством, приводят к коду выхода 3. Ошибки, указывающие на проблему с ресурсами, такие как занятая блокировка, сбой выделения памяти или сообщения об ошибках из ядра, приводят к коду выхода 4. Наконец, другие ошибки приводят к коду выхода 1.

ОШИБКИ

Ошибки? Что это? ;-) Впрочем, вы можете посмотреть здесь: https://bugzilla.netfilter.org/ iptables немедленно завершает работу с кодом ошибки 111, если обнаруживает, что она была вызвана как программа, установленная с setuid-to-root. iptables нельзя безопасно использовать таким образом, потому что она доверяет общим библиотекам (сопоставлениям, целям), загружаемым во время выполнения, и путь поиска можно задать с помощью переменных среды.


СОВМЕСТИМОСТЬ С IPCHAINS

Эта версия iptables очень похожа на ipchains, разработанную Расти Расселом. Основное отличие заключается в том, что цепочки INPUT и OUTPUT обрабатывают только пакеты, поступающие на локальный хост и исходящие с локального хоста соответственно. Таким образом, каждый пакет проходит только через одну из трех цепочек (за исключением трафика loopback, который включает в себя обе цепочки INPUT и OUTPUT); ранее перенаправленный пакет проходил через все три цепочки.

Еще одно основное отличие заключается в том, что -i относится к входному интерфейсу, -o относится к выходному интерфейсу, и оба доступны для пакетов, входящих в цепочку FORWARD.

Различные формы NAT были разделены; iptables является чистым фильтром пакетов при использовании таблицы filter по умолчанию, с дополнительными модулями расширения. Это должно устранить большую часть путаницы, связанной с сочетанием IP-маскирования и фильтрации пакетов, которая наблюдалась ранее. Таким образом, следующие опции обрабатываются по-разному: -j MASQ -M -S -M -L Существует несколько других изменений в iptables.

ССЫЛКИ

iptables-apply(8), iptables-save(8), iptables-restore(8), iptables-extensions(8),

В документах packet-filtering-HOWTO подробно описано использование iptables для фильтрации пакетов, в NAT-HOWTO – NAT, в netfilter-extensions-HOWTO – расширения, не входящие в стандартный дистрибутив, а в netfilter-hacking-HOWTO – внутренние компоненты netfilter. См. https://www.netfilter.org/.

АВТОРЫ

Расти Рассел первоначально разработал iptables, консультируясь с Майклом Нойлингом.

Марк Буше убедил Расти отказаться от ipnatctl, добиваясь создания универсальной структуры выбора пакетов в iptables, затем написал таблицу mangle, сопоставление owner, метки и занимался другими интересными вещами.

Джеймс Моррис написал целевой объект TOS и сопоставление tos.

Йожеф Кадлечик написал целевой объект REJECT.

Харальд Велте написал целевые объекты ULOG и NFQUEUE, новую libiptc, а также сопоставления и целевые объекты TTL, DSCP, ECN.

Основная команда Netfilter: Йожеф Кадлечик, Пабло Нейра Аюсо, Эрик Леблон, Флориан Вестфаль и Артуро Борреро Гонсалес. Действующие члены основной команды: Марк Буше, Мартин Йосефссон, Ясуюки Кодзакай, Джеймс Моррис, Харальд Велте и Расти Рассел.

Исходная страница руководства написана Эрве Айхенне <_>.

ВЕРСИЯ

Эта страница руководства относится к iptables/ip6tables 1.8.11.