重学TCP协议(10)SYN flood 攻击

933 阅读2分钟

1.SYN flood 攻击

image.png

SYN Flood(半开放攻击)是一种拒绝服务(DDoS)攻击,其目的是通过消耗所有可用的服务器资源使服务器不可用于合法流量。通过重复发送初始连接请求(SYN)数据包,攻击者能够压倒目标服务器机器上的所有可用端口,导致目标设备根本不响应合法流量。

例如:客户端伪造了大量的虚假的IP地址,不断给我们服务器发SYN,而服务器回复ACK+SYN给大量虚假的IP地址,并且使得大量连接处于SYN_RCVD 状态,就会把我们服务器的半连接队列挤爆,从而无法响应那些合法的请求。

2. 如何应对 SYN Flood 攻击

2.1 增加 SYN 连接数:tcp_max_syn_backlog

但是这个只能延缓一下半连接队列爆满的情况

2.2 减少SYN+ACK重试次数:tcp_synack_retries

重试次数由 /proc/sys/net/ipv4/tcp_synack_retries控制,默认情况下是 5 次,而我们在被攻击的时候,调小这个值很有必要,可以减少重传的次数,加快连接取消的速度

2.3 tcp_syncookies 机制

SYN Cookie是对TCP服务器端的三次握手做一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是

  1. 在TCP服务器接收到TCP SYN包并返回TCP SYN + ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。
  2. 这个cookie作为将要返回的SYN ACK包的初始序列号。
  3. 当客户端返回一个ACK包时,根据包头信息计算cookie,与返回的确认序列号(初始序列号 + 1)进行对比,如果相同,则是一个正常连接,然后,分配资源,建立连接。