TCP SYN Flood 攻击及防御详解
SYN Flood 是一种常见的 DDoS 攻击方式,利用 TCP 三次握手的漏洞,耗尽服务器资源,导致服务不可用。
SYN Flood 攻击原理
攻击过程
- 发送大量 SYN 包:攻击者向服务器发送大量 TCP SYN 报文段
- 伪造源 IP:使用伪造的或随机的源 IP 地址
- 服务器响应:服务器收到 SYN 后,发送 SYN+ACK,并进入 SYN_RCVD 状态
- 等待 ACK:服务器等待第三次握手(ACK),但由于源 IP 是伪造的,永远不会收到 ACK
- 资源耗尽:大量连接处于 SYN_RCVD 状态,耗尽服务器的连接资源
攻击危害
- 连接队列满:服务器的半连接队列(SYN 队列)被填满
- 无法建立新连接:正常的连接请求无法处理
- 内存耗尽:每个半连接占用内存,大量半连接导致内存耗尽
- CPU 占用高:处理大量 SYN 包消耗 CPU 资源
防御措施
1. SYN Cookies
- 原理:不保存半连接状态,将连接信息编码在 SYN+ACK 的序列号中
- 优势:不占用连接队列资源,防御能力强
- 实现:服务器根据源 IP、源端口、目的 IP、目的端口等信息生成 Cookie
- 验证:收到 ACK 时,验证 Cookie 是否正确
2. 增加半连接队列大小
- 参数:
net.ipv4.tcp_max_syn_backlog - 作用:增加半连接队列容量,提高抗攻击能力
- 限制:无法从根本上解决问题,只是延缓资源耗尽
3. 缩短超时时间
- 参数:
net.ipv4.tcp_synack_retries、net.ipv4.tcp_syn_retries - 作用:减少半连接的存活时间,快速释放资源
- 权衡:可能影响正常连接的建立
4. 限制 SYN 发送频率
- 原理:限制单个 IP 地址的 SYN 包发送频率
- 实现:使用 iptables、防火墙等工具
- 效果:减少攻击流量,但可能误伤正常用户
5. 启用 RST Cookie
- 原理:对可疑的 SYN 包发送 RST,要求客户端重新发起连接
- 效果:过滤掉伪造 IP 的攻击流量
配置示例
Linux 系统配置
bash# 启用 SYN Cookies sysctl -w net.ipv4.tcp_syncookies=1 # 增加半连接队列大小 sysctl -w net.ipv4.tcp_max_syn_backlog=8192 # 缩短超时时间 sysctl -w net.ipv4.tcp_synack_retries=2 sysctl -w net.ipv4.tcp_syn_retries=2 # 限制 SYN 发送频率 iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT iptables -A INPUT -p tcp --syn -j DROP
相关问题
- SYN Cookies 的实现原理是什么?
- 如何检测 SYN Flood 攻击?
- 除了 SYN Flood,还有哪些 TCP 相关的攻击方式?