性能测试分析案例-定位DDOS攻击

发布时间:2024年01月14日

环境准备

预先安装 docker、sar 、hping3、tcpdump、curl 等工具,比如 apt-get install docker.io hping3 tcpdump curl。

操作和分析

案例用到三台虚拟机
在这里插入图片描述
其中一台虚拟机运行 Nginx ,用来模拟待分析的 Web 服务器;而另外两台作为 Web 服务器的客户端,其中一台用作 DoS 攻击,而另一台则是正常的客户端。
在终端一中,执行下面的命令运行案例,也就是启动一个最基本的 Nginx 应用:

# 运行Nginx服务并对外开放80端口
# --network=host表示使用主机网络(这是为了方便后面排查问题)
docker run -itd --name=nginx --network=host nginx

在终端二和终端三中,使用 curl 访问 Nginx 监听的端口,运行 curl 命令后,你应该会看到下面这个输出界面:

curl -s -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null http://xxx.xxx.xxx.xxx/
Http code: 200
Total time:0.094636s

访问 Nginx 只需要 9ms(0.009s)。
在终端二中,运行 hping3 命令,来模拟 DoS 攻击:

hping3 -S --flood -p xxx.xxx.xxx.xxx

到终端三中,执行下面的命令,模拟正常客户端的连接

# --connect-timeout表示连接超时时间
$ curl -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null --connect-timeout 10 http://xxx.xxx.xxx.xxx
...
Http code: 000
Total time:10.001s
curl: (28) Connection timed out after 10000 milliseconds

回到终端一中,执行下面的命令:

sar -n DEV 1

在这里插入图片描述

网络接收的 PPS 已经达到了 1200多,但是 BPS 却只有 73kB,这样每个包的大小就只有 62B(73*1024/1200=62)
这明显就是个小包了,不过具体是个什么样的包呢?那我们就用 tcpdump 抓包看看吧。
在终端一中,执行下面的 tcpdump 命令:

tcpdump -i eth0 -n tcp port 80

Flags [S] 表示这是一个 SYN 包。大量的 SYN 包表明,这是一个 SYN Flood 攻击。应用程序考虑识别,并尽早拒绝掉这些恶意流量,比如合理利用缓存、增加 WAF(Web Application Firewall)、使用 CDN 等等。

文章来源:https://blog.csdn.net/bala5569/article/details/135436585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。