如何在 Linux 上模拟和缓解 DDoS入侵
发布时间:2022-07-16 12:06:39 所属栏目:云计算 来源:互联网
导读:在我的上一篇文章谈到了如何使用 tcpdump 和 wireshark,并带您了解了几个用例。今天我们来看看另一个常见的问题,如何缓解 DDoS(分布式拒绝服务)导致的性能下降。 什么是 DDoS? DDoS 的前身是 DoS(Denial of Service),即拒绝服务攻击,是指利用大量合
|
在我的上一篇文章谈到了如何使用 tcpdump 和 wireshark,并带您了解了几个用例。今天我们来看看另一个常见的问题,如何缓解 DDoS(分布式拒绝服务)导致的性能下降。 什么是 DDoS? DDoS 的前身是 DoS(Denial of Service),即拒绝服务攻击,是指利用大量合理请求占用过多目标资源,使目标服务无法响应正常的请求. DDoS(Distributed Denial of Service)采用基于 DoS 的分布式架构,利用多台主机同时攻击目标主机。这样,即使目标服务部署了网络防御设备,仍然无法应对大量的网络请求。 从攻击原理来看,DDoS 可分为以下几种。 用尽带宽:无论是服务器还是路由器、交换机等网络设备,带宽都有一个固定的上限。当带宽耗尽时,会出现网络拥塞,无法传输其他正常的网络数据包。 耗尽系统资源:网络服务的正常运行需要一定的系统资源,如CPU、内存等物理资源,以及连接表等软件资源。一旦资源耗尽,系统将无法处理其他正常的网络连接。 耗尽应用资源:应用程序的运行通常还需要与其他资源或系统进行交互。如果应用程序一直忙于处理无效请求,也会导致正常请求的处理速度变慢,甚至没有响应。 无论哪种类型的 DDoS,危害都是巨大的。那么,如何发现系统遭受了 DDoS 攻击,如何应对这种攻击呢?让我带您了解一个现实生活中的用例。 案例准备 您需要遵循: 3 台 Linux 主机:应用程序、攻击者、客户端 预安装 docker、sar、hping3、tcpdump、curl。 应用服务器 让我们在应用主机上启动一个简单的 nginx 服务: 客户端 然后,在客户端主机中,使用 curl 访问 Nginx 正在监听的端口,并确认 Nginx 已经正常启动: 从这里可以看出,正常情况下,我们访问 Nginx 只需要 2ms(0.002s)。 攻击者 现在,让我们从攻击者主机那里运行 hping3 命令来模拟 Dos 攻击: 缓解攻击 现在让我们回到客户端主机,再次尝试 curl 命令: 这次普通客户端的连接超时,其并没有收到 Nginx 服务的响应。 这里发生了什么事呢?让我们回到主机应用程序,并检查当前的网络状态: 从这次 sar 的输出可以看出,网络接收到的 PPS 已经达到 2 万多,但是 BPS 只有 1174kB。因此,可以计算每个包的大小只有 54B()。 包大小不算大,但这是个什么样的包呢?让我们使用 tcpdump 来捕获: 在该输出中,Flags [S] 表示这是一个 SYN 数据包。而大量的 SYN 数据包表明这是一次 SYN Flood 攻击。如果我们用 wireshark 来观察,可以更加直观地看到 SYN Flood 的过程: 事实上,SYN Flood 是互联网上最经典的 DDoS 攻击。从上图也可以看出它的原理: 客户端构造大量 SYN 包,请求建立 TCP 连接; 服务器收到包后,会向源 IP 发送一个 SYN+ACK 包,并等待三次握手的最后一个 ACK 包,直到链接超时。 这种等待状态的 TCP 连接通常也称为半开连接(Half-Open Connection)。由于连接表(Connection Table)的大小是有限的,而大量的半开连接会导致连接表快速填满,从而无法建立新的 TCP 连接。 从下面的 TCP 状态图可以看到,此时服务器端的 TCP 连接会处于 SYN_RECEIVED 状态: 我们可以使用 netstat 来查看所有连接的状态,但需要注意的是 SYN_REVEIVED 的状态通常缩写为 SYN_RECV。 从结果中可以发现,存在大量的 SYN_RECV 状态的连接,源 IP 地址为 172.31.82.28。现在,让我们统计一下正处于 SYN_RECV 状态的连接数: 找出源 IP 后,只需丢弃相关数据包即可解决 SYN 攻击的问题。此时,iptables 可以帮你完成这个任务:(注意:Serban 在评论中建议“在这种情况下,DROP 比可能 REJECT 更好”) 执行上述命令后,让我们再次从客户端主机尝试 curl: 但一般来说,SYN Flood 攻击中的源 IP 是不固定的(例如,您可以通过将 --rand-source 选项添加到 hping3 命令来随机化源 IP)。此时,刚才的方法并不适用。 幸运的是,我们还有许多其他方法可以达到类似的目的。例如,我们可以通过两种方式限制同步数据包的速率: 到目前为止,我们已经初步限制了 SYN Flood 攻击。但这还不够,因为我们的案例只是单一的攻击源。 如果多台机器同时发送 SYN Flood,则该方法可能直接失效。因为您可能无法通过 SSH 连接到机器(SSH 也是基于 TCP 的),更不用说执行上面的那些排查命令了。 (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


浙公网安备 33038102330466号