首页/安全/安全加固速查/firewalld 富规则(源限定与限速)
防火墙与访问控制50 条

firewalld 富规则(源限定与限速)

富规则支持源地址、端口、协议、日志、限速的组合表达;SSH 与数据库端口的“限定来源”放行应使用富规则。

安全加固速查安全更新于 2026-10-13

需要限源和限速就用富规则

普通放行只有“服务”或“端口”两个维度,无法表达“仅允许某个网段访问”。富规则(rich rule)能组合源地址、目的端口、协议、日志、限速等条件,是 SSH、数据库、管理接口这类敏感服务的标准写法:放行只对指定来源生效,其余一律被区域兜底策略拦掉。写富规则前必须知道一条关键规则:同一区域内富规则的求值顺序是 log、deny、allow,与书写顺序无关。

基本信息

加固项敏感服务的来源限定
适用平台Linux(firewalld,富规则自 0.3.9 起可用)
权限要求root 或已授权的 polkit 用户
达标判据SSH 与数据库等端口仅对指定网段可达
功能范围源地址、端口、协议、日志、限速、转发等组合

典型使用场景

  • 管理端口只允许运维网段访问
  • 数据库只允许应用服务器网段访问
  • 对暴露服务加日志与限速,观察异常扫描
  • 临时放行并设定明确来源范围,避免全域敞开
  • 按来源地址划分不同信任级别的访问策略

源网段放行

源网段放行
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.0.0/16" port port="22" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.30.0/24" port port="3306" protocol="tcp" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.20.30.0/24" port port="22" protocol="tcp" limit value="4/m" accept'
firewall-cmd --reload              # 使规则生效
firewall-cmd --list-rich-rules      # 复核已写入的富规则

带日志的规则与回收

带日志的规则与回收
# 记录被拒绝的访问,便于观察扫描与误配
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="22" protocol="tcp" log prefix="SSH-DENY " level="info" drop'
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="10.20.0.0/16" port port="22" protocol="tcp" accept'
firewall-cmd --reload && firewall-cmd --list-rich-rules    # 回收后复核

动作与顺序

动作或规则含义注意点
accept放行通常配合 source 限定使用
drop静默丢弃对外暴露面推荐,减少信息泄露
reject回绝并返回错误便于对端快速感知,语义更明确
log记录日志与 drop 或 reject 组合使用
limit value="4/m"限速,每分钟 4 次缓解扫描与暴力尝试
求值顺序log 优先、其后 deny、最后 allow与书写顺序无关,写错会互相抵消
最容易被误解的一点是同区域内 deny 与 allow 的求值顺序:写一条针对 0.0.0.0/0 的 drop 会连想你放行的 accept 一起拒掉,与规则书写顺序无关。限源场景应当用区域目标策略兜底,或者只对足够小的地址范围写 deny,并在写完后用一次真实连接验证预期行为。
富规则写完后必须 reload 才生效,--permanent 只表示“下次加载时生效”,这是 firewalld 使用中最常见的返工点。复核时用 --list-rich-rules 确认内容与预期一致,再从其他网段实测是否真的被拒,两侧都对上才算完成。

易错点

  • 忘记 reload:--permanent 只是写入配置,规则并未立即生效
  • 同区域内写 0.0.0.0/0 的 drop 后放行规则被一并拒掉,理解求值顺序才能避免自锁
  • reject 与 drop 语义混用:对外暴露面用 reject 会让扫描器快速确认端口存在
  • 只看富规则列表不看实测:规则写对了但来源地址写错,业务照样不通

数据来源与参考

  • firewalld 官方文档:Rich Language 与规则求值顺序
  • CIS Linux Benchmark:限制 SSH 来源

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌