1、DDOS 简介
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。
1.1、攻击原理图
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/
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
分析:通过命令在被攻击的一端过滤出相同的连接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 #此时可以下载源文件
注:出现以上状态则证明已经下载成功,直接按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
服务端防火墙当前状态检查:
注:查看以上的防火墙状态发现已经有 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)
服务端防火墙列表状态查看:(等待一段时间再查看)
结果分析:此时服务端防火墙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