首页/安全/安全加固速查/连接数与扫描缓解(connlimit + 畸形包过滤)
防火墙与访问控制50 条

连接数与扫描缓解(connlimit + 畸形包过滤)

connlimit 限制单源并发连接数,削弱端口扫描与暴力枚举;对 Web 服务要按业务实测调整阈值,避免误杀正常并发。

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

connlimit 与畸形包过滤

端口扫描与暴力枚举的共同特征是「单来源短时间大量连接」。connlimit 模块可以对单个来源(或网段)限制并发连接数,超限直接拒绝;再配合丢弃非法 TCP 标志位组合(NULL、XMAS 等畸形包),能挡掉一批低质量扫描器。

基本信息

适用平台Linux(iptables 1.4+,connlimit 与 tcp 扩展)
关键参数--connlimit-above 上限、--connlimit-mask 掩码(32 表示单 IP)
搭配项--syn 只匹配新建连接,避免影响已建立会话
基线单源并发有上限,畸形 TCP 标志位被丢弃

典型使用场景

  • 内部管理端口:限制单源并发,抑制自动化猜解工具的高并发探测
  • 对外 Web 入口的粗筛:拿掉明显的扫描器,减轻后端压力
  • 与其他手段配合:与 fail2ban、云 WAF 分层,各管一段
  • 应急期间临时加固:攻击进行时快速上规则,事后评估是否常态化

规则示例

规则示例
# 丢弃非法标志位组合:全 0 与全 1 都是畸形包,正常握手不会出现
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# 单源到 443 的并发上限 50(只匹配新建连接)
iptables -A INPUT -p tcp --syn --dport 443 -m connlimit --connlimit-above 50 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
# 查看命中计数,判断阈值是否合适
iptables -L INPUT -n -v --line-numbers | head -20

参数读法

参数含义常见取值建议
--connlimit-above超过该数值的并发连接被处理按业务实测峰值上浮,不要凭感觉
--connlimit-mask统计并发时的来源聚合粒度32 表示按单 IP,24 表示按网段
--syn只匹配新建连接请求配合端口限制时必须加,否则误伤长连接
--reject-with拒绝时返回的响应tcp-reset 更快失败;DROP 更隐蔽
NAT 后大量用户共享出口 IP 时,按单 IP 限并发会误伤:面向 C 端的入口更适合用速率限制(recent 或 hashlimit)而不是并发数限制。
阈值必须压测后定:拍脑袋设 20 会让高峰期正常用户被拒,设 5000 又对扫描毫无作用。
规则顺序决定效果:限速与畸形包丢弃要放在通用放行之前,排在末尾的规则永远不会被匹配,配置看起来齐全却毫无作用。

易错点

  • 漏写 --syn:规则同时命中已建立连接,长连接业务被周期性掐断
  • 阈值按单窗口峰值设定:与备份、同步任务冲突时误杀正常流量
  • DROP 与 REJECT 混用无标准:内部排障时难以判断是策略拦截还是网络故障
  • 只加规则不留命中数据:无法判断阈值是否合理,下次变更又从零开始

数据来源与参考

  • iptables-extensions(8):connlimit
  • netfilter 文档:畸形 TCP 标志位过滤

相关工具

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