攻击者短时间伪造不同IP地址的SYN报文,快速占满backlog队列,使服务器不能为正常用户服务,SYN攻击是所有黑客攻击事件中最常见又最容易被利用的一 种攻击手法,由来已久,破坏威力巨大。SYN攻击属于DOS攻击的一种, 它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源
TCP连接握手示意图
SYN_SENT 状态
net.ipv4.tcp_syn_retries = 6 -主动建立连接时,发SYN的重试次数
net.ipv4.ip_local_port_range = 32768 60999 -建立连接时本地口可用范围
SYN_RCVD 状态
net.ipv4.tcp_max_syn_backlog -SYN_RCVD状态连接的最大数
net.ipv4.tcp_synack_retries -被动建立连接时,发SYN/ACK的重试次数
如何应对SYN攻击?
SYN攻击的原理就是向服务器发送SYN数据包,并伪造源IP地址。服务器在收到SYN数据包时,会将连接加入backlog队列,并向源IP发送SYN-ACK数据包,并 等待ACK数据包,以完成三次握手建立连接。 由于源IP地址是伪造的不存在主机IP,所以服务器无法收到ACK数据包,并会不断重发,同时backlog队列被不断被 攻击的SYN连接占满,导致无法处理正常的连接小号cpu资源。
1、减少SYN-ACK数据包的重发次数(默认是5次)
sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3
2、增大backlog队列(默认是1024)
net.core.netdev_max_backlog -接收自网卡、但未被内核协议栈处理的报文队列长度
net.ipv4.tcp_max_syn_backlog -SYN_RCVD状态连接的最大个数
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
3、超出处理能力时,对新来的SYN丢弃连接
net.ipv4.tcp_abort_on_overflow
4、生成验证cookie,重连
net.ipv4.tcp_syncookies = 1
-当SYN队列满后,新的SYN不进A队列,计算出cookie再以SYN+ACK中的序列号返回客户端,正常客户端发报文时,服 务端根据报文中携带的cookie重新恢复连接
注意:synccookies是妥协版的TCP协议,失去了很多功能,所以先应优化服务端应用程序的负载能力,加大应用程序 backlog值