SYN Flood(SYN Flood)是典型的DoS(拒绝服务)攻击,是一种DDoS攻击。攻击发生后,服务器的TCP连接资源耗尽,最终停止响应正常的TCP连接请求。虽然这种类型的攻击已经存在了十多年,但它的变种仍然可以在今天看到。虽然已经有技术可以有效地对抗大量的SYN,但是没有标准的TCP实现解决方案。今天的小编将详细介绍这种攻击原理以及如何对抗洪水SYN~
攻击开始
正常的三次握手:
首先启动带有序列号(Seq)的SYN=1数据包;
一旦服务器收到数据包,它就会将数据放入名为syn_table的队列中。并且发送返回数据包,作为响应,返回数据包有自己的序列号(Seq)和Ack,Ack的值是客户端发送的Seq值加1;
客户端收到返回消息后,将服务器的Seq添加为Ack,并将其发送给服务器。
服务器接收第三个数据包,并在验证没有问题后,将连接置于request_sock_queue中,并完成三向交换。
你还在花钱捍卫DDoS吗?使用iptables 5技巧获得免费的SYN泛洪攻击!
SYN Flood主要使用TCP协议的三向链路协议的缺点。在此攻击中,Flood会携带一系列syn数据包,每个数据包都会导致服务器发送SYN-ACK响应,然后服务器等待SYN + ACK。第三个链路协议ACK,由于客户端是软件生成的虚拟IP,ACK响应服务器永远不会再次发送,服务器将使用传输机制,直到超时被消除,并且积压它将消耗系统的所有资源。无法满足正常请求。
你还在花钱捍卫DDoS吗?使用iptables 5技巧获得免费的SYN泛洪攻击!
我怎么知道我是否患有SYN攻击?
检测SYN攻击非常简单。当您在服务器上看到很多半连接状态时,特别是如果源IP地址是随机的,您基本上可以断定它是SYN攻击。我们使用系统附带的netstat工具来检测SYN攻击:
#netstat -n -p TCP
反馈如图所示
你还在花钱捍卫DDoS吗?使用iptables 5技巧获得免费的SYN泛洪攻击!针对SYN Floods的防御。
配置iptables规则
Iptables防火墙可以理解为Linux系统下的访问控制功能,我们可以使用Iptables配置一些规则来抵御这种攻击。强制检查SYN数据包以确保传入的tcp链接是SYN数据包,如果不是则丢弃它。
#iptables -A ENTRY -p tcp --syn -m status --state NEW -j DROP
强制检查碎片包并使用传入的片段丢弃包。
#iptables -A ENTRADA -f -j DROP
丢弃格式错误的XMAS包。
#iptables -A ENTRY -p tcp --tcp-flags ALL -j DROP
丢弃格式错误的NULL数据包。
#iptables -A ENTRY -p tcp --tcp-flags ALL NONE -j DROP
当Iptables配置完成后,我们可以使用nmap命令对其进行验证。
#nmap -v -f IP防火墙
#nmap -v -sX IP防火墙
#nmap -v -sN IP防火墙
例如:
你还在花钱捍卫DDoS吗?使用iptables 5技巧获得免费的SYN泛洪攻击!
其他防御方法:
除了SYN攻击外,我们还可以使用以下处理方法:
方法1:减少SYN-ACK数据包的重传次数(默认为5次)
Sysctl -w net.ipv4.tcp_synack_retries=3
Sysctl -w net.ipv4.tcp_syn_retries=3
方法2:使用SYN cookie技术
Sysctl -w net.ipv4.tcp_syncookies=1
方法3:增加挂起的作业队列(默认值为1024):
Sysctl -w net.ipv4.tcp_max_syn_backlog=2048
方法4:限制SYN并发数:
Iptables -A ENTRY -p tcp --syn -m limit - limit 1/s -j ACCEPT - limit 1/s