启用tcp_syncookies是防御SYN Flood的第一道硬防线,它使内核在SYN队列满时用加密哈希生成SYN+ACK序列号,仅收到正确ACK后才分配资源,从根本上避免伪造连接占用内存。

启用 tcp_syncookies 是防御 SYN Flood 的第一道硬防线
SYN Flood 的本质是耗尽服务端的半连接队列(SYN Queue),让合法连接无法入队。启用 tcp_syncookies 后,内核在队列满时不再丢弃 SYN 包,而是用加密哈希生成 SYN+ACK 序列号,只在收到正确 ACK 后才分配内存资源——这从根本上避免了伪造连接占用内存。
临时开启:echo 1 > /proc/sys/net/ipv4/tcp_syncookies
永久生效:在 /etc/sysctl.conf 中添加 net.ipv4.tcp_syncookies = 1,再执行 sysctl -p
注意点:
- 内核 ≥3.7 均支持带时间戳的 SYN Cookies,tcp_timestamps 和 tcp_sack 不会因此被禁用
- 若应用依赖精确的初始序列号(极少见),需谨慎;普通 Web/DB 服务完全无影响
- tcp_syncookies = 2 表示仅在队列溢出时启用,但实际建议设为 1,确保始终兜底
调大 tcp_max_syn_backlog 和 somaxconn 才能撑住突发流量
这两个参数分别控制「半连接队列」和「全连接队列」容量。默认值(常为 128 或 1024)在攻击下几秒就满,必须同步调高。
关键操作:
- net.ipv4.tcp_max_syn_backlog:建议设为 4096~65535,具体取决于并发压力
- net.core.somaxconn:必须 ≥ 应用 listen() 调用传入的 backlog 参数,否则会被截断;推荐统一设为 65535
- 修改后需重启监听服务(如 Nginx、Apache)或重载(如 systemctl reload nginx),否则新值不生效
常见误区:
- 只改 tcp_max_syn_backlog 却忽略 somaxconn,导致全连接队列先堵死
- 应用代码中 listen(fd, 128) 硬编码了小值,内核再大也白搭
- 某些容器环境(如 Docker)需额外设置 --sysctl 参数透传
把 tcp_synack_retries 降到 2 或 3 能快速释放无效连接
该参数决定服务端重发 SYN+ACK 的次数。默认值 5 意味着最长等待约 31 秒(指数退避),攻击者伪造的 IP 根本不会回 ACK,白白占着队列条目。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
推荐配置:
- net.ipv4.tcp_synack_retries = 2 → 最长等待约 1.5 秒
- net.ipv4.tcp_synack_retries = 3 → 最长等待约 3 秒
- 同时可设 net.ipv4.tcp_syn_retries = 3(客户端侧,辅助识别攻击强度)
副作用很小,但效果明显:
- 半连接平均存活时间从几十秒降至秒级,队列周转率大幅提升
- 不影响正常网络延迟高的用户(如海外访问),因为三次握手本身不依赖重试机制
- 注意不要设为 0,会导致首次 SYN+ACK 丢失即断连,对真实弱网用户不友好
iptables 限速规则必须配合内核参数才真正有效
内核参数解决“资源分配逻辑”,iptables 解决“包级过滤”。单独用任一手段都防不住混合攻击(如伪造 IP + 高频 SYN)。
实操建议:
- 用自定义链做分层限速:iptables -N syn-flood,再跳转:iptables -A INPUT -p tcp --syn -j syn-flood
- 在 syn-flood 链中限制单 IP 每秒新建 SYN 数:iptables -A syn-flood -m limit --limit 3/sec --limit-burst 6 -j RETURN
- 超限则拒绝:iptables -A syn-flood -j REJECT
- 封禁已确认的攻击段:iptables -A INPUT -s 203.0.113.0/24 -j DROP(需配合日志分析)
容易漏掉的点:
- 规则顺序很重要,必须放在 ESTABLISHED 规则之后、其他 ACCEPT 之前
- 使用 --limit-burst 允许短时突发(如页面加载多个资源),避免误伤
- REJECT 比 DROP 更利于客户端快速失败,减少重试等待
内核参数调优不是“设完就万事大吉”的事情。真正难的是判断哪些参数该激进调高(如 somaxconn)、哪些该保守调整(如 tcp_synack_retries),以及如何和 iptables 规则、应用层 backlog 设置、负载均衡策略联动。尤其在容器或云环境中,宿主机与容器网络命名空间的 sysctl 隔离、iptables 规则作用域,都是容易踩空的细节。

















