启用tcp_syncookies=1可开启syn cookie防御,但需同步调大tcp_max_syn_backlog和somaxconn、减小tcp_synack_retries,否则不会触发;通过netstat -s确认syncookies sent计数增长才能验证生效。

直接启用 tcp_syncookies=1 就能开启 SYN Cookie 防御,但必须配合队列容量和重试参数调整,否则它可能压根不会被触发。
确认当前状态并临时启用
运行以下命令查看是否已启用:
sysctl net.ipv4.tcp_syncookies
返回 1 表示已启用(现代内核默认值);若为 0,立即启用:
sudo sysctl -w net.ipv4.tcp_syncookies=1
写入配置文件实现永久生效
编辑 /etc/sysctl.conf,添加或修改这一行:
net.ipv4.tcp_syncookies = 1
保存后执行:
sudo sysctl -p
再运行 sysctl net.ipv4.tcp_syncookies 确认输出为 1。
关键配套设置(否则 SYN Cookie 不起作用)
SYN Cookie 只在半连接队列溢出时才激活。如果队列太小、或全连接队列(somaxconn)更小,连接会提前被丢弃,根本等不到 Cookie 触发:
- 增大半连接队列:net.ipv4.tcp_max_syn_backlog = 4096(至少不小于 somaxconn)
- 增大全连接队列:net.core.somaxconn = 65535
- 缩短重试时间,加速释放无效状态:net.ipv4.tcp_synack_retries = 2
这些参数同样需写入 /etc/sysctl.conf 并执行 sysctl -p 生效。
验证是否真正在工作
仅看参数值不够,要确认系统实际调用了 SYN Cookie:
netstat -s | grep -i "syncookies"
观察 Syncookies sent 计数是否随压力上升而增长。如果始终为 0,说明流量未触达队列上限,或上游(如负载均衡、防火墙)已拦截,也可能是 somaxconn 或应用层 listen backlog 过小导致提前丢包。











