1:半连接
1:客户端发送SYN,服务器回复SYN+ACK,此时这条连接就处于半连接状态,服务器有维护着一个半连接队列,队列长度为Backlog
2:当SYN+ACK发送超时后,服务器重传,重传有次数限制和时间限制,当超过此限制,此连接从半连接队列删除
2:通过过滤网关进行防护
这里过滤网关主要指防火墙,也可以是路由器,过滤网关后面是服务器
1:网关超时设置
当服务器发送SYN+ACK后,网关启动一个计时器,当计时器超时,通知服务器删除此连接
此计时器值应该比服务器计时器数值低,但也不能太小
2:SYN网关
当收到服务器SYN+ACK,将此报文段发给客户端,同时模拟客户端发送给服务器ACK,这会导致连接建立,这样做会增加有效连接数量,因为一般TCP实现连接队列比半连接队列大的多
3:SYN代理
过滤网关收到SYN,不转发给服务器,而是直接回复SYN+ACK,当收到ACK后,在模拟客户端和服务器的三次握手,这将SYN压力转移到了过滤网关上了,所以过滤网络应该很强大
3:通过加固TCP协议栈进行防护
一部分设置需修改HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
1:SynAttackProtect
1:为0则不受SynAttackProtect保护
2:为1:系统通过减少重传次数和延迟未连接时路由缓冲项(route cache entry)防范SYN攻击
3:系统不仅使用backlog队列,还使用附加的半连接指示,以此来处理更多的SYN连接,使用此键值时, tcp/ip的TCPInitialRTT,window size和可滑动窗囗将被禁止
系统根据以下设置判断是否启用SynAttackProtect,超过下面这些值,系统认为受到SYN攻击
1:TcpMaxHalfOpen:TCP最大半连接数
2:TcpMaxHalfOpenRetried:处于半连接,并且已经重传了SYN+ACK的连接数
3:TcpMaxPortsExhausted:系统拒绝的SYN包数量,默认为5
2:SYN cookies
当TCP半连接队列满时,仍然可以接收SYN,此时回复的SYN+ACK的序号是一个随机值Cookies,这样的半连接不会加入半连接队列(因为已经满了),当收到客户端回复的ACK,如果确认号-1==Cookies,则加入连接队列
3:增加最大半连接数
除TcpMaxHalfOpen,TcpMaxHalfOpenRetried之外,一些操作系统可以设置dynamic backlog动态扩展最大半连接数