syn cookies机制用于防御syn flood攻击,值为1时仅在半连接队列溢出时动态启用(推荐);需通过sysctl临时开启并写入/etc/sysctl.conf永久生效,再通过netstat -s或dmesg验证是否触发。

在Linux服务器遭遇SYN Flood攻击或突发高并发连接请求时,半连接队列(SYN queue)极易溢出,导致内核丢弃合法SYN包、客户端连接失败,并在dmesg中持续打印“possible SYN flooding”警告——此时必须立即启用SYN Cookies机制,让内核跳过队列排队,用加密cookie临时承载三次握手状态。
确认当前SYN Cookies是否已启用
执行命令:sysctl net.ipv4.tcp_syncookies。若返回值为 【0】,表示完全关闭;返回 【1】 表示仅在半连接队列溢出时动态启用(现代内核默认值,推荐);返回 【2】 表示无条件启用(不建议,会禁用部分TCP选项且增加CPU开销)。
再检查历史丢包证据:运行 netstat -s | grep -i "syncookies",观察“Syncookies sent”计数是否为0。若为0且同时存在大量“SYNs to LISTEN sockets dropped”,说明该机制尚未触发,需先确保队列真被压满或参数已生效。
临时开启SYN Cookies(立即生效)
执行:sudo sysctl -w net.ipv4.tcp_syncookies=1。
这一步操作起来很简单,直接回车即可。但注意:【此设置在重启后失效】,仅用于紧急验证或测试环境。
永久启用并写入配置文件
第一步:用文本编辑器打开系统配置文件:sudo nano /etc/sysctl.conf。
第二步:在文件末尾新增一行:net.ipv4.tcp_syncookies = 1。不要写成 net.ipv4.tcp_syncookies=2,否则将强制启用无条件模式,可能造成部分客户端(尤其是高延迟链路或老旧NAT设备)三次握手失败。
第三步:执行 sudo sysctl -p 重载配置。若输出中包含 net.ipv4.tcp_syncookies = 1,即表示写入成功。
验证SYN Cookies是否真正介入工作
方法一:主动触发队列压力(需谨慎)
用工具如 hping3 -S -p 80 -i u10000 target_ip 模拟低频SYN洪流,再立刻执行 netstat -s | grep -A2 -i syncookies,观察“Syncookies sent”数值是否增长。
方法二:查内核日志
执行 dmesg | tail -20,若此前出现过“possible SYN flooding”提示,而启用后该提示消失,且 netstat -s 中对应丢包计数停止上涨,即可判定SYN Cookies已实际接管处理逻辑。











