首页/安全/安全加固速查/TCP SYN Cookies 开启(防半连接耗尽)
主机加固基线90 条

TCP SYN Cookies 开启(防半连接耗尽)

开启 SYN Cookies 后,服务器在半连接队列满时用加密序列号应答、不分配状态,抵御 SYN Flood 半连接耗尽攻击;CIS 与等保均建议开启。

安全加固速查安全更新于 2026-10-13

SYN Cookies 挡的是半连接耗尽

TCP 三次握手中,服务器收到 SYN 后要先在半连接队列里占一个位置。攻击者伪造大量源地址只发 SYN、不回 ACK,队列被占满后正常连接也建不起来。开启 SYN Cookies 后,半连接队列满时服务器改用加密构造的序列号应答,不再为该连接保留状态,等收到合法 ACK 再重建连接信息,从而在攻击中维持可用性。现代内核通常默认开启,这一项多数时候只需核查。

基本信息

加固项SYN Flood 半连接耗尽缓解
适用平台Linux(RHEL/CentOS、Debian/Ubuntu)
权限要求root
基线值net.ipv4.tcp_syncookies = 1
持久化/etc/sysctl.d/*.conf 或 /etc/sysctl.conf

典型使用场景

  • 公网暴露的 Web、API 服务加固
  • 基线巡检确认内核抗压参数没有被改回 0
  • 遭遇 SYN Flood 时作为第一步确认缓解能力
  • 高并发短连接场景(短信网关、代理服务)调优
  • 新镜像或容器宿主机统一内核参数

核查与加固

核查与加固
sysctl net.ipv4.tcp_syncookies      # 期望 1
sysctl net.ipv4.tcp_max_syn_backlog net.ipv4.tcp_synack_retries net.core.somaxconn   # 一并看相关参数
echo 'net.ipv4.tcp_syncookies = 1' > /etc/sysctl.d/99-hardening.conf
sysctl --system                     # 使配置生效
sysctl net.ipv4.tcp_syncookies      # 复核

相关内核参数

参数含义常见取值
net.ipv4.tcp_syncookies队列满时启用 SYN Cookies1 开启,基线值
net.ipv4.tcp_max_syn_backlog半连接队列长度上限随并发与内存调整,常见 1024-8192
net.ipv4.tcp_synack_retriesSYN-ACK 重传次数过大延长攻击占用,常设 2-3
net.core.somaxconnaccept 队列上限与 tcp_max_syn_backlog 匹配更稳

读法与判定

值 1半连接队列溢出时启用加密序列号应答,达标
值 0关闭,队列打满即拒绝新连接,不达标
配置位置/etc/sysctl.d/ 下的独立文件便于维护与复核
生效范围立即对全部接口生效,无需重启
SYN Cookies 生效时会牺牲部分 TCP 扩展能力(如窗口缩放),高吞吐、大带宽时延积的场景属于已知折衷。内核只在半连接队列溢出时才启用,因此收益远大于代价,不必为了这点退化把它关掉。
开启 SYN Cookies 只是缓解手段,不是完整的抗 DDoS 方案。云环境下还需要安全组或防火墙限制来源、按源 IP 限速、以及上游清洗与连接数控制;把单机参数当成防护天花板会低估真实攻击的影响面。

易错点

  • 只开 syncookies 就认为抗住了 SYN Flood:缓存、带宽与应用层连接同样会被打满,需要多层配合
  • 用 sysctl -w 临时改参数却没写持久化文件,重启后配置还原,巡检时才发现不达标
  • 直接编辑 /etc/sysctl.conf 而不放 /etc/sysctl.d 下的独立文件,后续升级或多人维护时容易被覆盖
  • 盲目放大 tcp_max_syn_backlog 参数:内存消耗与队列超时时间都会增加,应按实际并发压测后再调

数据来源与参考

  • CIS Linux Benchmark:Enable TCP SYN Cookies
  • RFC 4987:TCP SYN Flooding Attacks and Common Mitigations

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌