题目
如何防御 TCP 洪泛攻击?(半连接队列)
答案
@[toc] --- ### 半连接队列 三次握手过程中,服务器第一次收到客户端的 SYN 之后,就会处于 `SYN_RCVD` 状态,此时双方还没有完全建立其连接,服务器会把这种状态下的请求连接放在一个队列里,我们把这种队列称之为**半连接队列**。 当然还有一个**全连接队列**,完成三次握手后建立起的连接就会放在全连接队列中。如果队列满了就有可能会出现丢包现象。 ### 什么是 SYN Flood? SYN Flood(SYN 洪泛攻击)就是 **Client 在短时间内伪造大量不存在的源 IP 地址,并向 Server 不断地发送 SYN 包**,Server 一旦接收到 Client 发来的 Syn 报文,就**立即**为该请求分配一个 **TCB(Transmission Control Block)**,并回复 ACK 确认包,等待 Client 确认。由于源地址不存在,因此 Server 需要不断重发直至超时 **这些伪造的 SYN 包将长时间占用「半连接队列」,并请求分配大量 TCB,消耗服务器资源,同时也导致正常的 SYN 请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪** ### 如何防御 SYN Flood? 1. 配置防火墙:防火墙可以通过限制每秒钟接收的 SYN 请求数量,或限制源地址的数量来降低攻击的威力。 2. 使用反向代理:将流量分配到多个服务器上,通过负载均衡来减轻单台服务器的负担,从而使服务器更难受到攻击。 3. 使用 CDN:使用 CDN 可以帮助过滤掉大部分的攻击流量,并将请求转发到最近的可用服务器上。 4. 限制连接数:限制每个 IP 地址的连接数量,通过对 TCP 连接进行监控和记录,及时发现异常连接行为,限制同一 IP 地址的连接数量。