iptables – Изменение таблиц iptables системы
Новая версия с 2.0.
Синопсис
- Iptables используется для настройки, обслуживания и проверки таблиц правил фильтрации пакетов IP в ядре Linux.
- Этот модуль не обрабатывает сохранение и/или загрузку правил, а только манипулирует текущими правилами, присутствующими в памяти. Это поведение аналогично команде
iptablesиip6tables, которую этот модуль использует внутренне.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| action - добавлен в 2.2 |
| Определяет, должно ли правило добавляться в конец или вставляться в начало. Если правило уже существует, цепочка не будет изменена. | |
| chain - | Цепочка, к которой применяется операция. Этот параметр может представлять имя пользовательской цепочки или одну из встроенных цепочек: 'INPUT', 'FORWARD', 'OUTPUT', 'PREROUTING', 'POSTROUTING', 'SECMARK', 'CONNSECMARK'. | ||
| comment - | Указывает комментарий, который будет добавлен к правилу. | ||
| ctstate - |
[] | ctstate — список состояний соединений для сопоставления в модуле conntrack. Возможные состояния: 'INVALID', 'NEW', 'ESTABLISHED', 'RELATED', 'UNTRACKED', 'SNAT', 'DNAT' | |
| destination - | Указание пункта назначения. Адрес может быть именем сети, именем хоста, IP-адресом сети (с маской) или простым IP-адресом. Имена хостов будут разрешены один раз перед отправкой правила в ядро. Обратите внимание, что указание любого имени для разрешения с помощью удалённого запроса, такого как DNS, является очень плохой идеей. Маска может быть как маской сети, так и простым числом, задающим количество единиц слева в маске сети. Таким образом, маска 24 эквивалентна 255.255.255.0. Аргумент "!" перед указанием адреса инвертирует смысл адреса. | ||
| destination_port - | Указание номера порта назначения или диапазона портов. Это может быть имя службы или номер порта. Можно также указать включающий диапазон в формате first:last. Если первый порт опущен, предполагается '0'; если последний — '65535'. Если первый порт больше второго, они меняются местами. Это допустимо только если правило также указывает один из следующих протоколов: tcp, udp, dccp или sctp. | ||
| flush - добавлен в 2.2 | Очищает указанную таблицу и цепочку всех правил. Если цепочка не указана, очищается вся таблица. Игнорирует все остальные параметры. | ||
| fragment - | Означает, что правило относится только ко второму и последующим фрагментам фрагментированных пакетов. Поскольку нет способа узнать исходные или конечные порты такого пакета (или тип ICMP), такой пакет не будет соответствовать никаким правилам, которые их указывают. Когда аргумент "!" предшествует аргументу fragment, правило будет соответствовать только головным фрагментам или нефрагментированным пакетам. | ||
| goto - | Указывает, что обработка должна продолжить в указанной пользователем цепочке. В отличие от аргумента jump, return не продолжит обработку в этой цепочке, а вместо этого в цепочке, которая вызвала нас через jump. | ||
| icmp_type - добавлен в 2.2 | Позволяет указать тип ICMP, который может быть числовым типом ICMP, парой тип/код или одним из имён типов ICMP, показанных командой 'iptables -p icmp -h' | ||
| in_interface - | Имя интерфейса, через который пакет был получен (только для пакетов, входящих в цепочки INPUT, FORWARD и PREROUTING). При использовании аргумента "!" перед именем интерфейса смысл инвертируется. Если имя интерфейса оканчивается на "+", то любой интерфейс, начинающийся с этого имени, будет соответствовать. Если этот параметр опущен, любому имени интерфейса будет соответствовать. | ||
| ip_version - |
| Версия IP-протокола, к которой должно применяться это правило. | |
| jump - | Указывает цель правила, т.е. что делать, если пакет ему соответствует. Цель может быть пользовательской цепочкой (кроме той, в которой находится это правило), одной из специальных встроенных целей, которые сразу же определяют судьбу пакета, или расширением (см. РАСШИРЕНИЯ ниже). Если этот параметр опущен в правиле (и параметр goto не используется), то соответствие правилу не повлияет на судьбу пакета, но счётчики по правилу будут увеличены. | ||
| limit - | Указывает максимальное среднее число соответствий в секунду. Число может явно указывать единицы измерения, используя `/second', `/minute', `/hour' или `/day', или их части (например, `5/second' то же самое, что `5/s'). | ||
| limit_burst - добавлен в 2.1 | Указывает максимальный объём перед тем, как вступит в силу вышеупомянутый лимит. | ||
| log_prefix - добавлен в 2.5 | Указывает текст лога для правила. Имеет смысл только с переходом LOG. | ||
| match - | Значение по умолчанию: [] | Указывает используемый модуль сопоставления, т.е. модуль расширения, проверяющий определённое свойство. Набор соответствий образует условие, при котором вызывается цель. Сопоставления оцениваются сначала до конца, если указаны как массив, и работают в режиме короткого замыкания, т.е. если одно расширение возвращает false, оценка прекратится. | |
| out_interface - | Имя интерфейса, через который пакет будет отправлен (для пакетов, входящих в цепочки FORWARD, OUTPUT и POSTROUTING). При использовании аргумента "!" перед именем интерфейса смысл инвертируется. Если имя интерфейса оканчивается на "+", то любой интерфейс, начинающийся с этого имени, будет соответствовать. Если этот параметр опущен, любому имени интерфейса будет соответствовать. | ||
| policy - добавлен в 2.2 |
| Устанавливает политику цепочки на заданную цель. Только встроенные цепочки могут иметь политики. Этот параметр требует параметр chain.Игнорирует все остальные параметры. | |
| protocol - | Протокол правила или пакета для проверки. Указанный протокол может быть одним из tcp, udp, udplite, icmp, esp, ah, sctp или специальным ключевым словом "all", или это может быть числовое значение, представляющее один из этих протоколов или другой. Допускается имя протокола из /etc/protocols. Аргумент "!" перед протоколом инвертирует проверку. Ноль эквивалентен "all". "all" соответствует всем протоколам и принимается по умолчанию, если этот параметр опущен. | ||
| reject_with - добавлен в 2.1 | Указывает тип пакета ошибки для возврата при отклонении. Подразумевает "jump: REJECT" | ||
| rule_num - добавлен в 2.5 | Вставить правило как заданное число правила. Работает только с action = 'insert'. | ||
| set_counters - | Это позволяет администратору инициализировать счётчики пакетов и байтов правила (при операциях INSERT, APPEND, REPLACE). | ||
| set_dscp_mark - добавлен в 2.1 | Позволяет указать метку DSCP, которая будет добавляться к пакетам. Принимает целое число или шестнадцатеричное значение. Взаимоисключающее с set_dscp_mark_class. | ||
| set_dscp_mark_class - добавлен в 2.1 | Позволяет указать предопределённый класс DiffServ, который будет преобразован в соответствующую метку DSCP. Взаимоисключающее с set_dscp_mark. | ||
| источник - | Спецификация источника. Адрес может быть именем сети, именем хоста, сетевым IP-адресом (с маской) или обычным IP-адресом. Имена хостов будут разрешены только один раз, прежде чем правило будет отправлено ядру. Обратите внимание, что указание любого имени для разрешения с удаленным запросом, таким как DNS, — очень плохая идея. Маска может быть либо маской сети, либо обычным числом, указывающим количество 1 в левой части маски сети. Таким образом, маска 24 эквивалентна 255.255.255.0. Аргумент «!» перед указанием адреса инвертирует смысл адреса. | ||
| порт_источника - | Спецификация порта источника или диапазона портов. Это может быть имя службы или номер порта. Также можно указать включающий диапазон, используя формат first:last. Если первый порт опущен, предполагается «0»; если последний опущен, предполагается «65535». Если первый порт больше второго, они будут поменены местами. | ||
| состояние - |
| Указывает, должно ли правило отсутствовать или присутствовать. | |
| syn - добавлено в 2.5 |
| Это позволяет сопоставлять пакеты, у которых установлен бит SYN, а биты ACK и RST сброшены. При отрицании это соответствует всем пакетам, у которых установлены биты RST или ACK. | |
| таблица - |
| Этот параметр указывает таблицу соответствия пакетов, на которой должен работать командный оператор. Если ядро настроено на автоматическую загрузку модулей, будет выполнена попытка загрузить соответствующий модуль для этой таблицы, если он еще не загружен. | |
| tcp_flags - добавлено в 2.4 | Значение по умолчанию: {} | Спецификация флагов TCP. tcp_flags ожидает словарь с двумя ключами flags и flags_set. | |
| флаги - | Список флагов, которые вы хотите проверить. | ||
| флаги_установлены - | Флаги, которые должны быть установлены. | ||
| в_назначение - добавлено в 2.1 | Это указывает адрес назначения для использования с DNAT. Без этого адрес назначения никогда не изменяется. | ||
| порты_назначения - | Это указывает порт назначения или диапазон портов для использования: без этого порт назначения никогда не изменяется. Это справедливо только в том случае, если правило также указывает один из следующих протоколов: tcp, udp, dccp или sctp. | ||
| из_источника - добавлено в 2.2 | Это указывает адрес источника для использования с SNAT. Без этого адрес источника никогда не изменяется. | ||
| uid_владелец - добавлено в 2.1 | Указывает UID или имя пользователя для использования в правиле соответствия по владельцу. Начиная с Ansible 2.6, при добавлении префикса !, правило инвертируется, чтобы применить его ко всем пользователям, кроме указанного. | ||
Примечания
Примечание
- Этот модуль просто обрабатывает отдельные правила. Если вам нужны расширенные цепочки правил, рекомендуемым способом является шаблонизация файла восстановления iptables.
Примеры
# Block specific IP
- iptables:
chain: INPUT
source: 8.8.8.8
jump: DROP
become: yes
# Forward port 80 to 8600
- iptables:
table: nat
chain: PREROUTING
in_interface: eth0
protocol: tcp
match: tcp
destination_port: 80
jump: REDIRECT
to_ports: 8600
comment: Redirect web traffic to port 8600
become: yes
# Allow related and established connections
- iptables:
chain: INPUT
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
become: yes
# Allow new incoming SYN packets on TCP port 22 (SSH).
- iptables:
chain: INPUT
protocol: tcp
destination_port: 22
ctstate: NEW
syn: match
jump: ACCEPT
comment: Accept new SSH connections.
# Tag all outbound tcp packets with DSCP mark 8
- iptables:
chain: OUTPUT
jump: DSCP
table: mangle
set_dscp_mark: 8
protocol: tcp
# Tag all outbound tcp packets with DSCP DiffServ class CS1
- iptables:
chain: OUTPUT
jump: DSCP
table: mangle
set_dscp_mark_class: CS1
protocol: tcp
# Insert a rule on line 5
- iptables:
chain: INPUT
protocol: tcp
destination_port: 8080
jump: ACCEPT
rule_num: 5
# Set the policy for the INPUT chain to DROP
- iptables:
chain: INPUT
policy: DROP
# Reject tcp with tcp-reset
- iptables:
chain: INPUT
protocol: tcp
reject_with: tcp-reset
ip_version: ipv4
# Set tcp flags
- iptables:
chain: OUTPUT
jump: DROP
protocol: tcp
tcp_flags:
flags: ALL
flags_set:
- ACK
- RST
- SYN
- FIN
Статус
- Этот модуль не гарантирует обратную совместимость интерфейса. [превью]
- Этот модуль поддерживается основной командой Ansible. [core]
Поддержка Red Hat
Дополнительную информацию о поддержке этого модуля Red Hat можно найти в этой статье базы знаний Red Hat.
Авторы
- Linus Unnebäck (@LinusU) <linus@folkdatorn.se>
- Sébastien DA ROCHA (@sebastiendarocha)
Подсказка
Если вы заметили какие-либо проблемы в этой документации, вы можете изменить этот документ, чтобы улучшить его.
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.7/modules/iptables_module.html