ansible-role-firewall:用 Ansible 配置 Linux 防火墙
ansible-role-firewall:用 Ansible 配置 Linux 防火墙
Linux 服务器的防火墙配置往往重复且容易出错。geerlingguy/ansible-role-firewall 是一个 Ansible Role,用来自动化部署基于 iptables 的防火墙规则。该项目目前在 GitHub 上获得 581 个 Star,由 Jeff Geerling 维护,他也是《Ansible for DevOps》的作者。
这个角色的设计思路偏向简单直接。它在目标主机上安装防火墙规则,开放指定端口,并创建一个可管理的 init 服务,方便后续通过 service firewall start|stop|restart|status 控制状态。

核心能力
ansible-role-firewall 主要覆盖三方面:
- 同时支持 IPv4(iptables)和 IPv6(ip6tables)
- 通过 Ansible 变量声明允许的 TCP/UDP 端口、端口转发、自定义规则
- 提供 init 服务,支持开机自启和手动启停
默认配置比较克制,只开放必要的入站端口。你可以通过 firewall_allowed_tcp_ports 和 firewall_allowed_udp_ports 精确控制哪些端口对外暴露。
角色执行完成后,防火墙规则由模板 firewall.bash.j2 渲染生成,写入 /etc/firewall.bash,并通过 init 脚本加载。这意味着规则是声明式的:你在 playbook 或变量文件里描述期望状态,Ansible 负责生成对应的 iptables/ip6tables 命令。
如果需要更复杂的规则,比如限制特定 IP 访问某个端口,可以使用 firewall_additional_rules 直接写入 iptables 命令。项目文档里给出了具体示例,基本可以直接套用。
配置方式
这个 Role 没有依赖其他 Role,直接引入 playbook 即可使用。典型用法如下:
- hosts: server
vars_files:
- vars/main.yml
roles:
- geerlingguy.firewall
例如,你可以在 vars/main.yml 中声明需要开放的端口:
firewall_allowed_tcp_ports:
- '22'
- '80'
- '443'
firewall_forwarded_tcp_ports:
- { src: '80', dest: '8080' }
常用变量包括:
firewall_state:控制防火墙服务是否启动,默认startedfirewall_enabled_at_boot:是否开机自启,默认truefirewall_flush_rules_and_chains:重启时是否清空所有规则,默认truefirewall_allowed_tcp_ports:允许入站的 TCP 端口列表firewall_allowed_udp_ports:允许入站的 UDP 端口列表firewall_forwarded_tcp_ports:TCP 端口转发映射firewall_disable_firewalld/firewall_disable_ufw:是否禁用系统自带防火墙firewall_enable_ipv6:是否启用 ip6tables,默认true
这些变量都在 defaults/main.yml 中提供默认值,覆盖起来很直接。

适用场景
如果你管理一批 Linux 服务器,并且希望用 Ansible 统一配置防火墙,这个角色是个不错的起点。它不会替你解决所有网络安全问题,但能把端口开放、规则维护这类重复工作自动化。
这个项目尤其适合中小规模的运维团队。你不需要在每台服务器上手动执行 iptables 命令,也不用在部署后单独维护脚本。所有规则都随着 Ansible 的执行保持一致。当服务器扩容或变更端口策略时,只需要修改变量并重新执行 playbook。
对于已经在使用 Docker 或 firewalld/ufw 的环境,需要注意几个变量:firewall_flush_rules_and_chains 可以设为 false,避免清空其他工具管理的规则;firewall_disable_firewalld 和 firewall_disable_ufw 则用来处理系统默认防火墙的冲突。
总结
ansible-role-firewall 是一个轻量、可预测的 Ansible Role,适合需要集中管理 iptables 规则的场景。它的变量设计清晰,文档完整,部署后可以通过 init 服务日常维护。对于熟悉 iptables 的运维人员来说,上手成本很低。
需要说明的是,这个 Role 更适合对 iptables 有一定了解的用户。它不会提供图形界面,也不会自动识别应用所需的端口。你需要明确知道自己要开放哪些服务。如果你需要更高级的防火墙管理,可以在此基础上扩展自定义规则。
。它不会提供图形界面,也不会自动识别应用所需的端口。你需要明确知道自己要开放哪些服务。如果你需要更高级的防火墙管理,可以在此基础上扩展自定义规则。
更多推荐




所有评论(0)