防范SYN洪水攻击的关键是启用SYN Cookies(net.ipv4.tcp_syncookies=1)、缩短SYN-RECV超时(tcp_synack_retries=3)、合理设置tcp_max_syn_backlog(2048–8192)与somaxconn(65535),并配合负载均衡层SYN代理及iptables速率限制。

防范SYN洪水攻击,核心是缩短SYN队列生命周期、限制半连接资源占用,并增强内核对异常连接的识别与丢弃能力。单纯调大队列长度反而可能加剧资源耗尽,关键在“快进快出+智能过滤”。
启用SYN Cookies并合理配置触发阈值
SYN Cookies是内核应对SYN泛洪最有效的机制之一,它不依赖内存存储半连接,而是用加密哈希生成初始序列号,避免SYN队列溢出。
-
开启SYN Cookies:
net.ipv4.tcp_syncookies = 1(必须为1,0表示禁用,2为仅在队列满时启用,不推荐) -
设置触发条件:配合
net.ipv4.tcp_max_syn_backlog和net.core.somaxconn使用;当半连接数超过tcp_max_syn_backlog且未启用cookies时,连接会被丢弃;启用cookies后,该限制仍影响新连接入队行为,建议设为2048–8192(视内存和并发量调整) -
注意兼容性:SYN Cookies会禁用部分TCP扩展(如SACK、Timestamps),但现代内核(≥4.4)已支持带时间戳的SYN Cookies(需
net.ipv4.tcp_timestamps = 1且内核编译开启CONFIG_SYN_COOKIES)
收紧半连接队列与超时参数
缩短SYN-RECV状态持续时间,加快无效连接释放,降低攻击窗口。
-
减少SYN超时重试次数:
net.ipv4.tcp_synack_retries = 3(默认5,建议降至3,对应约45秒总等待时间;再低可能误伤高延迟链路) -
缩短SYN-RECV状态存活时间:
net.ipv4.tcp_syn_retries = 3(控制客户端重发SYN次数,非服务端参数;真正影响服务端的是tcp_synack_retries) -
加速TIME-WAIT回收(间接缓解):
net.ipv4.tcp_fin_timeout = 30、net.ipv4.tcp_tw_reuse = 1(仅对客户端有效)、net.ipv4.tcp_tw_recycle已废弃且在NAT环境下危险,切勿启用
限制连接速率与连接队列容量
通过内核参数抑制单IP或全局连接突增,配合iptables可形成分层防护。
-
控制全局限队列大小:
net.core.somaxconn = 65535(应用listen()的backlog上限,需同时调整应用代码中的listen(fd, backlog)参数) -
限制半连接最大数量:
net.ipv4.tcp_max_syn_backlog = 65535(注意:该值不能超过somaxconn,否则被自动截断) -
启用连接数限制(辅助手段):虽然sysctl无直接“每IP连接数”限制,但可结合
net.netfilter.nf_conntrack_max和conntrack模块做全局连接跟踪限制,再用iptables+hashlimit实现源IP速率控制
配套加固建议(非sysctl但关键)
仅调优sysctl不够,需与网络层、应用层协同。
- 在负载均衡层(如Nginx、LVS、云WAF)启用SYN代理或首包检测,将真实SYN终止在边缘
- 确保
net.ipv4.ip_local_port_range足够宽(如1024 65535),避免本地端口耗尽影响健康检查或上游调用 - 关闭不必要的IPv6监听(若业务不用):
net.ipv6.conf.all.disable_ipv6 = 1,减少攻击面 - 定期检查
/proc/net/netstat中SynCookiesSent和SynCookiesRecv计数,确认SYN Cookies实际生效

















