跳转至

SYN泛洪

SYN 洪泛(SYN Flood)是一种常见的 拒绝服务攻击(DoS,Denial of Service),主要通过滥用 TCP 协议的三次握手机制,耗尽服务器的资源,导致目标系统无法正常提供服务。


TCP 三次握手过程

在正常情况下,建立一个 TCP 连接需要以下三个步骤: 1. 客户端发送 SYN 包:请求建立连接。 2. 服务器返回 SYN-ACK 包:确认收到请求并准备建立连接。 3. 客户端返回 ACK 包:确认连接建立。


SYN 洪泛攻击的原理

  1. 攻击者伪造大量的客户端 IP 地址。
  2. 向目标服务器发送大量的 SYN 包,请求建立连接。
  3. 目标服务器为每个 SYN 请求分配资源(如内存和 CPU 处理能力),并返回 SYN-ACK 包
  4. 攻击者并不发送最终的 ACK 包(或继续发送伪造的请求)。
  5. 由于连接未完成,服务器的资源会被占用,达到上限后无法处理合法请求。

这种攻击通过消耗服务器资源,导致服务变得极慢甚至不可用。


SYN 洪泛的危害

  • 资源耗尽:占用服务器的连接表(如 TCP 半连接队列)。
  • 服务中断:合法用户无法连接到服务器。
  • 设备崩溃:在资源有限的情况下,可能导致服务器宕机。

如何防御 SYN 洪泛攻击

1. 缩短 TCP 超时时间

通过减少未完成连接(半连接)的超时时间,降低攻击对资源的消耗:

echo 10 > /proc/sys/net/ipv4/tcp_synack_retries

SYN Cookie 是一种防御机制,可以避免为每个连接分配资源,而是根据请求动态验证合法性:

echo 1 > /proc/sys/net/ipv4/tcp_syncookies

3. 限制连接速率

使用 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

4. 使用防火墙或流量清洗设备

  • 配置硬件防火墙。
  • 使用云服务(如 DDoS 防护)过滤恶意流量。

5. 扩大连接队列

增大 TCP 半连接队列的大小,减少队列耗尽的可能性:

echo 1024 > /proc/sys/net/ipv4/tcp_max_syn_backlog

6. 监控和告警

实时监控流量异常并及时响应,例如使用工具: - netstat:查看连接状态。 - tcpdump:捕获并分析网络流量。


这两条命令用于防御 SYN 洪泛攻击,通过限制新建连接的速率,避免攻击者通过发送大量 SYN 包耗尽服务器资源。以下是逐条的解释:


1. iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT

含义:

-A INPUT:将规则追加到 INPUT 链,表示处理进入本地系统的流量。

-p tcp:匹配 TCP 协议的流量。

--syn:匹配 SYN 标志位为 1 的数据包,即请求新建 TCP 连接的包。

-m limit:使用 limit 模块来限制流量速率。

--limit 10/s:允许每秒最多 10 个 SYN 数据包通过。

--limit-burst 20:允许的初始突发流量上限为 20 个数据包。

-j ACCEPT:匹配到规则的流量将被接受。

作用:

限制每秒最多处理 10 个新建连接请求。

如果瞬间出现突发流量(例如 20 个 SYN 包同时到达),可以在突发流量范围内允许通过。

超过这个限制后,超出的 SYN 数据包会被后续规则处理。


2. iptables -A INPUT -p tcp --syn -j DROP

含义:

-A INPUT:将规则追加到 INPUT 链

-p tcp:匹配 TCP 协议的流量。

--syn:匹配 SYN 标志位为 1 的数据包。

-j DROP:匹配到规则的流量直接丢弃,不响应。

作用:

丢弃所有未被前一条规则允许的 SYN 数据包。

配合上一条规则使用,可以防止超过限制速率的 SYN 包占用服务器资源。


两条规则的联合效果

  1. 正常情况下

每秒最多允许 10 个新建连接请求通过,突发流量允许在初始 20 个以内。

超过限制的 SYN 包会被丢弃。

  1. 面对攻击时

攻击者发送大量 SYN 包时,大部分流量会被限制和丢弃,只允许有限的合法请求通过。

防止服务器资源被滥用,提高抗 SYN 洪泛攻击的能力。


举例说明

假设攻击者每秒发送 50 个 SYN 包:

1.第 1 秒:

前 20 个包通过(突发流量上限)。

接下来最多允许 10 个包通过。

其余 20 个包会被丢弃。

2.第 2 秒及之后:

每秒最多只允许 10 个新连接,其余的都丢弃。

这种配置可以有效减少 SYN 洪泛攻击对服务器的影响,同时保证正常用户的连接请求有一定的机会被处理。


适用场景

保护服务器免受中小规模的 SYN 洪泛攻击。

限制不受信任网络中的新建连接速率。