Firewalld富规则通过limit参数实现速率限制,须配合accept/reject动作、使用--permanent持久化并firewall-cmd --reload重载生效;限速控制规则匹配频次,常与log和reject组合用于防暴力破解等场景。

在 Firewalld 中用富规则(Rich Rules)实现速率限制,核心是利用 limit 参数控制单位时间内的匹配次数,常用于防暴力扫描、限流访问等场景。它必须配合具体动作(如 accept 或 reject)使用,且需持久化并重载才生效。
明确作用域:先确认 zone 和规则位置
富规则绑定在某个 zone 上,默认是 public。操作前务必确认目标区域:
- 查看当前活跃 zone:
firewall-cmd --get-active-zones - 查看指定 zone 的完整配置(含已添加的富规则):
firewall-cmd --list-all --zone=public - 若规则要加在其他 zone(如
internal),所有命令都要显式加--zone=internal
编写带限速的富规则语法
限速通过 limit value="N/U" 实现,其中 N 是数值,U 是单位(s 秒、m 分、h 小时、d 天)。该参数必须写在动作(accept/reject)之前。
- 限制某 IP 每分钟最多建立 5 次 SSH 连接:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.45" service name="ssh" limit value="5/m" accept' - 拒绝来自某网段的 HTTP 请求,并限制日志记录频率为每小时最多 10 条:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" service name="http" log prefix="http-block" level="warning" limit value="10/h" reject' - 注意:
limit控制的是“该规则被匹配的频次”,不是连接并发数或带宽
持久化与生效关键步骤
富规则默认只存在于运行时内存中,不写入磁盘配置。漏掉任一环节都会导致重启后失效或规则不生效:
- 所有添加命令必须带
--permanent,否则重启即丢 - 执行
--permanent后,必须运行firewall-cmd --reload才能加载到运行时 - 验证是否写入永久配置:
firewall-cmd --permanent --list-rich-rules - 验证是否已在运行时生效:
firewall-cmd --list-rich-rules(不加--permanent)
搭配日志和动作提升实用性
单独限速意义有限,通常与日志、拒绝动作组合使用,便于监控和阻断:
- 加
log可记录触发限速的事件,日志出现在/var/log/messages;prefix和level帮助分类识别 - 用
reject而非drop,能让客户端快速感知失败,避免超时等待 - 典型防护组合示例(防 SSH 暴力破解):
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.5.100" service name="ssh" log prefix="ssh-brute" level="notice" limit value="3/m" reject'











