设为1是最有效的应对方式——全连接队列溢出时内核立即发RST而非丢弃ACK,快速中断恶意半开连接;需结合netstat/ss检查overflow计数、Recv-Q积压及tcpdump分析SYN来源,并配合调高somaxconn、应用层backlog和iptables限流协同防御。

直接设为 1 是最有效的应对方式——当全连接队列真的被恶意连接填满时,内核会立即向客户端发送 RST 包,而不是沉默丢弃 ACK。这能快速中断攻击者维持的半开连接,避免它们在队列里长期占位、拖慢正常请求响应。
确认是否真是攻击导致溢出
先别急着调参,得验证是不是真有异常流量:
- 运行
netstat -s | grep -i "listen.*overflow"或ss -s | grep -i overflow,看“listen overflows”计数是否在短时间内陡增 - 用
ss -lnt查监听端口的 Recv-Q(当前排队数)和 Send-Q(队列上限),比如显示LISTEN 128 128 *:8080就说明队列已满且持续积压 - 结合
tcpdump -i any port 8080 and 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'观察 SYN 包来源是否高度集中(如单一 IP 或小段 IP 频繁建连)
启用 tcp_abort_on_overflow 并配合限流
仅设为 1 不够,要让它真正起效并减少误伤:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 临时启用:
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow - 永久生效:在
/etc/sysctl.conf中添加net.ipv4.tcp_abort_on_overflow = 1,再执行sysctl -p - 同步收紧连接速率:用
iptables或nftables对单 IP 做连接频率限制,例如每秒最多新建 5 个连接,超出即 DROP - 注意:此参数只影响全连接队列溢出行为,对半连接队列(SYN Flood)无效,后者需靠
tcp_syncookies=1和tcp_max_syn_backlog防御
扩大队列容量防误杀正常请求
攻击期间不能只堵不疏,否则合法用户也会被 RST:
- 调高系统级上限:
sysctl -w net.core.somaxconn=4096(默认常为 128) - 检查应用层 backlog 设置,如 Nginx 的
listen ... backlog=4096,Java 应用的 Tomcataccept-count参数,确保不低于 somaxconn - 若服务使用了 systemd socket 激活,还需在
.socket文件中设置AcceptQueueMax=4096
监控与告警建议
把防御变成可持续动作:
- 将
/proc/net/snmp中 TCP 协议段的 “ListenOverflows” 和 “ListenDrops” 字段纳入监控(Prometheus + node_exporter 可直接采集) - 当 ListenOverflows 每分钟增长 > 10 次,或 Recv-Q 持续 ≥ Send-Q 的 90%,触发告警
- 保留最近 24 小时的
ss -lnt快照日志,便于回溯攻击波峰时刻的队列状态

















