geerlingguy.firewall
Ansible 角色:防火墙 (iptables)
安装一个基于 iptables 的 Linux 防火墙。支持 IPv4 (iptables
) 和 IPv6 (ip6tables
)。
这个防火墙旨在通过简单性而非复杂性,只有为特定端口打开少量入站流量(可以通过 Ansible 变量配置)。如果您对 iptables
和/或防火墙有基本了解,这个角色应该是建立安全系统防火墙的良好起点。
运行角色后,服务器上将可用一个 firewall
初始化服务。您可以使用 service firewall [start|stop|restart|status]
控制防火墙。
要求
无。
角色变量
可用的变量列在下面,以及默认值(请参见 defaults/main.yml
):
firewall_state: started
firewall_enabled_at_boot: true
控制防火墙服务的状态;它是否应该运行 (firewall_state
) 和/或在系统启动时启用 (firewall_enabled_at_boot
)。
firewall_flush_rules_and_chains: true
每次重启防火墙时是否清除所有规则和链。如果有其他进程管理 iptables(例如 Docker),请将此设置为 false
。
firewall_template: firewall.bash.j2
生成防火墙规则时使用的模板。
firewall_allowed_tcp_ports:
- "22"
- "80"
...
firewall_allowed_udp_ports: []
要开放的 TCP 或 UDP 端口(分别)列表,用于入站流量。
firewall_forwarded_tcp_ports:
- { src: "22", dest: "2222" }
- { src: "80", dest: "8080" }
firewall_forwarded_udp_ports: []
将 src
端口转发到 dest
端口,可以是 TCP 或 UDP(分别)。
firewall_additional_rules: []
firewall_ip6_additional_rules: []
要添加到防火墙的任何额外(自定义)规则(格式与通过命令行添加相同,例如 iptables [rule]
/ip6tables [rule]
)。以下是如何使用的几个示例:
# 只允许 IP 167.89.89.18 访问端口 4949(Munin)。
firewall_additional_rules:
- "iptables -A INPUT -p tcp --dport 4949 -s 167.89.89.18 -j ACCEPT"
# 只允许 IP 214.192.48.21 访问端口 3306(MySQL)。
firewall_additional_rules:
- "iptables -A INPUT -p tcp --dport 3306 -s 214.192.48.21 -j ACCEPT"
请参见 Iptables Essentials: Common Firewall Rules and Commands 获取更多示例。
firewall_log_dropped_packets: true
是否将丢弃的包记录到 syslog(消息将以 "Dropped by firewall: " 为前缀)。
firewall_disable_firewalld: false
firewall_disable_ufw: false
将此设置为 true
以分别禁用 firewalld(在 RHEL/CentOS 上默认安装)或 ufw(在 Ubuntu 上默认安装)。
firewall_enable_ipv6: true
将其设置为 false
以禁用 ip6tables 的配置(例如,如果您的 GRUB_CMDLINE_LINUX
包含 ipv6.disable=1
)。
依赖
无。
示例 Playbook
- hosts: server
vars_files:
- vars/main.yml
roles:
- { role: geerlingguy.firewall }
在 vars/main.yml
中:
firewall_allowed_tcp_ports:
- "22"
- "25"
- "80"
许可证
MIT / BSD
作者信息
这个角色由 Jeff Geerling 于 2014 年创建,他是 Ansible for DevOps 的作者。
Simple iptables firewall for most Unix-like systems.
ansible-galaxy install geerlingguy.firewall