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_portsfirewall_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:控制防火墙服务是否启动,默认 started
  • firewall_enabled_at_boot:是否开机自启,默认 true
  • firewall_flush_rules_and_chains:重启时是否清空所有规则,默认 true
  • firewall_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 中提供默认值,覆盖起来很直接。

README区域截图

适用场景

如果你管理一批 Linux 服务器,并且希望用 Ansible 统一配置防火墙,这个角色是个不错的起点。它不会替你解决所有网络安全问题,但能把端口开放、规则维护这类重复工作自动化。

这个项目尤其适合中小规模的运维团队。你不需要在每台服务器上手动执行 iptables 命令,也不用在部署后单独维护脚本。所有规则都随着 Ansible 的执行保持一致。当服务器扩容或变更端口策略时,只需要修改变量并重新执行 playbook。

对于已经在使用 Docker 或 firewalld/ufw 的环境,需要注意几个变量:firewall_flush_rules_and_chains 可以设为 false,避免清空其他工具管理的规则;firewall_disable_firewalldfirewall_disable_ufw 则用来处理系统默认防火墙的冲突。

总结

ansible-role-firewall 是一个轻量、可预测的 Ansible Role,适合需要集中管理 iptables 规则的场景。它的变量设计清晰,文档完整,部署后可以通过 init 服务日常维护。对于熟悉 iptables 的运维人员来说,上手成本很低。

需要说明的是,这个 Role 更适合对 iptables 有一定了解的用户。它不会提供图形界面,也不会自动识别应用所需的端口。你需要明确知道自己要开放哪些服务。如果你需要更高级的防火墙管理,可以在此基础上扩展自定义规则。

。它不会提供图形界面,也不会自动识别应用所需的端口。你需要明确知道自己要开放哪些服务。如果你需要更高级的防火墙管理,可以在此基础上扩展自定义规则。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐