firewalld富规则是实现精细化访问控制的关键能力,支持源IP限制、端口转发、日志审计、协议组合判断等复杂场景,语法以rule开头,含family、source、service/port、log、action等要素,按添加顺序匹配且需--permanent持久化并reload生效。

firewalld 的富规则(Rich Rules)是实现精细化访问控制的关键能力,适用于源IP限制、端口转发、日志审计、协议组合判断等无法用基础服务或端口配置覆盖的场景。它不是替代简单规则的工具,而是补足复杂策略缺口的“精准开关”。
富规则语法结构与核心要素
富规则本质是一条带条件判断的策略语句,由匹配条件和动作两部分组成。基本结构如下:
- rule:必须以 rule 开头,表示一条富规则
- family="ipv4":明确作用于 IPv4(推荐显式指定,避免 IPv6 意外匹配)
- source address="192.168.1.100" 或 source address="192.168.1.0/24":限定来源 IP 或网段,支持 invert="True" 取反
- service name="ssh" 或 port port="22" protocol="tcp":指定服务名(推荐用预定义 service)或具体端口+协议
- log prefix="ssh-block" level="info" limit value="2/m":可选日志模块,带限速防刷
- accept | reject | drop:最终动作;reject 返回拒绝响应,drop 静默丢弃,accept 放行
典型实战配置示例
以下命令均需加 --permanent 实现持久化,并执行 firewall-cmd --reload 生效:
- 仅允许内网 10.0.2.0/24 访问 Web 服务,其余全部拒绝:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.2.0/24" service name="http" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="http" reject' - 拦截特定恶意 IP 的 SSH 尝试并记录审计日志:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" service name="ssh" audit limit value="1/m" reject' - 将公网 8443 端口流量转发至内部服务器 192.168.10.50 的 443 端口:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" forward-port port="8443" protocol="tcp" to-port="443" to-addr="192.168.10.50"'
区域绑定与优先级注意事项
富规则默认作用于当前默认 zone(如 public),但强烈建议显式指定 zone,避免误配:
- 将规则添加到 external 区域:
firewall-cmd --zone=external --permanent --add-rich-rule='...' - 规则按添加顺序从上到下匹配,**先匹配的规则优先生效**;冲突时,更具体的规则(如带 source address)应放在更宽泛的规则(如无 source)之前
- 若已设置 --set-target=DROP,则后续 accept 规则必须显式插入在 DROP 前,否则无效
验证与排错关键步骤
配置后务必验证,避免“以为生效实则未加载”:
- 查看某区域所有富规则:
firewall-cmd --zone=public --list-rich-rules - 查看完整区域配置(含服务、端口、富规则):
firewall-cmd --zone=public --list-all - 检查运行时是否加载成功(不依赖 --permanent):
firewall-cmd --direct --get-all-rules(仅用于调试,非富规则主路径) - 临时测试规则可用 --timeout=300 参数(单位秒),5 分钟后自动失效,适合灰度验证


















