首页/系统/信创系统运维速查/firewalld 富规则 rich rule
安全加固65 条

firewalld 富规则 rich rule

富规则在 zone 层面做细粒度控制:来源地址、端口、协议、日志、限速自由组合,语法接近自然语言,能覆盖多数服务级访问控制需求。

信创系统运维速查系统更新于 2026-10-13

富规则能做什么

富规则(rich rule)在区域层面提供比『放行某服务』更细的控制能力:来源地址、端口、协议、动作(accept/reject/drop)、日志记录与速率限制都能组合进一条规则,语法接近自然语言。它适合表达『只允许这个网段访问这个数据库端口,并记录其余来源的尝试』这类需求,而无需退回到手写 iptables。

基本信息

命令入口firewall-cmd --add-rich-rule='rule ...'
常用要素family=ipv4、source address=、port port=、protocol=、service name=
动作accept、reject、drop
日志log prefix="..." level="warning"
限速limit value="30/m" 或 "5/s"
查看与生效--list-rich-rules、加 --permanent 后 --reload

典型使用场景

  • 数据库端口只对应用服务器网段放行,其余来源拒绝并留日志
  • 按来源分权:运维网段可用 SSH,业务网段只能访问业务端口
  • 对高频访问做限速,缓解误配置或异常扫描带来的冲击
  • 记录被拒绝的来源,便于定位配置遗漏或异常访问
  • 替代粗粒度的服务放行,把访问控制收敛到来源维度

常用富规则

常用富规则
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port port="3306" protocol="tcp" accept' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" service name="ssh" log prefix="ssh-deny " level="warning" reject' --permanent
firewall-cmd --add-rich-rule='rule family="ipv4" service name="http" limit value="30/m" accept' --permanent
firewall-cmd --list-rich-rules                     # 查看当前区域已配置的富规则
firewall-cmd --reload                              # 让永久配置生效

验证与日志排查

验证与日志排查
firewall-cmd --zone=public --list-rich-rules   # 指定区域查看,确认规则落在预期区域
firewall-cmd --permanent --zone=public --list-rich-rules | wc -l   # 清点规则条数
journalctl -k --since '10 min ago' | grep ssh-deny | head          # 按前缀过滤被拒记录
firewall-cmd --remove-rich-rule='rule family="ipv4" service name="http" limit value="30/m" accept' --permanent   # 删除写法与添加一致
firewall-cmd --check-config 2>/dev/null || echo '配置存在问题'      # 部分版本支持配置检查

要素与写法

要素写法示例说明
familyfamily="ipv4"缺省时按规则匹配,建议显式声明
sourcesource address="10.0.0.0/24"支持网段与单地址
portport port="3306" protocol="tcp"与 service 二选一表达
actionaccept / reject / dropreject 会回拒绝报文,drop 直接丢弃
loglog prefix="ssh-deny " level="warning"便于按前缀检索
limitlimit value="30/m"超限流量按规则动作处理
带日志的富规则便于定位被拒来源:日志进入内核日志通道,用 journalctl -k 加 prefix 过滤即可,别在应用日志里找。
删除规则的写法必须与添加时完全一致:规则匹配按字符串比对,顺序或空格不同会删不掉,建议添加时就记录原文。

易错点

  • 规则顺序影响生效结果:先匹配先生效,新增规则前先看 --list-rich-rules 的现状,避免被更靠前的规则挡住
  • limit 的取值写法(30/m、5/s)写错时规则可能不生效且不易察觉,加完必须回查列表确认
  • 删除规则时写法与添加时不完全一致,规则删不掉并越积越多,后续维护难以判断哪条在起作用
  • 把日志规则放在允许规则之后,被允许的流量先命中放行,拒绝记录永远看不到
  • 只加 --permanent 不 reload 就断言规则无效,或只加运行时规则重启后丢失

数据来源与参考

  • firewalld 官方手册(Rich Language)
  • man 5 firewalld.richlanguage
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌