富规则是firewalld的高级过滤机制,支持多条件组合匹配与动作控制,需用--permanent加--reload实现持久化生效。

富规则的基本语法与核心要素
富规则(Rich Rules)是 firewalld 提供的高级过滤能力,支持基于源地址、端口、协议、动作、限速、日志等多条件组合。它的本质是用结构化字符串替代原始 iptables 语句,既保持灵活性,又避免直接操作底层链。
基本格式为:rule family="ipv4" [条件] [动作],其中:
- family:必须指定 ipv4 或 ipv6
- source address 或 destination address:支持单 IP(如 192.168.1.5)、CIDR(如 10.0.0.0/8)、甚至带端口的 IP+端口组合(需配合 port 模块)
- service name:引用预定义服务(如 ssh、http),自动匹配对应端口和协议
- port protocol="tcp" port="8080":手动指定端口,protocol 必须显式声明
- log prefix="xxx":启用日志记录,prefix 是 syslog 中的标识前缀
- limit value="5/m":限制匹配频率,格式为数字/秒(s)、分(m)、时(h)、日(d)
- accept / reject / drop:动作类型,reject 发送拒绝响应,drop 静默丢弃
添加并持久化一条典型富规则
富规则默认只作用于运行时(runtime),不写入磁盘配置。要让规则重启后仍生效,必须同时满足两个条件:加 --permanent 参数 + 执行 --reload。
例如,限制某 IP 对 SSH 的暴力尝试,并记录日志:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" service name="ssh" limit value="5/m" log prefix="ssh-brute-" reject'
然后立即重载:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
sudo firewall-cmd --reload
注意:如果漏掉 --reload,规则虽已存入配置文件(可通过 --permanent --list-rich-rules 查看),但不会真正生效。
验证与调试富规则是否生效
--list-all 显示的是当前 runtime 的完整规则摘要,但它不展开富规则细节,容易误判。正确验证步骤如下:
- 查是否已写入永久配置:
sudo firewall-cmd --permanent --list-rich-rules - 查是否已加载进 runtime:
sudo firewall-cmd --list-rich-rules(无 --permanent) - 确认日志是否触发:检查
/var/log/messages或journalctl -u firewalld | grep ssh-brute - 模拟测试:从目标 IP(如 203.0.113.45)反复 ssh 连接,观察是否被限速或拒绝
常用富规则实战场景
富规则适合处理 iptables 级别的精细控制需求,常见用法包括:
- 仅允许特定子网访问 Web 管理后台:
rule family="ipv4" source address="172.16.0.0/12" port port="8080" protocol="tcp" accept - 拒绝某 IP 段所有入站连接:
rule family="ipv4" source address="198.51.100.0/24" reject - 对 DNS 查询限速防放大攻击:
rule family="ipv4" service name="dns" limit value="10/s" log prefix="dns-flood-" accept - 按 MAC 地址过滤(需内核支持 nf_tables):
rule family="ipv4" source mac="00:11:22:33:44:55" accept
不复杂但容易忽略










