IPTABLES(8)

ИМЯ
iptables/ip6tables - инструмент администрирования сетевой фильтрации пакетов и NAT (Network Address Translation - преобразование сетевых адресов) для IPv4/IPv6

СИНТАКСИС
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]] [параметры...]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain target

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. Может быть использовано несколько разных таблиц. Каждая таблица содержит несколько встроенных цепочек, а также может содержать цепочки, созданные пользователем.

Каждая цепочка содержит набор правил, которые применяются к пакетам, проходящим по этой цепочке. Каждое правило определяет, что делать с пакетом, который соответствует данному набору правил. Это называется "target" ("цель"); эта цель может быть переходом к цепочке, которая определена пользователем и может находиться в той же таблице.

ЦЕЛИ (ДЕЙСТВИЯ)
Правило сетевой фильтрации пакета определяет критерии соответствия для пакета и цели. Если пакет не соответствует критериям, то проверяется следующее правило в цепочке; если пакет соответствует критерию, то следующее правило задаёт цель, которая может быть именем определенной пользователем цепочки, одной из целей, описанных в iptables-extensions(8) или быть одной из конкретных целей ACCEPT , DROP или RETURN.

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

ТАБЛИЦЫ
В настоящее время существует пять независимых таблиц (какие таблицы присутствуют конкретно, зависит от параметров конфигурации ядра и от того, какие присутствуют модули).

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

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

    nat:
        Эта таблица используется для преобразования сетевых адресов. Она содержит четыре встроенных цепочки: PREROUTING (для изменения приходящих на интерфейс пакетов), INPUT (для изменения пакетов, предназначенных для локальных процессов), OUTPUT (для изменения пакетов, созданных локальными процессами перед их маршрутизацией) и POSTROUTING (для изменения уходящих с интерфейса пакетов). Поддержка NAT IPv6 реализована начиная с версии ядра 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. Обязательный контроль доступа реализован модулями безопасности SELinux. Таблица security вызывается после таблицы filter, позволяя любым правилам необязательного контроля доступа (DAC) в таблице filter вступать в силу до правил MAC. В этой таблице представлены следующие встроенные цепочки: INPUT (для пакетов, поступающих к локальным процессам), OUTPUT (для изменения пакетов, созданных локальными процессами, перед маршрутизацией) и FORWARD (для изменения пакетов, перенаправляемых через компьютер).

ПАРАМЕТРЫ
Опционы, которые поддерживаются iptables и ip6tables можно разделить на несколько различных групп.

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

-A, --append chain rule-specification
    Добавить одно или несколько правил в конец выбранной цепочки. Если имена источника и/или назначения совпадают с более чем одним адресом, то для каждой возможной комбинации адресов будет добавлено правило.

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

-D, --delete chain rule-specification

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

-I, --insert chain [rulenum] rule-specification
    Вставить одно или несколько правил в выбранную цепочку с заданным номером правила. Таким образом, если номер правила равен 1, правило или правила вставляются в начало цепочки. Это также значение по умолчанию, если номер правила не указан.

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

-L, --list [chain]
    Вывести все правила в выбранной цепочке. Если цепочка не определена, выводятся все цепочки. Как и любая другая команда iptables, эта команда применяется к указанной таблице (по умолчанию используется filter), поэтому правила NAT выводятся когда определена таблица nat
     iptables -t nat -n -L
    Пожалуйста, обратите внимание, что эта команда часто используется с параметром -n, чтобы избежать длительного обратного поиска в службе DNS. Допустимо также указывать параметр -Z (ноль), в этом случае цепочки будут выведены атомарно, а счётчики пакетов и байтов будут обнулены. На подробный вывод влияют другие приведенные параметры. Подробности правила не выводятся до тех пор, пока вы не используете
     iptables -L -v
    или iptables-save(8).

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

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

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

-N, --new-chain chain
    Создать новую пользовательскую цепочку с заданным названием. Цели (цепочки) с таким названием не должно быть.

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

-P, --policy chain target
    Установить политику (по умолчанию) для встроенной (не определяемой пользователем) цепочки на заданную цель. Целью политики должны быть либо 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может использоваться с ядром версии 2.6.11 или более поздней версии. Число ноль эквивалентно all, это означает, что вы не можете непосредственно проверить поле протокола на наличие значения 0. Для сопоставления с заголовком HBH, даже если он был последним, вы не можете использовать -p 0; всегда нужно использовать -m hbh.

[!] -s, --source address[/mask][,...]
    Определение адреса источника. Address может быть либо сетевым именем, именем хоста, сетевым IP-адресом (с /mask), либо обычным IP-адресом. Имена хостов будут решены (вычислены) только один раз, перед отправкой правила в ядро. Пожалуйста, обратите внимание, что указывать любое имя, которое будет решено с помощью удаленного запроса к службе DNS, - действительно плохая идея. mask может быть либо сетевой маской ipv4 (для iptables), либо простым числом, указывающим число 1 в левой части сетевой маски. Таким образом, маска iptables, равная 24, эквивалентна 255.255.255.0. Аргумент "!" перед указанием адреса изменяет смысл адреса. Флаг --src является псевдонимом для этого параметра. Можно указать несколько адресов, но это приведет к expand to multiple rules (при добавлении с помощью параметра -A) или приведет к удалению нескольких правил (с помощью параметра -D).

[!] -d, --destination address[/mask][,...]
    Определение адреса назначения. Смотрите описание флага -s (source) для подробного описания синтаксиса. Флаг --dst является псевдонимом для этого параметра.

-m, --match match
    Определяет используемый критерий соответствия, т.е. модуль расширения, который проверяет наличие определенного свойства. Набор критериев соответствия определяет условие, при котором вызывается цель. Критерии соответствия вычисляются от первого до последнего, как указано в командной строке и работают по принципу "короткого замыкания", т.е. если одно расширение выдает значение false, вычисление прекращается.

-j, --jump target
    Это определяет цель правила, т.е. что делать, если пакет соответствует правилу. Целью может быть определенная пользователем цепочка (отличная от той, в которой находится это правило), одна из конкретных встроенных целей, которые немедленно решают судьбу пакета, или расширение (смотрите ниже MATCH AND TARGET EXTENSIONS). Если этот параметр опущен в правиле (и -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 000, соответственно (чтобы это изменить, смотрите флаг -x). При добавлении, вставке, удалении и замене это приводит к выводу подробной информации о правиле или правилах. -v может быть указано несколько раз, чтобы, если нужно, генерировать более подробные сведения для отладки: Если указано дважды, iptables-legacy то будет выведена информация о таблице и записи в libiptc, iptables-nft выводит правила в представлении netlink (код виртуальной машины). Когда указано три раза, iptables-nft также будет создан дамп всех сообщений netlink, отправленных в ядро.

-V, --version
    Показать версию программы и используемый API ядра.

-w, --wait [seconds]
    Ожидать блокировку xtables. Это нужно для предотвращения одновременного запуска нескольких экземпляров программы, при запуске будет предпринята попытка получить эксклюзивную блокировку. По умолчанию программа завершит работу, если блокировку получить не удастся. Этот параметр заставит программу ждать (неопределенно долго или в течение необязательных seconds), пока не будет получена эксклюзивная блокировка.

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

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

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

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

ФАЙЛ БЛОКИРОВКИ
iptables использует файл /run/xtables.lock для получения эксклюзивной блокировки при запуске. Переменная окружения XTABLES_LOCKFILE может использоваться для переопределения настройки по умолчанию.

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

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

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

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

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

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

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

СМОТРИТЕ ТАКЖЕ
iptables-apply(8), iptables-save(8), iptables-restore(8), iptables-extensions(8),

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

АВТОРЫ
Расти Рассел изначально написал iptables, предварительно проконсультировавшись с Майклом Нойлингом.

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

Джеймс Моррис создал цель TOS и критерии соответствия для неё.

Йожеф Кадлечик создал цель REJECT.

Харальд Вельте создал цели ULOG и NFQUEUE, новый libiptc, а также цели и критерии соответствия TTL, DSCP, ECN.

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

Эта страница руководства, первоначально была создана Эрве Эйченне <rv@wallfire.org>.

ВЕРСИЯ

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

ПЕРЕВОД
Русский перевод этой страницы руководства разработал Aleksandr Felda <isk8da@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику по его адресу электронной почты или по адресу списка рассылки русских переводчиков (<debian-l10n-russian@lists.debian.org>).