linux防syn泛洪需内核参数与iptables协同:必须开启tcp_syncookies(编码syn+ack序列号,零内存开销),调大tcp_max_syn_backlog(建议4096+)和somaxconn(需匹配应用backlog),设tcp_synack_retries为2或0,并用iptables按源ip限速(如3/sec)和并发数(如--connlimit-above 30)过滤。

Linux 防 SYN 泛洪,不能只靠 iptables 写一条 -j DROP 规则。真正有效的防护是内核参数调优 + iptables 前置限速协同配合,核心目标不是“拦所有 SYN”,而是让服务器不因伪造请求耗尽资源,同时不影响真实连接建立。
必须开启的内核防护:tcp_syncookies
这是最关键的保命机制。它在半连接队列满时,不分配内存存状态,而是把客户端信息编码进 SYN+ACK 的序列号里;等收到合法 ACK 时再解码验证建连——零内存开销,抗压能力强。
- 临时启用:echo 1 > /proc/sys/net/ipv4/tcp_syncookies
- 永久生效:在 /etc/sysctl.conf 中添加 net.ipv4.tcp_syncookies = 1,然后运行 sysctl -p
- 注意:启用后会禁用 SACK 等部分 TCP 扩展,但对 HTTP、HTTPS、API 等服务无实际影响,建议默认开启
调大并匹配关键队列长度
光有 syncookies 不够,得给系统留出缓冲余量,避免刚起步就被打满。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- net.ipv4.tcp_max_syn_backlog:半连接队列大小,默认常为 1024,建议设为 4096(中小流量)或 32768(高并发)
- net.core.somaxconn:全连接队列上限,默认常为 128,需同步调高至 8192 或更高
- 应用层也要匹配:Nginx 要写 listen 80 backlog=8192;Java 服务需设置 ServerSocket 的 backlog 参数
加快无效连接释放节奏
减少重传等待时间,让伪造连接更快退出,腾出队列空间。
- net.ipv4.tcp_synack_retries:SYN+ACK 重发次数,默认 5 次(等待超 30 秒),建议设为 2 或 0(设为 0 时必须确保 tcp_syncookies=1)
- 别动 tcp_syn_retries:这是客户端参数,服务器上修改无效
iptables 实战限速规则(放行前过滤)
规则要加在 INPUT 链靠前位置,并确保 nf_conntrack 模块已加载(lsmod | grep nf_conntrack)。
- 按速率限制新 SYN(防突发):
iptables -A INPUT -p tcp --syn -m hashlimit --hashlimit-name syn_flood --hashlimit-mode srcip --hashlimit 3/sec --hashlimit-burst 10 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP - 按并发数限制单 IP 半连接(防慢速攻击):
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 30 -j DROP - 注意:这两类规则必须放在允许 ESTABLISHED/RELATED 连接的规则之前,否则会被跳过










