前些天有客户联系墨者安全,说公司有个业务网站被syn flood攻击了,服务器本身有硬防,但是顶不住,被打死了,寻求解决办法。这个客户遭遇的攻击也是很多经营互联网业务的互联网人经常遇到的,但有些人对此不不太了解是怎么一回事。下面墨者安全向大家介绍syn flood攻击的原理和解决办法。
SYN Flood 或称 SYN洪水、SYN洪泛,是一种阻断服务攻击,属于典型的
DDoS攻击。SYN foold攻击主要针对tcp通信三次握手期间做的手脚,所以要弄懂这个攻击的原理我们首先必须知道tcp三次握手的详细过程。
当客户端尝试与服务器建立TCP连接时,客户端和服务器在正常情况下交换一组信息,如下所示:
1.客户端将SYN同步信息发送到服务器并请求连接设置。
2.服务器响应客户端SYN-ACK响应请求。
3.客户端承诺ACK并建立连接。
这是在所谓的TCP 3次握手中使用TCP传输协议的每个连接的基础。
在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些伪造的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。
如何知道是不是受到了SYN攻击?检测SYN攻击的方式非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了。
SYN foold攻击的解决方法:
1、修改等待数
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
2、启用syncookies
sysctl -w net.ipv4.tcp_syncookies=1
3、修改重试次数
sysctl -w net.ipv4.tcp_syn_retries = 0
重传次数设置为0,只要收不到客户端的响应,立即丢弃该连接,默认设置为5次
4、限制单IP并发数
使用iptables限制单个地址的并发连接数量:
iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT
5、限制C类子网并发数
使用iptables限制单个c类子网的并发链接数量:
iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 24 -j REJECT
6、限制单位时间内连接数
设置如下:
iptables -t filter -A INPUT -p tcp --dport 80 -m --state --syn -m recent --set
iptables -t filter -A INPUT -p tcp --dport 80 -m --state --syn -m recent --update --seconds 60 --hitcount 30 -j DROP
7、修改modprobe.conf
为了取得更好的效果,需要修改/etc/modprobe.conf
options ipt_recent ip_list_tot=1000 ip_pkt_list_tot=60
作用:记录10000个地址,每个地址60个包,ip_list_tot最大为8100,超过这个数值会导致iptables错误
8、限制单个地址最大连接数
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j D
通过上述这些设置,可以缓解SYN攻击带来的影响,但如果遭到几百几千G的T级流量洪水攻击,那只能选择像墨者安全那样的商业级的防DDOS服务了。墨者盾高防可以隐藏服务器真实IP,利用新的WAF算法过滤技术,清除DDOS异常流量,可防御大规模SYN Flood、ACK Flood、ICMP Flood、UDP Flood等各类常见的攻击类型,保障服务器正常运行。