直接用iptables的connlimit和limit模块即可实现单ip并发连接数与新建连接速率限制,无需额外安装软件;connlimit按源ip统计established/syn_recv连接并拦截超限请求,limit模块则通过令牌桶机制控制new状态连接频率,二者配合可有效防御扫描、cc攻击与短连接泛滥,同时避免误伤正常用户。

直接用 iptables 的 connlimit 和 limit 模块就能实现,不需要额外装软件,Linux 内核自带支持。关键不是“能不能做”,而是怎么设得既防攻击又不误伤正常用户。
限制单个 IP 的并发连接数
适用于防止暴力扫描、CC 连接耗尽、爬虫建大量短连接等场景。核心是用 connlimit 模块按源 IP 统计并拦截超限连接:
- 限制每个 IP 对 Web 端口(80/443)最多 20 个并发连接:
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP - 限制 SSH 登录最多 3 个并发连接,超出即拒绝:
iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT - 若需按网段限制(比如封禁整个 /24 段的总连接数),加
--connlimit-mask 24参数
限制单个 IP 的请求速率
针对高频短连接攻击(如每秒几十次 curl 请求),用 limit 模块控制新建连接频率:
- 允许每个 IP 每秒最多新建 10 个 HTTP 连接,突发允许 20 个:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 10/second --limit-burst 20 -j ACCEPT
后面再跟一条-j DROP拒绝其余新建连接 - 对 ICMP(ping)限速,防止 ping 洪水:
iptables -I INPUT -p icmp -m limit --limit 5/minute -j ACCEPT -
--limit-burst是初始信用额度,用完才开始限速;设太小会导致合法用户偶尔被挡,建议从 15–30 起调
配合 ReHLDS 或游戏服务器的专用限制
如果是 CS 1.6/HL 等基于 ReHLDS 的服务端,光靠 iptables 不够,还需在服务端 cfg 中协同控制:
- 限制同一 IP 最多 3 个客户端连接:
sv_rehlds_maxclients_from_single_ip "3" - 限制更新率与带宽,间接压制高频发包:
sv_maxupdaterate "60"sv_maxrate "25000" - 开启数据包过滤:
sv_filterban "1",配合filter.cfg黑名单文件生效
注意事项与避坑点
规则写错容易把自己锁在外面,上线前务必验证:
- 所有限速规则必须放在
ACCEPT规则之前,否则会被提前放行而失效 - 不要对已建立连接(
--state ESTABLISHED)做限速或限连,只管NEW状态 - 测试时先用
LOG目标代替DROP,查日志确认匹配是否合理:iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 15 -j LOG --log-prefix "CONN-EXCEED: " - 规则持久化:保存后记得运行
iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)或对应系统命令,避免重启丢失











