SYN Flood(SYN 洪水攻击) 是一种典型的 DoS(拒绝服务)攻击,利用 TCP 三次握手机制发起大量 伪造连接请求,让服务器资源耗尽,无法处理正常请求。
⚙️ 攻击原理(基于 SYN_SENT
和 SYN_RECEIVED
状态)
🌐 TCP 三次握手流程
- 客户端发送
SYN
(状态:SYN_SENT
) - 服务器返回
SYN-ACK
(状态:SYN_RECEIVED
) - 客户端回复
ACK
→ 连接建立成功(ESTABLISHED
)
💣 攻击手段
攻击者:
- 构造大量伪造 IP 的
SYN
请求 - 服务端收到后进入
SYN_RECEIVED
状态并分配资源(内存、连接表等) - 客户端从未回复
ACK
,导致连接一直卡在SYN_RECEIVED
状态 - 最终耗尽服务端资源
🔍 如何识别 SYN Flood?
1. 查看 SYN\_RECV 状态激增
netstat -ant | grep SYN_RECV | wc -l
2. 检查 SYN 队列(backlog)是否溢出
在 Linux 系统中:
cat /proc/net/netstat | grep "ListenOverflows"
3. ss 查看 TCP 状态统计
ss -s
🛡️ 如何防御 SYN Flood?
✅ 内核级防护
- 开启 SYN Cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
- 查看是否已启用:
sysctl net.ipv4.tcp_syncookies
✅ 调整 TCP 参数
sysctl -w net.ipv4.tcp_max_syn_backlog=4096 # 提高半连接队列
sysctl -w net.ipv4.tcp_synack_retries=2 # 降低重试次数
✅ 使用防火墙规则限制连接速率(以 iptables 为例)
iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
✅ 应用层/硬件防护
- 使用 负载均衡设备(如 F5/Nginx)作为缓冲层
- 接入 DDoS 防护服务(如 Cloudflare、AWS Shield)
📈 可视化监控建议
- Prometheus + Grafana 监控 TCP 状态
- 报警条件:
SYN_RECV
超过正常阈值 - 日志审计:异常 IP 出现频率