可直接用iptables的connlimit模块限制单IP并发连接数,如iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j REJECT,通过--syn匹配新建连接、--connlimit-above设定阈值、-j REJECT返回RST实现精准控制。

可以直接用 iptables 的 connlimit 模块实现,核心是匹配新连接(SYN 包)并按源 IP 统计并发数,超限时拒绝。
基础命令:限制单个IP对某端口的最大并发连接数
例如限制每个 IP 对 Web 服务(80 端口)最多 5 个并发 TCP 连接:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j REJECT- --syn 确保只匹配新建连接请求,避免误判已建立的长连接
- --connlimit-above 5 表示当前该 IP 已有 >5 个连接时,新 SYN 包被拦截
- -j REJECT 比 DROP 更友好,会返回 RST 包,客户端能快速感知失败
按网段聚合限制(如整个C类子网)
若需限制一个子网(如 192.168.31.0/24)所有 IP 的总并发数不超过 20:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT- --connlimit-mask 24 表示将源 IP 按 /24 掩码归组,统计的是该网段整体连接数
- 掩码值可设为 0(全网)、16(B类)、24(C类)、32(单IP,默认值)
精准控制:区分源/目的地址方向
默认 connlimit 统计的是源 IP 的连接数。如需限制“同一 IP 连向不同后端端口”的总量,可用:
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-saddr -j REJECT- --connlimit-saddr 明确以源地址为统计维度(通常可省略,因默认即如此)
- --connlimit-daddr 可改为按目标地址统计,适用于多虚拟主机或反向代理场景
注意事项与实用建议
- 规则必须加在 INPUT 链,且建议放在状态检查(如 -m state --state NEW)之后、其他业务规则之前
- 执行后立即生效,但重启会丢失;Debian/Ubuntu 保存为 iptables-save > /etc/iptables/rules.v4,CentOS 用 service iptables save 或 iptables-save > /etc/sysconfig/iptables
- 测试时可用 ab 或 curl 并发请求验证,观察是否在阈值附近被拒绝
- 避免设得过低(如 ≤3),否则可能影响正常浏览器多标签访问或 CDN 回源

















