#028 · 2025-01-10✓ PASS
Firewalld 防火墙
RHEL9 环境下 Firewalld 防火墙的完整配置指南,涵盖 Zone、Service、Port 管理、Panic 模式及富规则。
Firewalld 是 RHEL9 默认的动态防火墙,基于 Zone 和 Service 简化流量管理,底层使用 nftables。
一、Firewalld 概述
Firewalld 是一个动态可定制的防火墙守护进程,修改规则无需重启服务。它使用 Zone(区域) 和 Service(服务) 的概念:
- Zone:预定义的规则集,网络接口可以分配到不同 Zone
- Service:预定义规则,覆盖特定服务所需的端口和协议
# 查看当前后端
grep FirewallBackend /etc/firewalld/firewalld.conf
# FirewallBackend=nftables (默认)
二、Zone 区域管理
预定义区域
| 区域 | 说明 |
|---|---|
block | 拒绝所有入站连接,返回 ICMP 拒绝消息 |
dmz | 非军事区,有限访问内部网络 |
drop | 丢弃所有入站数据包,无任何通知 |
external | 外部网络,用于路由器,启用伪装 |
home | 家庭网络,信任其他计算机 |
internal | 内部网络,主要信任其他计算机 |
public | 公共区域(默认),不信任其他计算机 |
trusted | 信任区,接受所有网络连接 |
work | 工作区域,基本信任其他计算机 |
区域操作
# 查看所有区域
firewall-cmd --get-zones
# 查看默认区域
firewall-cmd --get-default-zone
# 查看当前区域所有设置
firewall-cmd --list-all
# 查看指定区域
firewall-cmd --list-all --zone=home
# 修改默认区域
firewall-cmd --set-default-zone=dmz
# 创建自定义区域
firewall-cmd --new-zone=testzone --permanent
firewall-cmd --reload
三、Service 服务管理
服务是端口、协议、目标地址的集合,添加服务可自动打开所需端口。
# 查看所有预定义服务
firewall-cmd --get-services
# 查看当前区域允许的服务
firewall-cmd --list-services
# 添加服务
firewall-cmd --add-service=http
firewall-cmd --add-service=https --permanent
# 移除服务
firewall-cmd --remove-service=ftp
# 使运行时设置永久生效
firewall-cmd --runtime-to-permanent
# 重新加载
firewall-cmd --reload
自定义服务
# 创建新服务
firewall-cmd --new-service=myapp --permanent
# 编辑服务配置文件
vim /etc/firewalld/services/myapp.xml
服务 XML 示例:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>MyApp</short>
<description>Custom Application Service</description>
<port protocol="tcp" port="8080"/>
<port protocol="udp" port="8081"/>
</service>
四、Port 端口管理
# 查看已开放端口
firewall-cmd --list-ports
# 开放端口
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=3306/tcp --permanent
# 开放端口范围
firewall-cmd --add-port=8000-8100/tcp
# 关闭端口
firewall-cmd --remove-port=8080/tcp
五、紧急 Panic 模式
在遭受攻击时,立即切断所有网络流量:
# 启用紧急模式(所有网络流量停止)
firewall-cmd --panic-on
# 关闭紧急模式(恢复永久设置)
firewall-cmd --panic-off
# 查看紧急模式状态
firewall-cmd --query-panic
警告:启用 Panic 模式后只能通过物理访问或串行控制台恢复!
六、Rich Rules 富规则
富规则提供更精细的流量控制:
# 允许特定 IP 访问特定端口
firewall-cmd --add-rich-rule='
rule family="ipv4"
source address="192.168.1.100"
port protocol="tcp" port="22" accept'
# 限制连接速率
firewall-cmd --add-rich-rule='
rule family="ipv4"
service name="ssh"
limit value="5/m"
accept'
# 记录并丢弃
firewall-cmd --add-rich-rule='
rule family="ipv4"
source address="10.0.0.0/8"
log prefix="DROP_NET: " level="info"
drop'
七、端口转发与伪装
# 启用伪装(NAT)
firewall-cmd --add-masquerade --permanent
# 端口转发:外部 8080 → 内部 80
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80
# 转发到其他主机
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.10
八、服务控制命令
# 启动/停止/重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld
# 开机自启
systemctl enable firewalld
systemctl disable firewalld
# 屏蔽服务(禁止启动)
systemctl mask firewalld
systemctl unmask firewalld
# 查看状态
systemctl status firewalld
firewall-cmd --state
九、最佳实践
- 最小权限原则:只开放必需的服务和端口
- 定期审计:
firewall-cmd --list-all检查当前规则 - 配置持久化:修改后执行
--runtime-to-permanent或使用--permanent - SELinux 配合:防火墙与 SELinux 双重防护,
setenforce 1 - 默认 Zone:生产环境建议使用
public或dmz