C.3 SYN洪泛攻击的防御
如果一台主机负荷突然升高甚至失去响应,使用Netstat命令能看到大量SYN_RCVD的半连接,那么就可以认定,这台主机遭到了SYN洪泛攻击。
使用网络分析工具WireShark捕获的SYN洪泛攻击的数据包与图C-7所示类似。
图 C-7 SYN洪泛攻击数据包
关于SYN洪泛攻击防范技术,人们研究得比较早。归纳起来,主要有两大类,一类是通过防火墙、路由器等过滤网关进行防护;另一类是通过加固TCP/IP协议栈来防范。但必须清楚的是,SYN洪泛攻击能用防火墙完全阻止。
防火墙通常用于保护内部网络不受外部网络的非授权访问,它位于客户端和服务器之间,因此利用防火墙来阻止DDoS攻击能有效地保护内部的服务器。针对SYN洪泛攻击,防火墙通常有三种防护方式:SYN网关、被动式SYN网关和SYN中继。
❑SYN网关:防火墙收到客户端的SYN包时,直接转发给服务器;防火墙收到服务器的SYN/ACK包后,一方面将SYN/ACK包转发给客户端,另一方面以客户端的名义给服务器回送一个ACK包,完成TCP的三次握手,让服务器端由半连接状态进入连接状态。当客户端真正的ACK包到达时,有数据则转发给服务器,否则丢弃该包。由于服务器能承受的连接状态要比半连接状态高得多,所以这种方法能有效地减轻对服务器的SYN洪泛攻击。
❑被动式SYN网关:设置防火墙的SYN请求超时参数,让它远小于服务器的超时期限。防火墙负责转发客户端发往服务器的SYN包、服务器发往客户端的SYN/ACK包,以及客户端发往服务器的ACK包。这样,如果客户端在防火墙计时器到期时还没发送ACK包,防火墙则往服务器发送RST包,以使服务器从队列中删去该半连接。由于防火墙的超时参数远小于服务器的超时期限,因此这样能有效防止SYN洪泛攻击。
❑SYN中继:防火墙在收到客户端的SYN包后,并不会向服务器转发,而是记录该状态信息,然后主动给客户端回送SYN/ACK包,如果收到客户端的ACK包,表明是正常访问,由防火墙向服务器发送SYN包并完成三次握手。这样由防火墙作为代理来实现客户端和服务器端的连接,可以完全过滤掉不可用的连接发往服务器。
同时,TCP的某些实现也采用了一些策略来减轻SYN洪泛攻击的影响。有些实现给出在特定时间内限制连接请求的次数、缩短SYN超时时间,或者把从不想要的源地址发来的数据报过滤掉,这些方式可降低服务器的负荷。还有一种策略是使用Cookie,即给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续收到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包全部丢弃。