ansible.posix.firewalld 模块 – 使用 firewalld 管理任意端口/服务

注意

此模块是 ansible.posix 集合(版本 1.6.2)的一部分。

如果您正在使用 ansible 包,您可能已经安装了这个集合。它不包含在 ansible-core 中。要检查是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install ansible.posix。您需要更多要求才能使用此模块,有关详细信息,请参阅要求

要在 playbook 中使用它,请指定:ansible.posix.firewalld

概要

  • 此模块允许在正在运行或永久的 firewalld 规则中添加或删除服务和端口(TCP 或 UDP)。

要求

以下要求需要在执行此模块的主机上满足。

  • firewalld >= 0.9.0

  • python-firewall >= 0.9.0

参数

参数

注释

forward

字符串

您想要在 firewalld 中启用/禁用区域之间的转发设置。

此选项仅受 firewalld v0.9.0 或更高版本支持。

icmp_block

字符串

您想要在 firewalld 中添加/删除到/从区域的 ICMP 阻止。

icmp_block_inversion

字符串

在 firewalld 中启用/禁用区域的 ICMP 阻止的反转。

immediate

布尔值

是否将此更改应用于运行时 firewalld 配置。

如果 permanent=false,则默认为 true

选项

  • false ← (默认)

  • true

interface

字符串

您想要在 firewalld 中添加/删除到/从区域的接口。

masquerade

字符串

您想要在 firewalld 中启用/禁用区域之间的伪装设置。

offline

布尔值

如果 permanent=true 且 firewalld 未运行,则忽略 immediate

选项

  • false ← (默认)

  • true

permanent

布尔值

是否将此更改应用于永久 firewalld 配置。

从 Ansible 2.3 开始,当 firewalld 未运行时,永久操作可以对 firewalld 配置进行操作(需要 firewalld >= 0.3.9)。

请注意,如果此值为 false,则 immediate=true 默认。

选项

  • false ← (默认)

  • true

port

字符串

要添加/删除到/从 firewalld 的端口或端口范围的名称。

必须采用 PORT/PROTOCOL 或 PORT-PORT/PROTOCOL 的形式表示端口范围。

port_forward

列表 / 元素=字典

使用 firewalld 转发的端口和协议。

port

字符串 / 必需

要从中转发的源端口。

proto

字符串 / 必需

要转发的协议。

选项

  • "udp"

  • "tcp"

toaddr

字符串

要转发到的可选地址。

toport

字符串 / 必需

目标端口。

protocol

字符串

要添加/删除到/从 firewalld 的协议的名称。

rich_rule

字符串

要添加/删除到/从 firewalld 的富规则。

请参阅firewalld 富语言规则的语法

service

字符串

要添加/删除到/从 firewalld 的服务的名称。

该服务必须在 firewall-cmd --get-services 的输出中列出。

source

字符串

您想要在 firewalld 中添加/删除到/从区域的源/网络。

state

字符串 / 必需

启用或禁用设置。

对于端口:此端口应接受 (enabled) 还是拒绝 (disabled) 连接。

状态 presentabsent 只能在区域级操作中使用(即,当没有其他参数但设置了区域和状态时)。

选项

  • "absent"

  • "disabled"

  • "enabled"

  • "present"

target

字符串

在 ansible.posix 1.2.0 中添加

firewalld 区域目标。

如果 state=absent,这将把目标重置为默认值。

选项

  • "default"

  • "ACCEPT"

  • "DROP"(丢弃)

  • "%%REJECT%%"(拒绝)

超时

整数

当规则为非永久性时,该规则生效的秒数。

默认值: 0

区域

字符串

要添加/删除的 firewalld 区域。

请注意,默认区域可以按系统配置,但上游默认值为 public

可用选项可以根据每个系统的配置进行扩展,此处列出的是“开箱即用”的默认值。

可能的值包括 blockdmzdropexternalhomeinternalpublictrustedwork

备注

注意

  • 未在任何基于 Debian 的系统上进行测试。

  • 需要 firewalld 的 python2 绑定,该绑定可能不是默认安装的。

  • 对于 python2 firewalld 绑定不可用的发行版(例如 Fedora 28 及更高版本),您必须将这些主机的 ansible_python_interpreter 设置为 python3 解释器路径并安装 python3 绑定。

  • 可以通过仅使用 zone 和 state 参数 “present” 或 “absent” 来执行区域事务(创建、删除)。请注意,区域事务必须明确是永久性的。这是 firewalld 的一个限制。这也意味着您必须在添加要立即对其执行操作的区域后重新加载 firewalld。该模块不会为您隐式处理此操作,因为这会撤销任何先前执行的非永久性立即操作。因此,如果您需要立即访问新创建的区域,建议在区域创建返回已更改状态后立即重新加载 firewalld,然后再对该区域执行任何其他立即的非永久性操作。

  • 此模块在受管节点上需要 python-firewallpython3-firewall。它通常作为 OS 发行商为 OS 默认 Python 解释器提供的 firewalld 的子集提供。

示例

- name: permanently enable https service, also enable it immediately if possible
  ansible.posix.firewalld:
    service: https
    state: enabled
    permanent: true
    immediate: true
    offline: true

- name: permit traffic in default zone for https service
  ansible.posix.firewalld:
    service: https
    permanent: true
    state: enabled

- name: permit ospf traffic
  ansible.posix.firewalld:
    protocol: ospf
    permanent: true
    state: enabled

- name: do not permit traffic in default zone on port 8081/tcp
  ansible.posix.firewalld:
    port: 8081/tcp
    permanent: true
    state: disabled

- ansible.posix.firewalld:
    port: 161-162/udp
    permanent: true
    state: enabled

- ansible.posix.firewalld:
    zone: dmz
    service: http
    permanent: true
    state: enabled

- ansible.posix.firewalld:
    rich_rule: rule service name="ftp" audit limit value="1/m" accept
    permanent: true
    state: enabled

- ansible.posix.firewalld:
    source: 192.0.2.0/24
    zone: internal
    state: enabled

- ansible.posix.firewalld:
    zone: trusted
    interface: eth2
    permanent: true
    state: enabled

- ansible.posix.firewalld:
    forward: true
    state: enabled
    permanent: true
    zone: internal

- ansible.posix.firewalld:
    masquerade: true
    state: enabled
    permanent: true
    zone: dmz

- ansible.posix.firewalld:
    zone: custom
    state: present
    permanent: true

- ansible.posix.firewalld:
    zone: drop
    state: enabled
    permanent: true
    icmp_block_inversion: true

- ansible.posix.firewalld:
    zone: drop
    state: enabled
    permanent: true
    icmp_block: echo-request

- ansible.posix.firewalld:
    zone: internal
    state: present
    permanent: true
    target: ACCEPT

- name: Redirect port 443 to 8443 with Rich Rule
  ansible.posix.firewalld:
    rich_rule: rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443
    zone: public
    permanent: true
    immediate: true
    state: enabled

作者

  • Adam Miller (@maxamillion)