ansible.builtin.iptables – Модификация правил iptables
Примечание
Этот модуль является частью ansible-base и включён во все установки Ansible. В большинстве случаев вы можете использовать короткое имя модуля iptables, даже без указания ключевого слова collections:. Несмотря на это, рекомендуется использовать полное имя класса (FQCN) для лёгкой ссылки на документацию модуля и для предотвращения конфликтов с другими коллекциями, которые могут иметь то же имя модуля.
В версии 2.0: из 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. | ||
| destination_ports список / элементы=строка добавлен в 2.11 ansible.builtin | Это указывает несколько номеров портов назначения или диапазонов портов для сопоставления в модуле multiport. Он может использоваться только совместно с протоколами tcp, udp, udplite, 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 | Указывает текст журнала для правила. Имеет смысл только с целевым параметром LOG. | ||
| match список / элементы=строка | Значение по умолчанию: [] | Указывает используемое соответствие, то есть модуль расширения, который проверяет определенное свойство. Набор соответствий образует условие, при котором вызывается цель. Совпадения оцениваются сначала по порядку следования, если указаны как массив, и работают по принципу короткого замыкания, то есть, если один расширения возвращает false, оценка прекращается. | |
| match_set строка добавлен в 2.11 ansible.builtin | Указывает имя набора, которое может быть определено ipset. Должен использоваться вместе с параметром match_set_flags. Когда префикс ! добавлен, он инвертирует правило.Использует расширение iptables set. | ||
| match_set_flags строка добавлен в 2.11 ansible.builtin |
| Указывает необходимые флаги для параметра match_set. Должен использоваться вместе с параметром match_set. Использует расширение iptables set. | |
| out_interface строка | Имя интерфейса, через который пакет будет отправлен (для пакетов, входящих в цепочки FORWARD, OUTPUT и POSTROUTING).Когда используется аргумент !, смысл инвертируется.Если имя интерфейса оканчивается на +, то соответствовать будут все интерфейсы, начинающиеся с этого имени.Если этот параметр опущен, любому имени интерфейса будет соответствовать. | ||
| policy строка добавлен в 2.2 ansible.builtin |
| Устанавливает политику для цепочки в заданную цель. Только встроенные цепочки могут иметь политики. Этот параметр требует параметра chain. Если вы указали этот параметр, все остальные параметры будут игнорироваться. Этот параметр используется для установки политики по умолчанию для заданной chain. Не путайте с параметром jump. | |
| протокол строка | Протокол правила или пакета для проверки. Указанный протокол может быть одним из 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. | ||
| источник строка | Указание источника. Адрес может быть именем сети, именем хоста, IP-адресом сети (с маской) или простым IP-адресом. Имена хостов будут разрешены только один раз, прежде чем правило будет отправлено ядру. Обратите внимание, что указание любого имени для разрешения с помощью удалённого запроса, такого как DNS, — очень плохая идея. Маска может быть либо маской сети, либо простым числом, определяющим количество единиц слева от маски сети. Таким образом, маска 24 эквивалентна 255.255.255.0. Аргумент ! перед указанием адреса инвертирует смысл адреса. | ||
| порт_источника строка | Указание порта источника или диапазона портов. Это может быть имя службы или номер порта. Также можно указать включающий диапазон, используя формат first:last.Если первый порт опущен, подразумевается 0; если последний опущен, подразумевается 65535.Если первый порт больше второго, они будут поменяны местами. | ||
| src_range строка добавлено в 2.8 ansible.builtin | Указывает диапазон IP-адресов источника для сопоставления в модуле iprange. | ||
| состояние строка |
| Должно ли правило отсутствовать или присутствовать. | |
| syn строка добавлено в 2.5 ansible.builtin |
| Это позволяет сопоставлять пакеты, у которых установлен бит SYN, а биты ACK и RST сброшены. При отрицании это соответствует всем пакетам, у которых установлены биты RST или ACK. | |
| таблица строка |
| Этот параметр указывает таблицу сопоставления пакетов, на которой должно выполняться действие. Если ядро настроено на автоматическую загрузку модулей, будет выполнена попытка загрузить соответствующий модуль для этой таблицы, если он ещё не загружен. | |
| tcp_flags словарь добавлено в 2.4 ansible.builtin | По умолчанию: {} | Указание флагов TCP. tcp_flags ожидает словарь с двумя ключами flags и flags_set. | |
| флаги список / элементы=строка | Список флагов, которые вы хотите проверить. | ||
| flags_set список / элементы=строка | Флаги, которые нужно установить. | ||
| в_назначение строка добавлено в 2.1 ansible.builtin | Указывает целевой адрес для использования с DNAT.Без этого целевой адрес никогда не изменяется. | ||
| в_порты строка | Указывает целевой порт или диапазон портов для использования. Без этого целевой порт никогда не изменяется. Это допустимо только в том случае, если правило также указывает один из протоколов tcp, udp, dccp или sctp. | ||
| в_источник строка добавлено в 2.2 ansible.builtin | Указывает адрес источника для использования с SNAT.Без этого адрес источника никогда не изменяется. | ||
| uid_владелец строка добавлено в 2.1 ansible.builtin | Указывает UID или имя пользователя для использования в правиле сопоставления по владельцу. С Ansible 2.6, когда аргумент ! предваряется, он инвертирует правило, чтобы применить его вместо этого ко всем пользователям, кроме указанного. | ||
| ожидание строка добавлено в 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: Allow source IPs defined in ipset "admin_hosts" on port 22
ansible.builtin.iptables:
chain: INPUT
match_set: admin_hosts
match_set_flags: src
destination_port: 22
jump: ALLOW
- 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
# Think twice before running following task as this may lock target system
- 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
- name: Allow connections on multiple ports
ansible.builtin.iptables:
chain: INPUT
protocol: tcp
destination_ports:
- "80"
- "443"
- "8081:8083"
jump: ACCEPT
Авторы
- Linus Unnebäck (@LinusU) <linus@folkdatorn.se>
- Sébastien DA ROCHA (@sebastiendarocha)
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/builtin/iptables_module.html