Firewalld富规则是实现精细流量控制的核心机制,支持绑定zone、源IP+目的端口+协议组合、日志记录、限速及拒绝策略,并需--permanent持久化与--reload生效。

Firewalld 的富规则(Rich Rules)是实现精细流量控制的核心机制,特别适合需要同时限定源IP和目的端口的场景,比如只允许某台管理机访问数据库的3306端口,或限制某业务服务器仅能调用指定API服务的8080端口。它不依赖iptables语法,语义清晰、可读性强,且支持持久化与热加载。
明确规则目标与作用域
富规则必须绑定到某个zone(区域),默认是public。生产环境建议先确认当前活跃区域和目标区域是否匹配:
- 查看当前活跃区域:
firewall-cmd --get-active-zone - 查看目标zone(如public)完整配置:
firewall-cmd --list-all --zone=public - 若需在其他zone(如internal)中添加规则,所有命令需显式加
--zone=internal
编写基础复合规则:源IP + 目的端口 + 协议
最典型的组合是“仅允许某IP访问某TCP端口”。语法结构固定,关键字段不可省略:
-
source address="X.X.X.X":支持单IP(如192.168.10.5)或CIDR网段(如10.0.0.0/8) -
port port="8080" protocol="tcp":端口可写范围(如8000-8010),协议必须明确为tcp或udp - 动作必须指定:
accept(放行)、reject(拒绝并返回RST/ICMP)、drop(静默丢弃)
示例命令(永久生效):
进阶控制:叠加日志、限速与拒绝策略
单一放行不够时,可组合多个动作增强可观测性与防护强度:
-
记录匹配流量:在
accept或reject前加log prefix="mysql-access" level="info",日志会出现在/var/log/messages -
限制连接速率:在规则末尾加
limit value="5/m"(每分钟最多5次新连接),避免暴力扫描 -
默认拒绝兜底:先放行白名单IP,再添加一条无
source的reject规则,确保未授权IP无法访问该端口
带日志和限速的完整示例:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.5" port port="3306" protocol="tcp" log prefix="db-allow" level="notice" limit value="3/m" accept'验证与维护规则
规则添加后不会立即生效,必须重载;同时需定期检查是否按预期工作:
- 重载使规则生效:
firewall-cmd --reload - 查看当前所有富规则:
firewall-cmd --list-rich-rules --zone=public - 临时测试规则(不持久):去掉
--permanent参数,测试通过后再补加并重载 - 删除某条规则:将
--add-rich-rule换成--remove-rich-rule,内容完全一致


















