firewalld通过富规则(rich rule)配合limit模块限制端口并发访问速率,核心是控制单位时间内新连接数,如http限60/m、ssh限5/m,并支持白名单豁免、日志记录与短时突发允许。

Linux 系统中用 firewalld 限制特定端口的并发访问速率,核心是使用 富规则(rich rule)配合 limit 模块,不能只靠开放端口或服务。firewalld 本身不直接提供“并发连接数”控制(如 connlimit),但可通过 limit 实现每秒/每分钟的新连接速率限制,这对缓解 CC 攻击、扫描泛滥非常有效。
明确限速目标与适用场景
限速不是限制已建立连接的数量,而是控制单位时间内允许发起的新连接请求次数。例如:
-
HTTP/HTTPS(80/443):防网页层 CC,建议设为
60/m或叠加突发10/s -
SSH(22):防暴力破解,建议严格设为
5/m并启用日志 - 数据库端口(如 3306):原则上不应对外暴露;若必须,仅对可信网段限速开放
配置每 IP 每分钟连接上限
以限制公网访问 HTTP 端口为例,执行以下命令:
- 添加带限速的富规则(永久生效):
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="80" protocol="tcp" limit value="60/m" accept' - 同样配置 HTTPS:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="443" protocol="tcp" limit value="60/m" accept' - 重载使规则生效:
sudo firewall-cmd --reload
增强防护:叠加短时突发 + 日志记录
单纯限速可能影响正常用户瞬间刷新,可加 limit value="10/s" 允许短时爆发,并用 log 记录触发行为便于溯源:
- SSH 严控示例(含日志前缀):
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" service name="ssh" limit value="5/m" log prefix="ssh-rate-" accept' - 查看是否写入永久配置:
sudo firewall-cmd --permanent --list-rich-rules - 确认运行时已加载:
sudo firewall-cmd --list-rich-rules - 查日志验证是否触发:
sudo journalctl -u firewalld | grep "ssh-rate"
区分来源网络,避免误伤正常流量
对内网管理段或 CDN 回源 IP,应排除限速;否则会把健康请求一起压住:
- 为可信网段(如
192.168.10.0/24)单独放行且不限速:sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port="80" protocol="tcp" accept' - 该规则优先级高于泛限速规则(firewalld 按添加顺序匹配,先匹配到即停止)
- 务必保证这类白名单规则在限速规则之前添加,或用
--remove-rich-rule清理冲突后重加











