dos攻击(ddos流量攻击购买)

一 DoS攻击DoS攻击就是拒绝服务攻击。如果细分的话,包括很多种,UDP flood,ACK型,DNS放大请求,NTP放大型,TCP flood,HTTP f

一 DoS攻击

DoS攻击就是拒绝服务攻击。如果细分的话,包括很多种,UDP flood,ACK型,DNS放大请求,NTP放大型,TCP flood,HTTP flood,SYN flood。简而言之,这些攻击的目的就是消耗服务器的带宽、内存、cpu资源,使服务器因资源耗尽只能拒绝或提供性能不佳的服务。本文模拟了SYN flood攻击,分析了这种情况,并提供了一些缓解方法。

二 环境和准备2.1 网络环境

目前使用两个虚拟机和一个物理机来实现部署环境。虚拟机为centos8.5,整个网络环境如下:

dos攻击(ddos流量攻击购买)插图

2.2 软件安装

nginx部署的web简单来说就是docker部署,Dos工具利用hp3发起syn攻击。

#podman类似于docker,几乎可以通用#-i在交互模式下运行容器。通常情况下,# -t用于和-t同时给一个伪输入终端重新分配容器,#-d用于和-i同时在后台运行容器,返回容器ID[root @ localhost ~]# pod man run-itd-name = nginx 3-network = host nginx #测试服务是否启动。虽然是404,但是请求速度还是很快的[root @ localhost ~]# curl-s-w & # 39;Http代码:% { http _ code } \总时间:% { time _ total } s \ n & # 39-o/dev/null http://192 . 168 . 31 . 50 http代码:404总时间:0.000963s攻击工具安装:

yum hp3三种攻击分析3.1 hp3发送SYN包攻击# -S发送SYN包,-p口80 -i u15每1us发送一个包[root @ mi wifi-ra72-SRV ~]# hp3-S-p80-iu 192 . 168 . 31 . 503 . 2服务机分析首先发现

[root @ mi wifi-RA72-SRV ~]# curl-s-w & # 39;Http代码:% { http _ code } \总时间:% { time _ total } s \ n & # 39-o/dev/null http://192 . 168 . 31 . 50 http代码:404总时间:31.909641s时间确实增加了,实际需要31s。一会儿小心发,不然看不到效果。网络有问题。我们先来看看网络流量:

[root@localhost ~]# sar -n DEV 3平均时间:iface rxpck/S txp CK/S rxkb/S rx CMP/S txcmp/S rxmcst/S % ifutil平均时间:LO1.22 1.22 0.06 0.06 0.00 0.00平均时间:ENS33 16441.20 15444.20 963.43 905.56 0.00 0 0.79平均时间:ens37 0

pdump-iens 33-n tcpport 80-wtest . pcap被wireshark下载分析如下:wireshark打开文件后,通过统计-->弹出的流量菜单的流量分析:

dos攻击(ddos流量攻击购买)插图(1)

首先我们可以看到192.168.31.200向192.168.31.50发起了很多SYN包,192.168.31.50向192.168.31.200回复了SYN+ACK包,试图建立TCP连接,但是是192.168。因此,我们将回复RST数据包,这样,尽管半连接也在增加,但由于RST会导致终止,资源消耗不会增加得足够快。为了防止服务器回复我们,我们可以通过hp3的另一个选项来发送数据包:

hp3-rand-source-S-p 80-I u1 192 . 168 . 31 . 50

抓取数据包后,继续使用wireshark对其进行分析:

dos攻击(ddos流量攻击购买)插图(2)

可以看到大量随机的IP发起连接到192.168.31.50,192.168.31.50响应这些IP。但是,这些IP实际上是欺骗IP,导致无法接收响应,包括RST消息,这将导致SYN+ACK的重新传输,从而消耗系统资源。

如果TCP的三次握手不清楚,可以按照下图来理解:

dos攻击(ddos流量攻击购买)插图(3)

四 缓解办法4.1 封IP

如果我们发现有一个固定的ip发送大量的SYN包,我们可以使用iptables来密封这个IP,禁止特定的IP发起连接,然后启动防火墙:

# iptables-I input-s 192 . 168 . 31 . 200-p TCP-j reject # start firewall # system CTL start firewalld这个时候我抓住了这个包,发现它被拒绝了。

[root @ mi wifi-RA72-SRV ~]# hp3-S-p 80-I u1 192 . 168 . 31 . 50 hping 192 . 168 . 31 . 50(ens 33 192 . 168 . 31 . 50):S set,40个报头+ 0个数据字节ip过滤的ICMP数据包=192.168.31.50 name = IP过滤的未知ICMP数据包= 192 . 168 . 31 . 50听着,没有回复,也许没有回复-

IP 192 . 168 . 31 . 200 . 60180 >;192.168.31.50.http: Flags [S],seq 633025815,win 512,length 008:29:26.872389 IP 192 . 168 . 31 . 200 . 60181 & gt;192.168.31.50.http: Flags [S],seq 1327904571,win 512,length 008:29:26.872488 IP 192 . 168 . 31 . 200 . 60182 & gt;192.168.31.50.http: Flags [S],seq 1677934026,win 512,length 008:29:26.872498 IP 192 . 168 . 31 . 200 . 60183 & gt;192.168.31.50.http: Flags [S],seq 940613549,win 512,length 008:29:26.872510 IP 192 . 168 . 31 . 200 . 60184 & gt;192.168.31.50.http: Flags [S],seq 245284800,win 512,length 008:29:26.872514 IP 192 . 168 . 31 . 200 . 60185 & gt;192.168.31.50.http: Flags [S],seq 620067640,win 512,length 008:29:26.872612 IP 192 . 168 . 31 . 200 . 60186 & gt;192.168.31.50.http: Flags [S],seq 1859432659,win 512,length 008:29:26.872622 IP 192 . 168 . 31 . 200 . 60187 & gt;192.168.31.50.http: flags [s],seq 2106267374,win512,length09856内核丢弃的数据包。这个限制很大。一旦攻击端改为随机ip或DDoS攻击,就很难封住IP。

4.2 限制每秒的SYN报文

#将syn并发数限制为每秒1个。这可能会造成意外伤害,如果有很多用户受到限制# Iptables-a INPUT-p TCP-syn-m limit-limit 1/s-j accept #将单个IP在60秒内新建立的连接数限制为10 # Iptables-I INPUT-p TCP-D port 80-syn-m recent-name syn _ flood-update-seconds 60-hit count 10-j reject # Delete # Check规则iptables-nl-line-number #删除规则iptables -D的第二行除上述内容外,您还可以检查连接状态:

[root @ localhost ~]# netstat-an | greprcv | WC-L128添加规则后,这个数字为0,表示被拒绝。

4.3 内核参数调整

增加半连接的长度。根据上面的TCP三次握手图,如果增加半连接队列的长度,可以在一定程度上缓解Dos攻击。

半连接队列长度= round up _ power _ of _ two(max _ t(U32,min (somaxconn,sysctl _ max _ syn _ backlog,backlog),8)+1) Roundup _ power _ of _ two是最接近2的指数幂,简单理解为2向上的指数幂。不同的系统版本。

tcp_max_syn_backlog是指定所能接受SYN同步包的最大客户端数量,即半连接上限;somaxconn是指服务端所能accept即处理数据的最大客户端数量,即完成连接上限。 默认值:

[root @ localhost ~]# cat/proc/sys/net/IP v4/TCP _ max _ syn _ backlog 128[root @ localhost ~]# cat/proc/sys/net/core/somaxconn 128 backlog为用户程序设置的队列长度。方法更改如下:[root @ localhost ~]# Sysctl-wnet . IP v4 . TCP _ max _ syn _ backlog = 1024 net . IP v4 . TCP _ max _ syn _ backlog = 1024[root @ localhost ~]# Sysctl net . IP v4 . TCP _ max _ syn _ backlog net . IP v4 . TCP _ max _ syn _ backlog = 1024[root @ localhost ~]# Sysctl-wnet . core . soma xconn = 1024

ss-lnt[root @ localhost ~]# ss-lntState Recv-Q Send-Q本地地址:端口对等地址:端口进程列表EN 0 128 0.0.0.0:111 0.0.0.0:*列表EN 0 128 0.0.0.0:80 0.0.0.0:* *在LISTEN中,其中Send-Q是完整连接队列的长度,Recv-Q是当前使用的数量。全连接队列大小= min(backlog,somaxconn) backlog是用户设置的队列长度,somaxconn同上,是系统参数。

减少SYN-ack重传的次数。收到syn连接后,服务器会回复SYN+ACK。如果回复失败,它将重试几次。默认为5次。我们可以减少重试次数:

[root @ localhost ~]# sysctl net . IP v4 . TCP _ synack _ retries net . IP v4 . TCP _ synack _ retries = 5[root @ localhost ~]# sysctl-w net . IP v4 . TCP _ synack _ retries = 1 net . IP v4 . TCP _ synack _ retries = 1[root @ localhost ~]# sysctl net . IP v4 . TCP _ synack _ retries net . IP v4 . TCP _ SYN ack _ retries = 1打开SYN cookie。对于半连接的队列长度,不太好设置有多长。我们可以打开SYN cookie,这样在连接队列满了之后,就会根据SYN包计算出一个cookie值。这个cookie将被用作要返回的SYN ACK包的初始序列号,服务器将不再存储任何信息。当客户端返回ACK包时,将根据报头信息计算cookie值,这是基于返回的确认序列号的比较。如果是一样的,就是正常连接。如果它是非法的,它将返回一个RST消息。在验证cookie是否合法时,需要确定ACK时间是否在合法前4分钟内到达。

缺点似乎是cookie方法很完美,但是无法重新发送SYN+ACK消息,因为服务器端没有存储任何信息。因为有一定的计算量,而且如果对方使用ACK攻击,服务器端需要计算比较,无法防范。

[root @ localhost ~]# sysctl-wnet . IP v4 . TCP _ sync ookies = 1 net . IP v4 . TCP _ sync ookies = 1。同样,也需要写入/etc/sysctl.conf才能永久有效。

五 总结

Dos攻击,尤其是DDos攻击,采用发送大量数据包的方式消耗服务器端的资源。以上手段只能减缓攻击,不能完全解决问题。业界一般采用流量清洗的方法,将DDos攻击的流量与正常用户请求分离,或者增加CDN缓存、WAF等。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/189259.html

发表回复

登录后才能评论