启用tcp_syncookies=1是防御syn flood的基础,但需同步调大tcp_max_syn_backlog、somaxconn并减小tcp_synack_retries,再配合iptables限速才能真正生效。

直接开启 tcp_syncookies=1 是防御 SYN Flood 攻击最基础也最关键的一步,但它不是单独生效的开关——必须配合队列参数和重试策略调整,否则系统压根不会触发 SYN Cookie 机制。
确认并启用 SYN Cookies
先检查当前状态:
- 运行
sysctl net.ipv4.tcp_syncookies,返回 1 表示已启用(多数现代内核默认为 1) - 若为 0,立即临时启用:
sudo sysctl -w net.ipv4.tcp_syncookies=1 - 永久生效:编辑
/etc/sysctl.conf,确保含这一行:net.ipv4.tcp_syncookies = 1
然后执行sudo sysctl -p
必须同步调整的三个关键参数
SYN Cookie 只在半连接队列溢出时才激活。如果队列太小、或全连接队列更小,SYN 包会在触发前就被丢弃。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
扩大半连接队列上限:
net.ipv4.tcp_max_syn_backlog = 4096(中高并发建议设为 8192~32768) -
增大全连接队列上限:
net.core.somaxconn = 65535(同时需确认应用层 listen backlog ≥ 此值) -
缩短 SYN+ACK 重试时间:
net.ipv4.tcp_synack_retries = 2(总等待时间压缩至约 1–3 秒,避免无效连接长期占位)
这些参数同样要写入 /etc/sysctl.conf 并执行 sysctl -p 生效。
验证是否真正起作用
光看参数值不够,得确认内核实际调用了 SYN Cookie:
- 运行
netstat -s | grep -i "syncookies" - 关注 Syncookies sent 计数是否随网络压力上升而增长
- 如果始终为 0,说明流量未触达队列上限,或上游(如负载均衡、防火墙)提前拦截,也可能是应用层 listen backlog 过小导致丢包
搭配 iptables 做前置限速
SYN Cookies 是兜底手段,iptables 是第一道防线:
- 限制每个 IP 每秒新建 SYN 连接数:
iptables -A INPUT -p tcp --syn -m limit --limit 15/sec --limit-burst 30 -j ACCEPTiptables -A INPUT -p tcp --syn -j DROP - 规则必须放在 INPUT 链靠前位置(早于 ESTABLISHED 放行规则)
- 高并发场景建议用
ipset + fail2ban动态封禁,避免recent模块性能瓶颈










