21 10 月 2026
本文由财富云计算提供,我们提供高防服务器与 CDN 防护服务,NAT 型无独立公网 IP 价格比独立 IP 省一半以上,大流量 SYN 攻击靠硬件清洗,文末有方案。

一、TCP 三次握手:攻击的起点

SYN Flood 利用的是 TCP 握手的设计缺陷。先回顾握手:

客户端                        服务器
  │                             │
  │──── SYN(我想连接)────────→│  ① 客户端发 SYN
  │                             │  服务器记下「半开连接」,分配资源
  │←─── SYN-ACK(可以,来吧)──│  ② 服务器回 SYN-ACK
  │                             │
  │──── ACK(来了)────────────→│  ③ 客户端回 ACK,连接建立
  │                             │

问题在第二步:服务器收到 SYN 后,会分配资源(连接表项、内存)并等待客户端的 ACK。等多久?内核参数 tcp_synack_retries 决定(默认 5 次重试,指数退避——63 秒后才放弃)。

SYN Flood 就是只发第一步:狂发 SYN,永不回 ACK。服务器的半开连接表被占满,正常用户的 SYN 进不来——不是服务崩了,是门被堵了。

二、攻击的三种形态

2.1 直接攻击(IP 不伪造)

攻击者用真实 IP(或代理池)发 SYN。简单但容易被封。

2.2 IP 伪造攻击(主流)

源 IP 随机伪造——你封了一个还有千千万。而且响应 SYN-ACK 发给了无辜的伪造 IP,那些 IP 还会回 RST(更乱)。

2.3 分布式 SYN Flood

僵尸网络多 IP 同时打,量最大,最难防。配合反射放大(SYN 包也能反射放大)能到几十 G 的 PPS。

攻击效果的关键指标是 PPS(每秒包数)不是带宽:SYN 包很小(几十字节),10Mbps 带宽能打几万 PPS,但几万 PPS 的半开连接就能塞满一台中低配服务器的连接表。这就是为什么 SYN Flood 用小带宽也能打瘫大机器。

三、识别:你在挨 SYN Flood 吗

# 1. 半开连接数(最直接)
ss -n state syn-recv | wc -l
# 正常:个位数到几十;攻击:几百到几万

# 2. 连接状态分布
ss -tan | awk '{print $1}' | sort | uniq -c | sort -rn

# 3. 看包(服务器还连得上时)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0' -c 100
# 满屏 SYN 包,同一目的端口 = 实锤

# 4. 内核计数器
netstat -s | grep -i syn
# "SYNs to LISTEN sockets dropped" 持续上涨 = 连接表溢出,正在丢正常用户

症状对照:

  • SSH 卡顿但偶尔能连上(连接表将满未满)
  • 网站时开时关(半开连接满了挤掉正常握手)
  • ping 通、带宽不高、CPU 不高——纯协议层攻击,资源型监控看不出来
  • netstat -s 里 LISTEN sockets dropped 数字飞涨

四、本机防护:内核参数加固(第一道防线)

小规模 SYN(几千 PPS 以下)本机扛得住。这套参数直接抄:

# /etc/sysctl.d/99-syn-protect.conf

# 1. SYN Cookie(核心武器,见下节详解)
net.ipv4.tcp_syncookies = 1

# 2. SYN 队列和 accept 队列加大(扛突发)
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192

# 3. 半开连接重试减少(攻击时快速释放被占资源)
net.ipv4.tcp_syn_retries = 3        # 客户端重试(默认 6 太慢)
net.ipv4.tcp_synack_retries = 2     # 服务端重试 SYN-ACK(默认 5,攻击时等 63 秒太蠢)

# 4. 快速回收 TIME_WAIT(连接频繁场景)
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

# 5. 减少重传超时(攻击时快速失败快速恢复)
net.ipv4.tcp_retries2 = 8

# 6. 反向路径过滤(防伪造源 IP 入站)
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
sysctl -p /etc/sysctl.d/99-syn-protect.conf

SYN Cookie:为什么它是核心武器

开启后,服务器收到 SYN 不再分配任何资源——把连接信息(双方 IP 端口、时间戳、MSS)用加密算法编码进 SYN-ACK 的序列号里发出去。客户端回 ACK 时,服务器从序列号「解码」验证——验证通过才真正建立连接、分配资源。

传统模式:收到 SYN → 分配资源 → 等 ACK(攻击者白嫖资源)
Cookie 模式:收到 SYN → 零分配,算个 Cookie 发回去 → ACK 对了才分配(攻击者占不到任何东西)

代价:Cookie 模式禁用了部分 TCP 扩展(窗口缩放等),极端拥塞下性能略降——所以平时 backlog 够用时系统不一定开 Cookie,但被攻击时必须开(默认设 1 是对的,平时开销可忽略)。

判断 Cookie 是否生效

sysctl net.ipv4.tcp_syncookies   # = 1 开启
# 攻击中看 Cookie 触发计数(部分内核版本)
netstat -s | grep -i cookie

五、进阶:tcpdump 抓现行 + iptables 缓解

5.1 抓包分析

# 抓 SYN 包看源 IP 分布(判断是否分布式)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' -c 1000 -w /tmp/syn.pcap
# 分析:源 IP 集中 = 单点,分散 = 分布式
tshark -r /tmp/syn.pcap -T fields -e ip.src | sort | uniq -c | sort -rn | head

5.2 iptables 限流缓解

# 1. 单 IP SYN 速率限制(防单点刷)
iptables -A INPUT -p tcp --syn -m limit --limit 20/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# 2. 无效包直接丢(畸形扫描)
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# 3. 半开连接数限制(connlimit 模块)
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 20 -j DROP

iptables 的极限:本机处理 PPS 有上限(几万 PPS 后 iptables 自己成瓶颈)。所以 iptables 是「缓解小攻击 + 挡扫描」,大攻击必须上高防。

5.3 Nginx/应用层

对 SYN Flood 帮助有限(它在传输层),但连接数限制能让应用层别先崩:

events {
    worker_connections 10240;   # 调大,扛半开连接占满前的余量
    multi_accept on;
}

六、什么时候必须上高防

本机能扛的量级参考:

攻击 PPS本机 + iptables需要高防
< 5,000 PPS✅ 轻松扛不需要
5,000–20,000 PPS⚠️ 调参数能扛,CPU 吃紧建议
20,000–100,000 PPS❌ 接近极限,随时崩必须
> 100,000 PPS❌ 没到机器链路就满了必须 + 大档位

判断标准:ss -n state syn-recv 超过 5000 且持续涨,或者 netstat -s 里 dropped 数字飞涨——别挣扎了,切高防(迁移实操)。

高防怎么洗 SYN:SYN Proxy——清洗设备替服务器完成握手,只把「已验证的真实连接」转发给你。你的服务器连 SYN 包都看不到了(原理见清洗中心篇第三节)。

七、TCP 协议其他攻击面

SYN Flood 之外,TCP 层还有这些利用方式(防护一起做):

攻击原理本机防护
ACK Flood无状态 ACK 撞防火墙状态防火墙丢弃(iptables 模板)
RST 注入伪造 RST 断你连接TLS + 序列号随机化(现代内核默认)
连接耗尽慢速占满 accept 队列Nginx 超时收紧(慢速攻击)
序列号预测老协议漏洞现代内核随机序列号,基本免疫
TCP 反射放大伪造 SYN 反射高防清洗(反射专题)

八、完整加固清单(直接执行)

cat > /etc/sysctl.d/99-syn-protect.conf << 'EOF'
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 8192
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_retries2 = 8
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
EOF
sysctl -p /etc/sysctl.d/99-syn-protect.conf

# iptables 基础防护
iptables -N SYN_FLOOD
iptables -A INPUT -p tcp --syn -j SYN_FLOOD
iptables -A SYN_FLOOD -m limit --limit 50/s --limit-burst 100 -j RETURN
iptables -A SYN_FLOOD -j DROP
iptables-save > /etc/iptables/rules.v4

日常就该配好——被攻击时再改,你可能连 SSH 都进不去(那时候只能控制台)。

九、小结

SYN Flood 打的是 TCP 握手的资源不对称:攻击者发小包不分配资源,服务器等 ACK 却要分配。本机防御三板斧——SYN Cookie(零资源验证)、队列扩容、iptables 限流——能扛小攻击;超过两万 PPS 必须硬件清洗(高防 SYN Proxy 代完成握手)。协议层攻击的特征是「资源不高但连不上」,监控要盯半开连接数而不是 CPU。最后:加固配置要在被攻击前就位,攻击中你连服务器都登不上去。


相关阅读:


本文由财富云计算整理,我们提供高防服务器、CDN 防护与 NAT 型云服务器,无独立公网 IP 机型价格比独立 IP 省一半以上,SYN 攻击扛不住的咨询我们。更多教程见端口速查表。
延伸阅读
  1. 高防误区与避坑清单:25 个坑+下单前必问 14 问+到货验货流程
  2. DNS 攻击防护专题:劫持、隧道、投毒、放大四类攻击与 DNSSEC
  3. 电商大促防攻击预案:T-14 到当天的分级响应与降级开关
  4. 源站真实 IP 隐藏完全指南:六大暴露面排查+NAT 型终极方案
  5. 日志分析找攻击源:Nginx 日志三维度分析法与证据固定
  6. 攻击应急响应手册:六阶段响应流程,从确认到复盘的照做清单
  7. iptables 抗 DDoS 配置模板:状态过滤+SYN 防护+防扫描+游戏服版
  8. OpenResty Lua 自研 WAF:动态限流+攻击特征检测+Redis 黑名单
更多阅读
  1. 上一篇:反射放大攻击专题:Memcached/NTP/SSDP 借刀杀人流量攻击的防御
  2. 下一篇:CC 攻击变种识别与对抗:分布式、慢速、拟人、精准打接口全拆解
发表评论 4