Spec-Zone.ru › Ansible 2.9

iptables – Изменение правил iptables

  • Синтаксис
  • Параметры
  • Примечания
  • Примеры
  • Состояние

Синтаксис

  • iptables используется для настройки, поддержки и проверки таблиц правил фильтрации пакетов IP в ядре Linux.
  • Этот модуль не обрабатывает сохранение и/или загрузку правил, а только манипулирует текущими правилами, присутствующими в памяти. Это соответствует поведению команд iptables и ip6tables, которые этот модуль использует внутри.

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
action
строка
    Варианты:
  • append ←
  • insert
Определяет, нужно ли добавить правило в конец или вставить в начало.
Если правило уже существует, цепочка не будет изменена.
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
булево
    Варианты:
  • no
  • yes
Очищает указанную таблицу и цепочку всех правил.
Если цепочка не указана, вся таблица очищается.
Игнорирует все остальные параметры.
fragment
строка
Это означает, что правило относится только ко второму и последующим фрагментам фрагментированных пакетов.
Так как нет способа узнать исходные или целевые порты такого пакета (или тип ICMP), такой пакет не будет соответствовать никаким правилам, которые их указывают.
Когда аргумент "!" предшествует аргументу fragment, правило будет соответствовать только фрагментам заголовков или целым пакетам.
gateway
строка
добавлено в 2.8
Это указывает IP-адрес хоста, которому нужно отправлять клонированные пакеты.
Этот параметр допустим только при jump установлено на TEE.
gid_owner
строка
добавлено в 2.9
Указывает GID или группу для использования в правиле сопоставления по владельцу.
goto
строка
Это указывает, что обработка должна продолжаться в указанной пользователем цепочке.
В отличие от аргумента jump, возврат не продолжит обработку в этой цепочке, а вместо этого в цепочке, которая вызвала нас с помощью jump.
icmp_type
строка
Это позволяет указать тип ICMP, который может быть числовым типом ICMP, парой тип/код или одним из имен типов ICMP, показанных командой 'iptables -p icmp -h'.
in_interface
строка
Имя интерфейса, через который пакет был получен (только для пакетов, входящих в цепочки INPUT, FORWARD и PREROUTING).
Когда аргумент ! используется перед именем интерфейса, смысл инвертируется.
Если имя интерфейса оканчивается на +, то будет сопоставлен любой интерфейс, начинающийся с этого имени.
Если этот параметр опущен, будет сопоставлено любое имя интерфейса.
ip_version
строка
    Варианты:
  • ipv4 ←
  • ipv6
Какая версия IP-протокола должна применяться к этому правилу.
jump
строка
Это указывает цель правила; т.е. что нужно делать, если пакет ему соответствует.
Целью может быть пользовательская цепочка (кроме той, в которой находится это правило), одно из специальных встроенных целей, которые немедленно определяют судьбу пакета, или расширение (см. РАСШИРЕНИЯ ниже).
Если этот параметр опущен в правиле (и параметр goto не используется), то соответствие правилу не повлияет на судьбу пакета, но счётчики по правилу будут увеличены.
limit
строка
Указывает максимальное среднее число совпадений, разрешенных в секунду.
Число может явно указывать единицы, используя `/second', `/minute', `/hour' или `/day', или части этих (так `5/second' то же самое, что и `5/s').
limit_burst
строка
Указывает максимальную вспышку до того, как вступит в силу вышеуказанное ограничение.
log_level
строка
добавлено в 2.8
    Варианты:
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • emerg
  • alert
  • crit
  • error
  • warning
  • notice
  • info
  • debug
Уровень ведения журнала в соответствии с приоритетами, определенными syslogd.
Значение может быть строками или числами от 1 до 8.
Этот параметр применим только если jump установлен на LOG.
log_prefix
строка
добавлено в 2.5
Указывает текст для записи в журнал. Имеет смысл только с целью LOG.
match
список
Значение по умолчанию:
[]
Указывает сопоставление для использования, то есть модуль расширения, который проверяет определённое свойство.
Набор сопоставлений образует условие, при котором вызывается цель.
Сопоставления оцениваются сперва до последнего, если задано в виде массива, и работают по принципу короткого замыкания, т.е. если одно расширение возвращает ложь, оценка остановится.
out_interface
строка
Имя интерфейса, через который пакет будет отправлен (для пакетов, входящих в цепочки FORWARD, OUTPUT и POSTROUTING).
Когда аргумент ! используется перед именем интерфейса, смысл инвертируется.
Если имя интерфейса заканчивается на +, то будет сопоставлен любой интерфейс, начинающийся с этого имени.
Если этот параметр опущен, будет сопоставлено любое имя интерфейса.
policy
строка
    Варианты:
  • ACCEPT
  • DROP
  • QUEUE
  • RETURN
Устанавливает политику для цепочки до заданной цели.
Только встроенные цепочки могут иметь политики.
Этот параметр требует параметра chain.
Игнорирует все остальные параметры.
protocol
строка
Протокол правила или пакета для проверки.
Указанный протокол может быть одним из tcp, udp, udplite, icmp, esp, ah, sctp или специальным ключевым словом all, или он может быть числовым значением, представляющим один из этих протоколов или другой.
Имя протокола из /etc/protocols также допускается.
Аргумент ! перед протоколом инвертирует тест.
Число ноль эквивалентно всем.
all будет соответствовать всем протоколам и принимается по умолчанию, если этот параметр опущен.
reject_with
строка
Указывает тип пакета ошибки, который нужно вернуть при отклонении. Подразумевает "jump: REJECT"
rule_num
строка
добавлено в 2.5
Вставить правило в качестве данного номера правила.
Это работает только с action=insert.
set_counters
строка
Это позволяет администратору инициализировать счетчики пакетов и байтов правила (во время операций INSERT, APPEND, REPLACE).
set_dscp_mark
строка
Это позволяет указать метку DSCP, которая должна быть добавлена к пакетам. Принимает целое число или шестнадцатеричное значение.
Взаимоисключающее с set_dscp_mark_class.
set_dscp_mark_class
строка
Это позволяет указать предварительно определенный класс DiffServ, который будет преобразован в соответствующую метку DSCP.
Взаимоисключающее с set_dscp_mark.
source
строка
Указание источника.
Адрес может быть именем сети, именем хоста, сетевым IP-адресом (с маской), или обычным IP-адресом.
Имена хостов будут разрешены только один раз, прежде чем правило будет отправлено в ядро. Обратите внимание, что указание любого имени для разрешения с удаленным запросом, таким как DNS, — это очень плохая идея.
Маска может быть либо маской сети, либо обычным числом, определяющим количество единиц слева в маске сети. Таким образом, маска 24 эквивалентна 255.255.255.0. Аргумент ! перед указанием адреса инвертирует смысл адреса.
source_port
строка
Указание исходного порта или диапазона портов.
Это может быть имя службы или номер порта.
Можно также указать включительный диапазон, используя формат first:last.
Если первый порт опущен, предполагается 0; если последний опущен, предполагается 65535.
Если первый порт больше второго, они будут поменяны местами.
src_range
строка
добавлено в 2.8
Указывает диапазон исходных IP-адресов для сопоставления в модуле iprange.
state
строка
    Варианты:
  • absent
  • present ←
Правило должно быть отсутствующим или присутствующим.
syn
строка
добавлено в 2.5
    Варианты:
  • ignore ←
  • match
  • negate
Это позволяет сопоставлять пакеты, у которых установлен бит SYN, а биты ACK и RST сброшены.
При отрицании это сопоставляет все пакеты, у которых установлены биты RST или ACK.
table
строка
    Варианты:
  • filter ←
  • nat
  • mangle
  • raw
  • security
Этот параметр указывает таблицу сопоставления пакетов, на которой должна работать команда.
Если ядро настроено на автоматическую загрузку модулей, будет предпринята попытка загрузить соответствующий модуль для этой таблицы, если он еще не загружен.
tcp_flags
словарь
добавлено в 2.4
Значение по умолчанию:
{}
Указание флагов TCP.
tcp_flags ожидает словарь с двумя ключами flags и flags_set.
flags
список
Список флагов, которые вы хотите проверить.
flags_set
список
Флаги, которые должны быть установлены.
to_destination
строка
Это указывает целевой адрес для использования с DNAT.
Без этого целевой адрес никогда не изменяется.
to_ports
строка
Это указывает целевой порт или диапазон портов для использования. Без этого целевой порт никогда не изменяется.
Это допустимо только в том случае, если правило также указывает один из протоколов tcp, udp, dccp или sctp.
to_source
строка
Это указывает исходный адрес для использования с SNAT.
Без этого исходный адрес никогда не изменяется.
uid_owner
строка
Указывает 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]

Поддержка 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.9/modules/iptables_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API