TCP的SYN Flood攻击与防护机制
字数 1114 2025-11-06 22:53:29
TCP的SYN Flood攻击与防护机制
描述
SYN Flood是一种典型的DDoS攻击,利用TCP三次握手的缺陷消耗服务器资源。攻击者发送大量伪造源IP的SYN报文但不完成握手,导致服务器的半连接队列被占满,无法响应正常请求。
攻击原理分析
-
正常三次握手缺陷:
- 客户端发送SYN后,服务端回复SYN-ACK并进入SYN_RCVD状态,等待客户端的ACK
- 此时连接称为"半连接",存储在半连接队列中
- 若客户端不回复ACK,服务端会重传SYN-ACK直至超时(通常1-3分钟)
-
攻击者利用手段:
- 伪造大量不存在或不可达的源IP发送SYN包
- 服务端为每个SYN分配连接资源,但永远收不到ACK回复
- 半连接队列被占满后,新连接无法建立
攻击过程演示
步骤1:攻击者伪造源IP(如192.0.2.1)向服务器发送SYN包
步骤2:服务器响应SYN-ACK到伪造IP,并预留连接资源
步骤3:真实主机192.0.2.1收到意外包后会发送RST或直接丢弃
步骤4:服务器持续重传SYN-ACK直至超时,期间资源被占用
防护机制详解
-
SYN Cookie技术(操作系统层面)
- 工作原理:
- 收到SYN时不立即分配连接资源
- 基于连接信息(五元组+时间戳)计算哈希值作为初始序列号
- 将哈希值作为SYN-ACK的序列号发送给客户端
- 验证过程:
- 收到ACK时,检查确认号-1是否为本机计算的哈希值
- 验证通过才分配完整连接资源
- 优点:完全防御半连接队列溢出
- 缺点:计算哈希增加CPU开销,且不支持TCP选项协商
- 工作原理:
-
连接数限制(防火墙层面)
- 对单个IP的半连接数设置阈值(如每秒10个)
- 超过阈值后丢弃该IP的新SYN包
- 结合白名单机制避免误封正常用户
-
首包丢弃策略(负载均衡器层面)
- 故意丢弃第一个SYN包,等待客户端重传
- 真实TCP栈会快速重传,伪造工具通常不会重传
- 通过重传行为区分真实用户与攻击包
-
TCP代理模式(云防护方案)
- 在服务器前部署代理设备完成三次握手
- 仅将完整建立的连接转发给后端服务器
- 彻底隔离半连接对服务器的影响
实际部署建议
- Linux系统启用SYN Cookie:
echo 1 > /proc/sys/net/ipv4/tcp_syncookies - 调整半连接队列大小:
sysctl -w net.ipv4.tcp_max_syn_backlog=2048 - 缩短SYN-ACK重试时间:
sysctl -w net.ipv4.tcp_synack_retries=3 - 结合多层防护:边界防火墙+负载均衡器+操作系统参数调优
通过上述机制的组合使用,可在保证正常服务的前提下有效缓解SYN Flood攻击。