乐闻世界logo
搜索文章和话题

TCP SYN Flood 攻击的原理和防御方法是什么?

2月21日 17:09

TCP SYN Flood 攻击及防御详解

SYN Flood 是一种常见的 DDoS 攻击方式,利用 TCP 三次握手的漏洞,耗尽服务器资源,导致服务不可用。

SYN Flood 攻击原理

攻击过程

  1. 发送大量 SYN 包:攻击者向服务器发送大量 TCP SYN 报文段
  2. 伪造源 IP:使用伪造的或随机的源 IP 地址
  3. 服务器响应:服务器收到 SYN 后,发送 SYN+ACK,并进入 SYN_RCVD 状态
  4. 等待 ACK:服务器等待第三次握手(ACK),但由于源 IP 是伪造的,永远不会收到 ACK
  5. 资源耗尽:大量连接处于 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_retriesnet.ipv4.tcp_syn_retries
  • 作用:减少半连接的存活时间,快速释放资源
  • 权衡:可能影响正常连接的建立

4. 限制 SYN 发送频率

  • 原理:限制单个 IP 地址的 SYN 包发送频率
  • 实现:使用 iptables、防火墙等工具
  • 效果:减少攻击流量,但可能误伤正常用户
  • 原理:对可疑的 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 相关的攻击方式?
标签:TCP