什么是SYN泛滥攻击? Linux中的检测和预防

时间:2020-03-05 15:29:41  来源:igfitidea点击:

SYN泛洪攻击是一种拒绝服务攻击的形式,其中攻击者向使用TCP协议的目标系统的服务发送大量SYN请求。
这消耗了服务器资源,使系统对甚至合法流量无响应。
此次攻击可能会在使用TCP协议的任何服务上发生,但主要是在Web服务上。
在本教程中,我们将通过SYN洪水攻击和缓解步骤的基础知识。

SYN泛洪攻击利用传输控制协议(TCP)的实现特性,称为3对握手。

以下是正常三通握手中发生的步骤:

1.客户端通过向服务器发送SYN(同步)消息来请求连接。
2.服务器通过将SYN-ACK发送回客户端来确认此请求。
3.客户端用ACK响应,并建立连接。

通过使用预期的ACK代码响应服务器,同步洪泛攻击工作。
通过这些半打开的连接,目标机器TCP Boderlog将被填满,因此可能会忽略所有新连接。
这将导致合法用户忽略。

这种攻击可以用两种方式进行:

直接攻击

在这种攻击中,攻击者在不欺骗其IP源地址的情况下快速发送SYN段。
当检测到时,这种类型的攻击很容易防御,因为我们可以添加一个简单的防火墙规则来阻止具有攻击者的源IP地址的数据包,这将关闭攻击。

2.使用IP地址欺骗

这是一种比直接攻击更复杂的攻击形式。
在此方法中,恶意机会将SYN请求泛洪旋从欺骗IP地址发送到目标机器,导致服务器将SYN-ACK发送到伪造的IP地址,这不会发送ACK,因为它"知道"它从未发送过一个syn。

检测SYN洪水攻击

对访问者的SYN泛洪攻击的通用症状是一个站点需要长时间加载,或者加载页面的某些元素,但不是其他网页。
如果我们怀疑在Web服务器上的SYN泛洪攻击,则可以使用netstat命令检查"syn_received"状态下的Web服务器连接请求。

netstat -tuna | grep :80 | grep SYN_RECV

如果它显示了与此状态的众多连接,则服务器可能会在SYN泛洪攻击下。
如果攻击直接使用单个IP地址大量SYN_RECV数据包,则可以通过在防火墙中添加该IP地址来停止此攻击。
如果服务器上安装了APF或者CSF防火墙,则可以通过执行以下命令来完成此操作:

apf -d IPADDRESS
csf -d IPADDRESS

捍卫SYN洪水攻击

使用syn cookie

这是从SYN洪水攻击中捍卫最有效的方法。
使用SYN Cookie允许服务器避免在SYN队列填满时删除连接。
相反,服务器的行为就像SYN队列已经放大一样。
服务器将相应的SYN + ACK响应发送给客户端,但丢弃SYN队列条目。
如果服务器然后从客户端接收后续的ACK响应,则能够使用在TCP序列号中编码的信息重建SYN队列条目。

可以通过将以下添加到/etc/sysctl.conf来启用SYN Cookie

net.ipv4.tcp_syncookies = 1

修改Sysctl配置文件后,需要执行以下命令以从文件/etc/sysctl.conf加载sysctl设置

sysctl -p

增加SYN Backlog队列

可选的防御技术是增加SYS Backlog队列大小。
默认大小为1024.这可以通过将以下添加到/etc/sysctl.conf来完成

net.ipv4.tcp_max_syn_backlog = 2048

减少SYN_ACK重试

调整内核参数TCP_SYNACK_RETRIES会导致内核关闭早先关闭SYN_RECV状态连接。
默认值为5.

net.ipv4.tcp_synack_retries = 3

设置SYN_RECV超时

降低SYN_RECV的超时值将有助于减少SYN泛洪攻击。
默认值为60,我们可以将其降低到40或者45.这可以通过将以下行添加到sysctl.conf来完成。

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=45

防止IP欺骗

以下Sysctl参数将有助于防止用于SYN泛洪攻击的IP欺骗。

net.ipv4.conf.all.rp_filter = 1

许多托管通过部署使用SYN泛防防御(如NetScreen或者Appsafe)的防火墙提供防止SYN攻击。