如何通过Ansible firewalld模块为http服务添加88/tcp端口?
解决方法
你的手动命令是将88/tcp端口添加到http服务的端口列表中,而不是单纯开放88端口——这和你用Ansible firewalld模块的port参数直接开放端口是两回事。由于firewalld模块没有直接对应--service=http --add-port的配置参数,你可以用以下两种方式实现需求:
方式1:直接执行firewall-cmd命令(完全匹配手动操作)
这种方式最直接,和你手动运行的命令逻辑完全一致:
- name: 将88/tcp添加到http服务的永久端口列表 command: firewall-cmd --permanent --service=http --add-port 88/tcp register: add_port_result changed_when: "'success' in add_port_result.stdout" failed_when: add_port_result.rc != 0 and 'ALREADY_ENABLED' not in add_port_result.stderr - name: 重新加载firewalld使配置生效 command: firewall-cmd --reload when: add_port_result.changed
这里通过changed_when和failed_when来避免重复执行时的错误和不必要的变更标记。
方式2:使用firewalld富规则实现等价效果
如果你想完全用firewalld模块而不调用命令,可以通过富规则来实现允许88/tcp端口(效果和将端口添加到http服务后开放http服务一致):
- name: 允许88/tcp端口并关联http服务规则 firewalld: rich_rule: 'rule family="ipv4" port port="88" protocol="tcp" accept' state: enabled immediate: true permanent: true
如果原本已经开放了http服务,这个规则会额外允许88端口的请求,和你手动添加端口到http服务的效果等价。
补充说明
如果你需要确保http服务本身是开放的,可以额外添加一个task:
- name: 确保http服务在防火墙中开放 firewalld: service: http state: enabled immediate: true permanent: true
内容的提问来源于stack exchange,提问作者Trifo
相关产品推荐
相关产品推荐

