防dos攻击的主要方法 多角度查看和缓解DoS攻击办法

一 DoS攻击DoS攻击即拒绝服务攻击,如果细分来说包括非常多种类,有UDP洪水,ACK类型,DNS放大请求,NTP放大类型,TCP洪水,HTTP洪水,SYN洪水 。总之这些攻击的目的是消耗服务器的带宽,内存,和cpu资源,从而让服务器因资源耗尽对一切过来的请求,只能拒绝或提供性能很差的服务,本文就是模拟SYN洪水攻击,并对这种场景进行分析,提供一些缓解攻击的办法 。
二 环境和准备2.1 网络环境目前采用两台虚拟机和一台物理机实现部署环境,虚拟机均为centos8.5,整个网络环境如下:

防dos攻击的主要方法 多角度查看和缓解DoS攻击办法


2.2 软件安装nginx部署的web采用docker简单部署,Dos工具采用hping3 发起syn攻击 。
#podman类似docker,几乎可以通用#-i以交互模式运行容器,通常与 -t 同时使用#-t为容器重新分配一个伪输入终端,通常与 -i 同时使用#-d后台运行容器,并返回容器ID[root@localhost ~]# podmanrun -itd --name=nginx3 --network=host nginx#测试服务是否启动,虽然是404 但是请求速度还是很快的[root@localhost ~]#curl -s -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null http://192.168.31.50Http code: 404Total time:0.000963s攻击工具安装:
yum install hping3三 攻击分析3.1 hping3 发送SYN包攻击# -S 发送SYN包,-p 发送的端口80-i u15 每1us 发送一个包[root@MiWiFi-RA72-srv ~]# hping3 -S -p 80 -i u1 192.168.31.503.2 服务机器分析首先发现访问变慢了,注意有时候并不明显,测试url访问性能:
[root@MiWiFi-RA72-srv ~]#curl -s -w 'Http code: %{http_code}\nTotal time:%{time_total}s\n' -o /dev/null http://192.168.31.50Http code: 404Total time:31.909641s时间确实增加了,竟然要31s,注意一定要发一段时间,不然看不到效果 。那网络有问题,我们首先要看下网络的流量情况:
[root@localhost ~]# sar -n DEV 3平均时间:IFACErxpck/stxpck/srxkB/stxkB/srxcmp/stxcmp/srxmcst/s%ifutil平均时间:lo1.221.220.060.060.000.000.000.00平均时间:ens3316441.2015444.20963.43905.560.000.000.000.79平均时间:ens370.000.000.000.000.000.000.000.00平均时间:ens380.000.000.000.000.000.000.000.00平均时间:ens390.000.000.000.000.000.000.000.00计算平均包长:963*1024/16441.20=59B,发现这些都是小包,下面我们需要继续分析下这些包是什么包,利用tcpdump抓包:
tcpdump -i ens33 -n tcp port 80 -w test.pcap下载下来用wireshark分析下如下: wireshark 打开文件后,通过统计->流量图菜单弹出流分析:
防dos攻击的主要方法 多角度查看和缓解DoS攻击办法


首先我们可以看到192.168.31.200发起了很多的SYN包给192.168.31.50,192.168.31.50给192.168.31.200回复了SYN+ACK包,想建立了TCP连接,但是被192.168.31.200发送RST包中断了,这个和我们预期有些差别,主要是我们的IP没有随机,导致我们会回复RST包,这样虽然半连接也在增多,因为RST会导致终止了,所以消耗资源增加不够快,为了让服务器不回复给我们,我们可以通过hping3的另外选项发送包:
hping3 –rand-source -S -p 80 -i u1 192.168.31.50
抓包后继续用wireshark分析:
防dos攻击的主要方法 多角度查看和缓解DoS攻击办法


可以看到有大量的随机ip对192.168.31.50发起连接,192.168.31.50对这些ip做响应,但是这些ip其实是欺骗的ip,导致无法收到响应包括RST报文,所以会导致SYN+ACK重发,从而消耗系统的资源 。
TCP的三次握手还不清楚的话,可以按照下面的图理解下:
防dos攻击的主要方法 多角度查看和缓解DoS攻击办法


四 缓解办法4.1 封IP如果我们发现有固定的IP发来大量的SYN包,可以采用iptables 封了这个IP,禁止特定ip来发起连接 然后启动防火墙:

推荐阅读