分布式拒绝服务攻击
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行
被攻击主机上有大量等待的TCP连接;
网络中充斥着大量的无用的数据包;
严重时会造成系统死机。
更多资料:http://baike.baidu.com/link?url=uFA3D9ZUj7uWPJ-MtKm3C2xYQ-yt30zHbTlRTKP-vVCK1EYstjf_6G7ZZyCn63Fg
浅析解决方案:
方案-:
1 防止SYN-攻击脚本
SYN Flood:是当前最流行的DoS(拒绝服务攻击)与,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。
一. 如何检测是否遭受了DDos攻击
第一种方法:这里有一条非常实用的命令
# netstat -an|grep SYN_RECV|wc –l
如果显示的数据比较大的话,你很可能已经中招了。
netstat -an|grep SYN_RECV|awk ‘{print$5}‘|awk -F: ‘{print$1}‘|sort|uniq -c|sort -rn|awk ‘{if ($1 >5) print $2}‘ >> /tmp/dropip
for i in $(cat /tmp/dropip)
do
/sbin/iptables -A INPUT -s $i -j DROP
echo “$i kill at `date`” >>/var/log/ddos
done
方案二:
执行一个脚本:对同一IP建立连接次数多者予以封闭。基于iptables。
#!/bin/sh if [ -d ‘/usr/local/ddos‘ ]; then echo; echo; echo "Please un-install the previous version first" exit 0 else mkdir /usr/local/ddos fi clear echo; echo ‘Installing DOS-Deflate 0.6‘; echo echo; echo -n ‘Downloading source files...‘ wget -q -O /usr/local/ddos/ddos.conf http://www.inetbase.com/scripts/ddos/ddos.conf echo -n ‘.‘ wget -q -O /usr/local/ddos/LICENSE http://www.inetbase.com/scripts/ddos/LICENSE echo -n ‘.‘ wget -q -O /usr/local/ddos/ignore.ip.list http://www.inetbase.com/scripts/ddos/ignore.ip.list echo -n ‘.‘ wget -q -O /usr/local/ddos/ddos.sh http://www.inetbase.com/scripts/ddos/ddos.sh chmod 0755 /usr/local/ddos/ddos.sh cp -s /usr/local/ddos/ddos.sh /usr/local/sbin/ddos echo ‘...done‘ echo; echo -n ‘Creating cron to run script every minute.....(Default setting)‘ /usr/local/ddos/ddos.sh --cron > /dev/null 2>&1 echo ‘.....done‘ echo; echo ‘Installation has completed.‘ echo ‘Config file is at /usr/local/ddos/ddos.conf‘ echo ‘Please send in your comments and/or suggestions to zaf@vsnl.com‘ echo cat /usr/local/ddos/LICENSE | less
测试:
ab -n 1000 -c 10
ab
选项
-A auth-username:password
对服务器提供BASIC认证信任。 用户名和密码由一个:隔开,并以base64编码形式发送。 无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-c concurrency
一次产生的请求个数。默认是一次一个。
-C cookie-name=value
对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。 此参数可以重复。
-d
不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。
-e csv-file
产生一个以逗号分隔的(CSV)文件, 其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。 由于这种格式已经“二进制化”,所以比‘gnuplot‘格式更有用。
-g gnuplot-file
把所有测试结果写入一个‘gnuplot‘或者TSV (以Tab分隔的)文件。 此文件可以方便地导入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行为标题。
-h
显示使用方法。
-H custom-header
对请求附加额外的头信息。 此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对 (如, "Accept-Encoding: zip/zop;8bit").
-i
执行HEAD请求,而不是GET。
-k
启用HTTP KeepAlive功能,即, 在一个HTTP会话中执行多个请求。 默认时,不启用KeepAlive功能.
-n requests
在测试会话中所执行的请求个数。 默认时,仅执行一个请求,但通常其结果不具有代表意义。
-p POST-file
包含了需要POST的数据的文件.
-P proxy-auth-username:password
对一个中转代理提供BASIC认证信任。 用户名和密码由一个:隔开,并以base64编码形式发送。 无论服务器是否需要(即, 是否发送了401认证需求代码),此字符串都会被发送。
-q
如果处理的请求数大于150, ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。 此-q标记可以抑制这些信息。
-s
用于编译中(ab -h会显示相关信息)使用了SSL的受保护的https, 而不是http协议的时候。此功能是实验性的,也是很简陋的。最好不要用。
-S
不显示中值和标准背离值, 而且在均值和中值为标准背离值的1到2倍时,也不显示警告或出错信息。 默认时,会显示 最小值/均值/最大值等数值。(为以前的版本提供支持).
-t timelimit
测试所进行的最大秒数。其内部隐含值是-n 50000。 它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。
-T content-type
POST数据所使用的Content-type头信息。
-v verbosity
设置显示信息的详细程度 - 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。
-V
显示版本号并退出。
-w
以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。
-x <table>-attributes
设置<table>属性的字符串。 此属性被填入<table 这里 >.
-X proxy[:port]
对请求使用代理服务器。
-y <tr>-attributes
设置<tr>属性的字符串.
-z <td>-attributes
设置<td>属性的字符串.
缺陷
程序中有各种静态声明的固定长度的缓冲区。 另外,对命令行参数、服务器的响应头和其他外部输入的解析也很简单,这可能会有不良后果。
它没有完整地实现HTTP/1.x; 仅接受某些‘预想‘的响应格式。 strstr(3)的频繁使用可能会带来性能问题,即, 你可能是在测试ab而不是服务器的性能。
未完待续,后期附上其他测试工具。
本文出自 “·`米笵6” 博客,请务必保留此出处http://mifan6.blog.51cto.com/9954601/1713305
原文地址:http://mifan6.blog.51cto.com/9954601/1713305