高并发服务器抗ddos能力关键在于内核级连接控制:需调大syn半连接队列至65535、设tcp_synack_retries=3、启用tcp_syncookies=1,禁用tcp_tw_recycle但可开tcp_tw_reuse,严控缓冲区上限防oom,并务必执行sysctl -p生效配置。

高并发服务器抗DDoS能力不靠“堆资源”,而靠内核对连接生命周期的精准控制。关键不是让所有包都进来,而是让合法连接快速建立、异常连接尽早丢弃、队列不卡死、内存不被耗尽。
先稳住三次握手入口:SYN半连接队列必须够大
默认 tcp_max_syn_backlog 和 somaxconn 多为 1024 或更低,攻击流量一来,SYN 包还没进队列就被静默丢弃,tcp_syncookies=1 根本没机会触发——它只在队列真正溢出时才启用。生产环境建议统一设为 65535,确保半连接有缓冲空间。
- 确认当前值:
sysctl net.ipv4.tcp_max_syn_backlog net.core.somaxconn - 缩短响应超时:
net.ipv4.tcp_synack_retries = 3(默认 5),加快释放无效 SYN-RECV 状态 - tcp_syncookies=1 即可;设为 2 会绕过队列检查,掩盖真实压力,不利于定位瓶颈
别碰 tcp_tw_recycle,但可安全启用 tcp_tw_reuse
tcp_tw_recycle 已从主流内核移除,旧版本启用后在 NAT、负载均衡或任何多客户端共用源 IP 的场景下,会导致客户端发了 SYN、服务端不回 SYN-ACK,现象是连接随机失败。它依赖 tcp_timestamps,与现实网络拓扑严重冲突。
-
tcp_tw_reuse = 1可开,但仅对主动发起连接的客户端生效(如服务端调第三方 API),监听型服务不受影响 - 想加速 TIME-WAIT 回收,优先调低
net.ipv4.tcp_fin_timeout = 30,比强开回收更可控 - 监控
/proc/net/sockstat中 tw 数量,持续高于 2 万说明应用层需优化(比如加连接池、关长连接)
守住内存与缓冲区底线,避免参数越大越危险
盲目调大缓冲区或端口范围,可能直接触发 OOM killer 杀进程,或放大攻击效果。
-
net.ipv4.tcp_rmem和net.ipv4.tcp_wmem的 max 值,别超过物理内存的 10% -
net.ipv4.ip_local_port_range可扩至 1024 65535,但最小值不能低于 1024,否则与常用服务端口冲突 -
net.ipv4.icmp_echo_ignore_all = 0(保持 ping 可用),改用限速:net.ipv4.icmp_ratelimit = 100防 ICMP Flood -
net.ipv4.conf.all.rp_filter = 1可启用,但要求路由对称;非网关机器建议逐接口设置,避免误拦
配套必须做:加载生效 + 持久化 + 监控验证
改 /etc/sysctl.conf 不等于生效——Linux 启动后只读一次该文件。不执行 sysctl -p 或未正确加载配置目录,所有参数只是文本。
- 立即生效:
sysctl -p或sysctl -w net.ipv4.tcp_max_syn_backlog=65535 - 确认已载入:
sysctl -a | grep "tcp_max_syn_backlog" - 攻击初期看
netstat -s | grep "listen overflow"和dmesg | grep "SYN flooding",判断是否真起作用










