本文由财富云计算提供,我们提供高防服务器与 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 = 1sysctl -p /etc/sysctl.d/99-syn-protect.confSYN 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 | head5.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 DROPiptables 的极限:本机处理 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 攻击扛不住的咨询我们。更多教程见端口速查表。
延伸阅读
- 高防误区与避坑清单:25 个坑+下单前必问 14 问+到货验货流程
- DNS 攻击防护专题:劫持、隧道、投毒、放大四类攻击与 DNSSEC
- 电商大促防攻击预案:T-14 到当天的分级响应与降级开关
- 源站真实 IP 隐藏完全指南:六大暴露面排查+NAT 型终极方案
- 日志分析找攻击源:Nginx 日志三维度分析法与证据固定
- 攻击应急响应手册:六阶段响应流程,从确认到复盘的照做清单
- iptables 抗 DDoS 配置模板:状态过滤+SYN 防护+防扫描+游戏服版
- OpenResty Lua 自研 WAF:动态限流+攻击特征检测+Redis 黑名单

[...]fi日常基线记录:你的站正常时 established 连接是多少(通常 50–200)——超过基线 3 倍且带宽/CPU 正常,就是慢速攻击特征。八、被慢速攻击打了的应急确认:ss -tn state established | wc -l 暴增、带宽 CPU 正常、网站 503 → 实锤收紧超时(如果之前没配):10s → 5s,观察恢复单 IP 连接限制降到 5:误伤正常用户也认了(攻击时保[...]
2026-10-21 回复
[...]# 结果:只有 22/80/443 开放,其他 filtered = 防护生效八、小结iptables 防护模板五件套:默认 DROP + ESTABLISHED 放行(基础)、畸形包过滤(防扫描)、SYN 限流 + 连接数限制(防小洪水)、recent 模块防爆破(SSH)、端口最小化(UDP 严格管控)。它是源站的地基,但记住边界:带宽被打满时 iptables 是摆设,大流量永远靠高防(高防[...]
2026-10-21 回复
[...]iptables -A SYN_FLOOD -j DROP(详见SYN Flood 专题)2.3 CC / HTTP Flood# Nginx 紧急限流(30 秒生效)[...]
2026-10-21 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-21 回复