ansible.builtin.iptables – Изменение правил iptables
Примечание
Этот модуль входит в состав ansible-base и включён во все установки Ansible. В большинстве случаев, вы можете использовать короткое имя модуля iptables, даже не указывая ключевое слово collections:. Несмотря на это, рекомендуется использовать полное имя модуля (FQCN) для лёгкой ссылки на документацию модуля и для предотвращения конфликтов с другими коллекциями, которые могут иметь то же самое имя модуля.
Добавлен в версии 2.0: of ansible.builtin
Описание
-
iptablesиспользуется для настройки, поддержания и проверки таблиц правил фильтрации пакетов IP в ядре Linux. - Этот модуль не обрабатывает сохранение и/или загрузку правил, а только манипулирует текущими правилами, присутствующими в памяти. Это соответствует поведению команды
iptablesиip6tables, которые этот модуль использует внутри.
Параметры
| Параметр | Варианты/Значения по умолчанию | Комментарии | |
|---|---|---|---|
| action строка добавлен в версии 2.2 ansible.builtin |
| Определяет, следует ли добавить правило в конец или вставить в начало. Если правило уже существует, цепочка не будет изменена. | |
| chain строка | Указывает цепочку iptables для изменения. Это может быть пользовательская цепочка или одна из стандартных цепочек iptables, таких как INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING, SECMARK или CONNSECMARK. | ||
| comment строка | Указывает комментарий, который будет добавлен к правилу. | ||
| 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 ansible.builtin | Указывает диапазон IP-адресов назначения для сопоставления в модуле iprange. | ||
| flush булево добавлен в версии 2.2 ansible.builtin |
| Очищает указанную таблицу и цепочку всех правил. Если цепочка не указана, очищается вся таблица. Игнорирует все остальные параметры. | |
| fragment строка | Это означает, что правило относится только ко второму и последующим фрагментам фрагментированных пакетов. Поскольку нет способа узнать исходные или конечные порты такого пакета (или тип ICMP), такой пакет не будет соответствовать никаким правилам, которые их указывают. Когда перед аргументом fragment стоит аргумент "!", правило будет соответствовать только заголовкам фрагментов или нефрагментированным пакетам. | ||
| gateway строка добавлен в версии 2.8 ansible.builtin | Указывает IP-адрес хоста для отправки клонированных пакетов. Этот параметр допустим только когда jump установлен в TEE. | ||
| gid_owner строка добавлен в версии 2.9 ansible.builtin | Указывает GID или группу для использования в правиле сопоставления по владельцу. | ||
| goto строка | Указывает, что обработка должна продолжаться в пользовательской цепочке. В отличие от аргумента jump, return не продолжит обработку в этой цепочке, а перейдёт к цепочке, которая вызвала её с помощью jump. | ||
| icmp_type строка добавлен в версии 2.2 ansible.builtin | Позволяет указать тип 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 ansible.builtin | Указывает максимальный всплеск перед тем, как вступит в силу вышеуказанное ограничение. | ||
| log_level строка добавлен в версии 2.8 ansible.builtin |
| Уровень ведения журнала в соответствии с определёнными syslogd приоритетами. Значение может быть строками или числами от 1 до 8. Этот параметр применим только если jump установлен в LOG. | |
| log_prefix строка добавлен в версии 2.5 ansible.builtin | Указывает текст для лога правила. Имеет смысл только с целевым jump: LOG. | ||
| match список / элементы=строка | По умолчанию: [] | Указывает используемое сопоставление, то есть модуль расширения, который проверяет определённое свойство. Набор сопоставлений образует условие, при котором вызывается цель. Сопоставления оцениваются последовательно, если указаны в массиве, и работают по принципу короткого замыкания, т.е., если одно расширение возвращает false, оценка прекращается. | |
| out_interface строка | Имя интерфейса, через который пакет будет отправлен (для пакетов, поступающих в цепочки FORWARD, OUTPUT и POSTROUTING).Когда перед именем интерфейса используется аргумент !, смысл инвертируется.Если имя интерфейса заканчивается на +, то соответствовать будут все интерфейсы, начинающиеся с этого имени.Если этот параметр опущен, соответствовать будет любое имя интерфейса. | ||
| policy строка добавлен в версии 2.2 ansible.builtin |
| Устанавливает политику для цепочки на заданную цель. Только встроенные цепочки могут иметь политики. Этот параметр требует параметра chain.Игнорирует все остальные параметры. | |
| protocol строка | Протокол правила или пакета для проверки. Указанный протокол может быть одним из tcp, udp, udplite, icmp, ipv6-icmp или icmpv6, esp, ah, sctp или специальным ключевым словом all, или это может быть числовое значение, представляющее один из этих протоколов или другой.Также допускается имя протокола из /etc/protocols. Аргумент ! перед протоколом инвертирует тест.Число ноль эквивалентно всем. all будет соответствовать всем протоколам и принимается по умолчанию, когда этот параметр опущен. | ||
| reject_with строка добавлен в версии 2.1 ansible.builtin | Указывает тип пакета ошибки для возврата при отклонении. Подразумевает "jump: REJECT". | ||
| rule_num строка добавлен в версии 2.5 ansible.builtin | Вставить правило как указанный номер правила. Это работает только с action=insert. | ||
| set_counters строка | Это позволяет администратору инициализировать счётчики пакетов и байтов правила (во время операций INSERT, APPEND, REPLACE). | ||
| set_dscp_mark строка добавлен в версии 2.1 ansible.builtin | Это позволяет указать метку DSCP, которая будет добавлена к пакетам. Она принимает целое или шестнадцатеричное значение. Взаимоисключительно с set_dscp_mark_class. | ||
| set_dscp_mark_class строка добавлено в 2.1 ansible.builtin | Это позволяет указать предопределенный класс DiffServ, который будет преобразован в соответствующую метку DSCP. Взаимоисключающее с set_dscp_mark. | ||
| source строка | Спецификация источника. Адрес может быть именем сети, именем хоста, сетевым IP-адресом (с маской) или простым IP-адресом. Имена хостов будут разрешены только один раз, прежде чем правило будет передано ядру. Обратите внимание, что указание любого имени для разрешения с удалённым запросом, таким как DNS, является очень плохой идеей. Маска может быть либо маской сети, либо простым числом, определяющим количество единиц слева в маске сети. Таким образом, маска 24 эквивалентна 255.255.255.0. Аргумент ! перед указанием адреса инвертирует смысл адреса. | ||
| source_port строка | Указание исходного порта или диапазона портов. Это может быть имя сервиса или номер порта. Можно также указать включающий диапазон, используя формат first:last. Если первый порт опущен, предполагается 0; если последний опущен, предполагается 65535. Если первый порт больше второго, они будут поменяны местами. | ||
| src_range строка добавлено в 2.8 ansible.builtin | Указывает диапазон IP-адресов источника для сопоставления в модуле iprange. | ||
| state строка |
| Указывает, должно ли правило быть отсутствующим или присутствующим. | |
| syn строка добавлено в 2.5 ansible.builtin |
| Это позволяет сопоставлять пакеты, у которых установлен бит SYN, а биты ACK и RST сброшены. При отрицании это соответствует всем пакетам с установленными битами RST или ACK. | |
| table строка |
| Этот параметр указывает таблицу соответствия пакетов, на которой должно выполняться действие. Если ядро настроено на автоматическую загрузку модулей, будет предпринята попытка загрузить соответствующий модуль для этой таблицы, если он ещё не загружен. | |
| tcp_flags словарь добавлено в 2.4 ansible.builtin | По умолчанию: {} | Спецификация флагов TCP. tcp_flags ожидает словарь с двумя ключами flags и flags_set. | |
| flags список / элементы=строка | Список флагов, которые вы хотите проверить. | ||
| flags_set список / элементы=строка | Флаги, которые должны быть установлены. | ||
| to_destination строка добавлено в 2.1 ansible.builtin | Это указывает целевой адрес для использования с DNAT. Без этого целевой адрес никогда не изменяется. | ||
| to_ports строка | Это указывает целевой порт или диапазон портов для использования, без этого целевой порт никогда не изменяется. Это применимо только в том случае, если правило также указывает один из протоколов tcp, udp, dccp или sctp. | ||
| to_source строка добавлено в 2.2 ansible.builtin | Это указывает адрес источника для использования с SNAT. Без этого адрес источника никогда не изменяется. | ||
| uid_owner строка добавлено в 2.1 ansible.builtin | Указывает UID или имя пользователя для использования в правиле сопоставления по владельцу. Начиная с Ansible 2.6, когда префикс ! используется, то правило инвертируется, чтобы применяться ко всем пользователям, кроме указанного. | ||
| wait строка добавлено в 2.10 ansible.builtin | Подождать N секунд блокировки xtables, чтобы предотвратить одновременное выполнение нескольких экземпляров программы. | ||
Примечания
Примечание
- Этот модуль обрабатывает только отдельные правила. Если вам нужна продвинутая цепочка правил, рекомендуется использовать шаблоны файла восстановления iptables.
Примеры
- name: Block specific IP
ansible.builtin.iptables:
chain: INPUT
source: 8.8.8.8
jump: DROP
become: yes
- name: Forward port 80 to 8600
ansible.builtin.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
ansible.builtin.iptables:
chain: INPUT
ctstate: ESTABLISHED,RELATED
jump: ACCEPT
become: yes
- name: Allow new incoming SYN packets on TCP port 22 (SSH)
ansible.builtin.iptables:
chain: INPUT
protocol: tcp
destination_port: 22
ctstate: NEW
syn: match
jump: ACCEPT
comment: Accept new SSH connections.
- name: Match on IP ranges
ansible.builtin.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
ansible.builtin.iptables:
chain: OUTPUT
jump: DSCP
table: mangle
set_dscp_mark: 8
protocol: tcp
- name: Tag all outbound tcp packets with DSCP DiffServ class CS1
ansible.builtin.iptables:
chain: OUTPUT
jump: DSCP
table: mangle
set_dscp_mark_class: CS1
protocol: tcp
- name: Insert a rule on line 5
ansible.builtin.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
ansible.builtin.iptables:
chain: INPUT
policy: DROP
- name: Reject tcp with tcp-reset
ansible.builtin.iptables:
chain: INPUT
protocol: tcp
reject_with: tcp-reset
ip_version: ipv4
- name: Set tcp flags
ansible.builtin.iptables:
chain: OUTPUT
jump: DROP
protocol: tcp
tcp_flags:
flags: ALL
flags_set:
- ACK
- RST
- SYN
- FIN
- name: Iptables flush filter
ansible.builtin.iptables:
chain: "{{ item }}"
flush: yes
with_items: [ 'INPUT', 'FORWARD', 'OUTPUT' ]
- name: Iptables flush nat
ansible.builtin.iptables:
table: nat
chain: '{{ item }}'
flush: yes
with_items: [ 'INPUT', 'OUTPUT', 'PREROUTING', 'POSTROUTING' ]
- name: Log packets arriving into an user-defined chain
ansible.builtin.iptables:
chain: LOGGING
action: append
state: present
limit: 2/second
limit_burst: 20
log_prefix: "IPTABLES:INFO: "
log_level: info
Авторы
- 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.10/collections/ansible/builtin/iptables_module.html