天天看点

DDOS 攻击与防御

1、DDOS 简介

       分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。

  1.1、攻击原理图

DDOS 攻击与防御

   1.2、实验环境搭建

  实验平台:CentOS release 6.4 (Final)

  服务端:node11  192.168.92.21

  攻击端:node12  192.168.92.22

      web_server服务器配置:

          yum -y install httpd     #安装 web 服务

          service httpd start

          vim /var/www/html/index.html  #写一个简单的静态页面

          service iptables start   #开启防火墙

          iptables -I INPUT -p TCP --dport 80 -j ACCEPT   #设置防火墙,运行 80 端口的服务通过

         测试站点是否可以进行访问:http://192.168.92.21/

DDOS 攻击与防御

    1.3、模拟攻击

    工具简介:webbench、ab命令,做压力测试的工具和性能的监控工具

    wget http://home.tiscali.cz/~cz210552/distfiles/webbench-1.5.tar.gz

    yum -y install ctags

    tar xf webbench-1.5.tar.gz

    cd webbench-1.5

   注:已经存在 Makefile 文件,则直接安装即可

   make

   make install

   注:此时出现以下报错

    install -s webbench /usr/local/bin

    install -m 644 webbench.1 /usr/local/man/man1

    install: cannot create regular file `/usr/local/man/man1\': No such file or directory

    make: *** [install] Error 1

  解决: mkdir -p /usr/local/man/man1

  再次重新运行 make install 即可

 附:webbench 使用方法

   webbench -c 客户端 -t 运行测试时间 URL

   例: 模拟100个客户端10秒内对站点进行访问

   webbench -c 100 -t 10 http://192.168.92.21/

   1.3.1、攻击测试  node12 机器

    webbench -c 100 -t 10 http://192.168.92.21/index.html   

   Webbench - Simple Web Benchmark 1.5   

   Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

  Benchmarking: GET http://192.168.92.21/index.html

  100 clients, running 10 sec.

  Speed=49032 pages/min, 48383672 bytes/sec.

  Requests: 8172 susceed, 0 failed.

  注:如上面结果所示,短时间内有大量的请求,则怀疑为DDOS攻击

1.3.1.1、如何查看是否受到DDOS攻击? (web服务器端查看)

   netstat -ntu | awk \'{print $5}\' | cut -d: -f4 | sort | uniq -c | sort -n

DDOS 攻击与防御

 分析:通过命令在被攻击的一端过滤出相同的连接IP在短时间内有上万个,则可能存在DDOS

 1.3.2、如何防止 DDOS

 方法一:手动写iptables 规则,ip地址数比较少时

方法二: 检测到访问次数比较多的ip地址后,自动添加iptables规则。

 例:fail2ban或linux+DDoS deflate

       DDoS deflate介绍:DDoS deflate是一款免费的用来防御和减轻DDoS攻击的脚本。它通过netstat监测跟踪创建大量网络连接的IP地址,在检测到某个结点超过预设的限制时,该程序会通过APF或IPTABLES禁止或阻挡这些IP

实战: 使用DDoS deflate 解决服务器被DDOS攻击的问题

  DDoS deflate 安装:

  [root@node11 ~]# wget http://www.inetbase.com/scripts/ddos/install.sh

  [root@node11 ~]# chmod +x install.sh

  [root@node11 ~]# ./install.sh  #此时可以下载源文件

DDOS 攻击与防御

   注:出现以上状态则证明已经下载成功,直接按q推出即可。

 配置文件路径:/usr/local/ddos/ddos.conf

  DDOS配置文件介绍:

  [root@node11 ~]# cd /usr/local/ddos/

  ddos.conf  #主配置文件

  ddos.sh    #主程序(调用此程序对DDOS进行防御)

  ignore.ip.list  # IP地址的白名单

主配置文件解释:

[root@node11 ddos]# vim ddos.conf  #以下为部分解释

PROGDIR="/usr/local/ddos"  #工作目录

PROG="/usr/local/ddos/ddos.sh"  #主程序

IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"  #白名单列表

CRON="/etc/cron.d/ddos.cron"  #计划任务

APF="/etc/apf/apf"  

IPT="/sbin/iptables"

FREQ=1  #检查的时间为1分钟

NO_OF_CONNECTIONS=150  #最大连接数,超过这个数IP就会被屏蔽,一般默认即可

APF_BAN=0 #此处默认为1,修改为0 使用iptables防火墙,不使用apf防火墙

KILL=1  #是否屏蔽IP,默认即可

EMAIL_TO="root"  #当IP被屏蔽时给指定邮箱发送邮件报警,换成自己的邮箱即可

BAN_PERIOD=600  #禁用IP时间,默认600秒,可根据情况调整

注:安装后,不需要手动运行任何软件,因为有crontab计划任务,每过一分钟,会行自动执行一次。检查是否有不正常的访问量

计划任务解释:

[root@node11 ddos]# cat /etc/cron.d/ddos.cron

SHELL=/bin/sh

0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1

注:每分钟查看一下,是不是有ddos攻击,如果发现就开始拒绝

脚本修改:

[root@node11 ~]# cp /usr/local/ddos/ddos.sh{,.`date +%Y%m%d`}

[root@node11 ~]# vim /usr/local/ddos/ddos.sh

117 netstat -ntu | awk \'{print $5}\' | cut -d: -f1 | sort | uniq -c | sort -nr > $BAD_IP_LIST

注:将117行的 -f1 修改为 -f4 ,如下:

117 netstat -ntu | awk \'{print $5}\' | cut -d: -f4 | sort | uniq -c | sort -nr > $BAD_IP_LIST

测试1:

[root@node12 ~]# webbench -c 100 -t 10 http://192.168.92.21/index.html

DDOS 攻击与防御

服务端防火墙当前状态检查:

DDOS 攻击与防御

注:查看以上的防火墙状态发现已经有 IP 被DROP掉

测试2: 使用 ab 命令进行测试

使用参数: -n  次数    -c  客户端数量

[root@node12 ~]# ab -n 1000 -c 10 http://192.168.92.21/index.html      #输出结果如下所示

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.92.21 (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests

Server Software: Apache/2.2.15

Server Hostname: 192.168.92.21

Server Port: 80

Document Path: /index.html

Document Length: 59140 bytes

Concurrency Level: 10

Time taken for tests: 1.176 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 59412000 bytes

HTML transferred: 59140000 bytes

Requests per second: 850.29 [#/sec] (mean)

Time per request: 11.761 [ms] (mean)

Time per request: 1.176 [ms] (mean, across all concurrent requests)

Transfer rate: 49333.15 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 0 0 0.7 0 11

Processing: 1 11 9.9 8 127

Waiting: 0 6 2.1 6 15

Total: 2 12 10.0 8 127

Percentage of the requests served within a certain time (ms)

50% 8

66% 9

75% 10

80% 12

90% 29

95% 33

98% 40

99% 44

100% 127 (longest request)

服务端防火墙列表状态查看:(等待一段时间再查看)

DDOS 攻击与防御

结果分析:此时服务端防火墙DROP掉了源IP(即:攻击IP),攻击方无法再次使用源IP对服务端进行攻击。

#攻击方输出如下信息:

[root@node12 ~]# ab -n 1000 -c 10 http://192.168.92.21/index.html

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.92.21 (be patient)

apr_poll: The timeout specified has expired (70007)

#同时使用webbench发现无法进行攻击,证明ip被禁止掉了

[root@node12 ~]# webbench -c 100 -t 10 http://192.168.92.21/index.html

Webbench - Simple Web Benchmark 1.5

Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET http://192.168.92.21/index.html

100 clients, running 10 sec.

Connect to server failed. Aborting benchmark.

附录1:软件下载地址

Webbench:

http://home.tiscali.cz/~cz210552/webbench.html

DDoS deflate官方网站:

http://deflate.medialayer.com/

附录2:常见问题解决

1、DDos deflate 安装第一次可能不成功

解决:卸载后再装一次就行了

[root@node11 ~]# wget http://www.inetbase.com/scripts/ddos/uninstall.ddos

[root@node11 ~]# chmod  +x uninstall.ddos

[root@node11 ~]# ./uninstall.ddos