Firewalld 概述
- 定义:Firewalld 是 Linux 系统上的动态防火墙管理工具,作为 iptables/nftables 的前端控制器
- 特点:
- 支持动态更新规则而无需重启服务
- 使用 zones 和 services 的概念简化管理
- 提供 D-Bus 接口支持运行时配置更改
- 默认集成在 RHEL/CentOS 7+ 和 Fedora 中
- 与 iptables 的关系:
- 不是替代关系,Firewalld 使用 iptables/nftables 作为后端
- 提供更高层次的管理抽象
二、核心概念
1. Zones(区域)
- 预定义的网络信任级别
- 默认 zones:
- drop:所有传入连接被丢弃,无回复
- block:所有传入连接被拒绝,返回 icmp-host-prohibited
- public:默认区域,仅接受指定连接
- external:用于外部网络,伪装启用
- dmz:非军事区,有限访问内部网络
- work/home/internal:信任度递增
- trusted:接受所有连接
2. Services(服务)
- 预定义的端口和协议组合(如 http:80/tcp)
- 位于 /usr/lib/firewalld/services/(系统)和 /etc/firewalld/services/(自定义)
3. 运行时与永久配置
- 运行时配置:立即生效,重启后丢失
- 永久配置:写入配置文件,重启后保持
- 使用 --permanent 参数设置永久规则
三、常用命令
1. 基本管理
# 查看状态
systemctl status firewalld
firewall-cmd --state
# 启停服务
systemctl start/stop/restart firewalld
systemctl enable/disable firewalld
2. 区域操作
# 查看默认区域
firewall-cmd --get-default-zone
# 设置默认区域
firewall-cmd --set-default-zone=public
# 查看活动区域
firewall-cmd --get-active-zones
# 查看指定区域配置
firewall-cmd --zone=public --list-all
3. 服务管理
# 添加服务到区域(临时)
firewall-cmd --zone=public --add-service=http
# 永久添加
firewall-cmd --zone=public --add-service=http --permanent
# 移除服务
firewall-cmd --zone=public --remove-service=http
# 重载配置(永久规则生效)
firewall-cmd --reload
4. 端口管理
# 开放端口
firewall-cmd --zone=public --add-port=8080/tcp
# 永久开放
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 端口转发
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
5. 高级功能
# 富规则(Rich Rules)
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.10" accept'
# IP伪装(NAT)
firewall-cmd --zone=external --add-masquerade
# 直接操作iptables(谨慎使用)
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 3306 -j ACCEPT
四、配置文件位置
- 系统默认配置:
- /usr/lib/firewalld/(zones, services等)
- 用户自定义配置:
- /etc/firewalld/
- /etc/firewalld/zones/
- /etc/firewalld/services/
- /etc/firewalld/policies/
- 运行时配置:
- /run/firewalld/
五、最佳实践
- 最小权限原则:只开放必要的端口和服务
- 使用区域隔离:根据网络环境分配不同zone
- 测试规则:先添加临时规则测试,确认无误再设为永久
- 定期审计:使用 firewall-cmd --list-all-zones 检查配置
- 备份配置:定期备份 /etc/firewalld/ 目录
六、故障排查
- 查看拒绝记录:
journalctl -xe | grep -i firewall
- 检查规则是否生效:
firewall-cmd --list-all
iptables -L -n # 查看后端实际规则
- 重置防火墙:
firewall-cmd --reset-to-defaults
- 调试模式:
firewall-cmd --debug
实验相关内容: