Ansible:firewalld 并添加新区域

Mag*_*ick 5 ansible firewalld

我试图将以下内容添加到 Ansible 剧本中:

firewall-cmd --permanent --new-zone dockerc
firewall-cmd --permanent --zone dockerc --add-source 172.17.0.0/16
firewall-cmd --permanent --zone dockerc --add-port 8443/tcp
firewall-cmd --permanent --zone dockerc --add-port 53/udp
Run Code Online (Sandbox Code Playgroud)

但根据http://docs.ansible.com/ansible/firewalld_module.html区域没有添加新区域的选项。

有谁知道是否可以dockerc使用 Ansible添加为新区域?

小智 10

截至 2017 年 12 月 12 日,特别是 commit 8475171f67f,firewalld 模块支持创建(和删除)区域。

- firewalld:
    zone: custom
    state: present
    permanent: true
Run Code Online (Sandbox Code Playgroud)

设置statepresentabsent,并保证zonestate以及permanent在该任务的唯一钥匙。

源代码注释

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


Szt*_*upY 5

不幸的是,firewalld 模块不适合创建新区域。如果firewall-cmd您的主机上可用,那么您可以简单地单独运行它:

- command: firewall-cmd --permanent --new-zone dockerc
Run Code Online (Sandbox Code Playgroud)

设置区域后,您可以正常使用该模块:

- firewalld:
    zone: dockerc
    permanent: true
    source: 172.17.0.0/16
    state: enabled
Run Code Online (Sandbox Code Playgroud)

如果您不能firewall-cmd单独使用该命令,那么您可能不走运,因为检查模块源代码您可以看到它不包含创建新区域的代码。

但是请注意,此模块是 ansible 中的 Curated 模块,这意味着它没有获得完整的 Core 支持。如果您了解 python,那么欢迎您发送拉取请求以使该模块能够创建新区域。