iptables – Изменение правил iptables
Впервые добавлено в версии 2.0.
Синтаксис
-
iptablesиспользуется для настройки, поддержки и проверки таблиц правил фильтрации IP-пакетов в ядре Linux. - Этот модуль не обрабатывает сохранение и/или загрузку правил, а лишь манипулирует текущими правилами, присутствующими в памяти. Это соответствует поведению команд
iptablesиip6tables, которые этот модуль использует внутри.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| action строка добавлено в 2.2 |
| Определяет, следует ли добавить правило в конец или вставить в начало. Если правило уже существует, цепочка не будет изменена. | |
| chain строка | Указывает цепочку iptables для изменения. Это может быть пользовательская цепочка или одна из стандартных цепочек iptables, таких как 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. | ||
| dst_range строка добавлено в 2.8 | Указывает диапазон IP-адресов назначения для сопоставления в модуле iprange. | ||
| flush булево добавлено в 2.2 |
| Очищает указанную таблицу и цепочку всех правил. Если цепочка не указана, вся таблица очищается. Игнорирует все другие параметры. | |
| fragment строка | Это означает, что правило относится только ко второму и последующим фрагментам фрагментированных пакетов. Поскольку нет способа определить исходные или конечные порты такого пакета (или тип ICMP), такой пакет не будет соответствовать никаким правилам, которые их указывают. Когда аргумент "!" предшествует аргументу fragment, правило будет соответствовать только головным фрагментам или нефрагментированным пакетам. | ||
| gateway строка добавлено в 2.8 | Указывает IP-адрес хоста, на который следует отправить клонированные пакеты. Этот параметр допустим только при jump установлено в TEE. | ||
| goto строка | Указывает, что обработка должна продолжиться в пользовательской цепочке. В отличие от аргумента jump, возвращение не продолжит обработку в этой цепочке, а вместо этого в цепочке, которая вызвала её с помощью 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_level строка добавлено в 2.8 |
| Уровень журналирования в соответствии с приоритетами, определёнными syslogd. Значение может быть строками или числами от 1 до 8. Этот параметр применим только если jump установлено в LOG. | |
| 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 будет соответствовать всем протоколам и принимается по умолчанию, когда этот параметр опущен. | ||
| reject_with string added in 2.1 | Указывает тип пакета ошибки для возврата при отклонении. Подразумевает "jump: REJECT" | ||
| rule_num string added in 2.5 | Вставить правило в виде данного номера правила. Это работает только с action=insert. | ||
| set_counters string | Это позволяет администратору инициализировать счётчики пакетов и байтов правила (во время операций INSERT, APPEND, REPLACE). | ||
| set_dscp_mark string added in 2.1 | Это позволяет указать метку DSCP для добавления в пакеты. Она может принимать целое число или шестнадцатеричное значение. Взаимоисключающее с set_dscp_mark_class. | ||
| set_dscp_mark_class string added in 2.1 | Это позволяет указать предопределенный класс DiffServ, который будет преобразован в соответствующую метку DSCP. Взаимоисключающее с set_dscp_mark. | ||
| source string | Указание источника. Адрес может быть именем сети, именем хоста, сетевым IP-адресом (с /mask) или обычным IP-адресом. Имена хостов будут разрешаться только один раз, перед отправкой правила в ядро. Обратите внимание, что указание любого имени для разрешения с удалённым запросом, таким как DNS, – очень плохая идея. Маска может быть либо маской сети, либо обычным числом, задающим количество единиц слева от маски сети. Таким образом, маска 24 эквивалентна 255.255.255.0. Аргумент ! перед указанием адреса инвертирует смысл адреса. | ||
| source_port string | Указание номера порта источника или диапазона портов. Это может быть имя службы или номер порта. Также можно указать включительный диапазон, используя формат first:last.Если первый порт опущен, предполагается 0; если последний опущен, предполагается 65535.Если первый порт больше второго, они будут поменяны местами. | ||
| src_range string added in 2.8 | Указывает диапазон IP-адресов источника для сопоставления в модуле iprange. | ||
| state string |
| Указывает, должно ли правило быть отсутствующим или присутствующим. | |
| syn string added in 2.5 |
| Это позволяет сопоставлять пакеты, у которых установлен бит SYN, а биты ACK и RST сброшены. При отрицании это сопоставляет все пакеты, у которых установлены биты RST или ACK. | |
| table string |
| Этот параметр указывает таблицу сопоставления пакетов, на которой должен выполняться операция. Если ядро настроено на автоматическую загрузку модулей, будет выполнена попытка загрузить соответствующий модуль для этой таблицы, если его ещё нет. | |
| tcp_flags dictionary added in 2.4 | Значение по умолчанию: {} | Указание флагов TCP. tcp_flags ожидает словарь с двумя ключами flags и flags_set. | |
| flags list | Список флагов, которые нужно проверить. | ||
| flags_set list | Флаги, которые нужно установить. | ||
| to_destination string added in 2.1 | Указывает целевой адрес для использования с DNAT.Без этого целевой адрес никогда не изменяется. | ||
| to_ports string | Указывает целевой порт или диапазон портов для использования. Без этого целевой порт никогда не изменяется. Это справедливо только, если в правиле также указан один из протоколов tcp, udp, dccp или sctp. | ||
| to_source string added in 2.2 | Указывает адрес источника для использования с SNAT.Без этого адрес источника никогда не изменяется. | ||
| uid_owner string added in 2.1 | Указывает UID или имя пользователя для использования в правиле сопоставления по владельцу. Начиная с Ansible 2.6, когда префикс ! используется, он инвертирует правило, чтобы оно применялось вместо этого ко всем пользователям, кроме указанного. | ||
Примечания
Примечание
- Этот модуль обрабатывает только отдельные правила. Если вам нужна продвинутая цепочка правил, рекомендуется использовать шаблон файла восстановления iptables.
Примеры
- name: Block specific IP
iptables:
chain: INPUT
source: 8.8.8.8
jump: DROP
become: yes
- name: 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
- name: Allow related and established connections
iptables:
chain: INPUT
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
become: yes
- name: 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.
- name: Match on IP ranges
iptables:
chain: FORWARD
src_range: 192.168.1.100-192.168.1.199
dst_range: 10.0.0.1-10.0.0.50
jump: ACCEPT
- name: Tag all outbound tcp packets with DSCP mark 8
iptables:
chain: OUTPUT
jump: DSCP
table: mangle
set_dscp_mark: 8
protocol: tcp
- name: Tag all outbound tcp packets with DSCP DiffServ class CS1
iptables:
chain: OUTPUT
jump: DSCP
table: mangle
set_dscp_mark_class: CS1
protocol: tcp
- name: Insert a rule on line 5
iptables:
chain: INPUT
protocol: tcp
destination_port: 8080
jump: ACCEPT
action: insert
rule_num: 5
- name: Set the policy for the INPUT chain to DROP
iptables:
chain: INPUT
policy: DROP
- name: Reject tcp with tcp-reset
iptables:
chain: INPUT
protocol: tcp
reject_with: tcp-reset
ip_version: ipv4
- name: Set tcp flags
iptables:
chain: OUTPUT
jump: DROP
protocol: tcp
tcp_flags:
flags: ALL
flags_set:
- ACK
- RST
- SYN
- FIN
- name: iptables flush filter
iptables:
chain: "{{ item }}"
flush: yes
with_items: [ 'INPUT', 'FORWARD', 'OUTPUT' ]
- name: iptables flush nat
iptables:
table: nat
chain: '{{ item }}'
flush: yes
with_items: [ 'INPUT', 'OUTPUT', 'PREROUTING', 'POSTROUTING' ]
- name: Log packets arriving into an user-defined chain
iptables:
chain: LOGGING
action: append
state: present
limit: 2/second
limit_burst: 20
log_prefix: "IPTABLES:INFO: "
log_level: info
Статус
- Этот модуль не гарантирует обратную совместимость. [превью]
- Этот модуль поддерживается командой Ansible Core. [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.8/modules/iptables_module.html