实战在Centos5.3下mod_dosevasive对抗DDos攻击

转截请写明出处,谢谢!

 

     最近老同事的电子商务网站经常性的对手ab,无奈我花些时间google,发现有不少朋友用mod_dosevasive来对抗ddos攻击(当然是小范围的,如果没有带宽和硬件的保障效果会更好).

居体的安装可以参看

 

关于Apache (httpd)服务器防DDOS模块mod_evasive的使用说明

 

上面写的够详细了。

下面是我的安装过程

1.安装apxs 即要有 apache开发版本的支持

#yum install httpd-devel

 

2.进入mod_evasive目录

查看apxs在哪里

#whereis apxs /* /usr/bin/apxs*/

#/usr/bin/apxs -i -a -c mod_dosevasive20.c

 

执行上面的命令后系统会在/etc/httpd/conf/httpd.conf中加入下面一行

LoadModule evasive20_module   /usr/lib/httpd/modules/mod_evasive20.so

 

3.加入在被DDOS时的处理操作

手工在/etc/httpd/conf/httpd.conf最下方加入下面内容

 

<IfModule mod_evasive20.c>

    DOSHashTableSize    3097

    DOSPageCount        2

    DOSSiteCount        50

    DOSPageInterval     1

    DOSSiteInterval     1

    DOSBlockingPeriod   10

    DOSEmailNotifymy@email.com

    DOSSystemCommand    "sudo iptables -A INPUT -s %s -p tcp --dport 80  -j DROP"

    DOSLogDir           "/tmp/lock/mod_evasive"

</IfModule>

 

针对上面的配置在mod_dosevasive目录下面的REAME中有详细说明。

做了上面的配置之后记得要重启apache

 

4.重启apache

#service httpd restart

 

4.测试

我用压力测试工具ab

#ab -n 1000 -c 100 http://192.168.1.254/index.php 

 

5.查看是否本机IP(192.168.1.100)是否被封

#iptables -nvL

显示:

 

[c-sharp]  view plain copy
  1. Chain INPUT (policy ACCEPT 64628 packets, 6176K bytes)  
  2.  pkts bytes target     prot opt in     out     source               destination           
  3. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)  
  4.  pkts bytes target     prot opt in     out     source               destination           
  5. Chain OUTPUT (policy ACCEPT 49010 packets, 10M bytes)  
  6.  pkts bytes target     prot opt in     out     source               destination    

 

 

 

结果显示并没有封着我的本机IP

 

分析原因是apache用户执行sudo处没有执行,因为我把

DOSSystemCommand    "sudo iptables -A INPUT -s %s -p tcp --dport 80  -j DROP"

改成了

DOSSystemCommand    "/bin/touch /tmp/%s.log"

重启apache没有问题故可以判断是sudo执行iptables的问题。因iptables命令是一定要root用户才能执行的。

中间我还把相关的命令写在了一个shell(/tmp/do.sh)中,并且把do.sh的权限改为4755(该权限会改变文件执行的属主为root)

do.sh

 

 

 

[c-sharp] view plain copy
  1. #!/bin/sh  
  2. #相关的参数判断自己来吧  
  3. /sbin/iptables -A INPUT -s $1 -p tcp --dport 80  -j DROP  

 

重启apache再压力测试。用iptables -nvL查看还是没有看到策略中有被封的IP

 

 

针对上面的测试问题就在定位到了sudo 下面就是google.

最终找到相关的答案

 

Gentoo Sudo(ers)指南

 

简单的步骤就是

#visudo

加入下面的内容

apache ALL=NOPASSWD: /sbin/iptables

 

然后用sudo -l可以查看apache用户是否成功加入可以执行sudo的行列

 

重启apache->压力测试->查看防火墙策略->结果依旧(失败)查看apache的error日志显示

sudo: sorry, you must have a tty to run sudo

意思就是apache运行sudo要求是终端模式,在做web服务器用sudo的时候肯定是不能用终端了。

经查看visudo的配置和google的结果显示 我们需要将visudo中的

Defaults    requiretty

注解掉

#Defaults    requiretty

 

最终重复测试流程在

#iptables -nvL的命令下看到了被封堵的记录

 

[c-sharp]  view plain copy
  1. Chain INPUT (policy ACCEPT 64543 packets, 6168K bytes)  
  2.  pkts bytes target     prot opt in     out     source               destination           
  3.   836 39828 DROP       tcp  --  *      *       192.168.1.100        0.0.0.0/0           tcp dpt:80   
  4. Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)  
  5.  pkts bytes target     prot opt in     out     source               destination           
  6. Chain OUTPUT (policy ACCEPT 48945 packets, 10M bytes)  
  7.  pkts bytes target     prot opt in     out     source               destination        

 

 

 

 

 

 

总结:
你需要了解一些基本的shell,iptables知识,当然还有google工具
上面只是一个简单的 iptables策略,你需要什么特殊的控件可以把相关的控件(如发邮件,写数据库)等操作写入到一个shell中然后改为DOSSystemCommand    "sudo /path/to/youshell %s"
说明:
如发现有不足之处请反馈我,我将非常感谢。
该文章是我在真实环境下面测试通过的总结。
参考资料:
其它:
MediaLayer防DDOS: http://deflate.medialayer.com/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装方法: 1、下载附件中的压缩包,解压并拷贝mod_dosevasive22.dll到Apache安装目录下的modules目录(当然也可以是其他目录,需要自己修改路径)。 2、修改Apache的配置文件http.conf。 添加以下内容 LoadModule dosevasive22_module modules/mod_dosevasive22.so DOSHashTableSize 3097 DOSPageCount 3 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 其中DOSHashTableSize 3097 记录黑名单的尺寸 DOSPageCount 3 每个页面被判断为dos攻击的读取次数 DOSSiteCount 50 每个站点被判断为dos攻击的读取部件(object)的个数 DOSPageInterval 1 读取页面间隔秒 DOSSiteInterval 1 读取站点间隔秒 DOSBlockingPeriod 10 被封时间间隔秒 mod_dosevasive v1.10 什么是mod_dosevasive? mod_dosevasive是一种提供躲避 HTTP DOS/DDOS攻击或暴力强制攻击的apache模块。它同样可以用作网络探测和管理的工具,通过简单的配置,就可以同ipchains(ip链?)防 火墙,路由器等设备进行对话。并通过email或系统日志提供报告。 发现攻击是通过创建一个内建的IP地址和URIs的动态哈希表来完成,并且阻止同一ip在以下的情况: 1.在同一秒多次请求同一页面 2.对同一child(对象?)作出超过50个并发请求 3.被列入黑名单的ip 这种方式在单点攻击和分布式多点攻击的状况下都能很好工作,但如同其它的防黑软件一样,只是针对于那些对网络带宽和处理器消耗的攻击,所以这就是为什么我们要推荐你将它与你的防火墙和路由器配合使用,因为这样才能提供最大限度的保护。 这 个模块有一个内建的滤除机制和级别设定,对付不同情况,正因如此合法请求不会受到妨碍,即使一个用户数次连击“刷新”,也不会受到影响,除非,他是故意这 样做的。mod_dosevasive完全可以通过apache配置文件来配置,很容易就可以集成到你的web服务器,并且容易使用。 DOSHashTableSize ---------------- 哈希表的大小决定每个子级哈希表的顶级节点数,越多则越可避免反复的查表,但会占据更多内存,如果你的服务器要应付很多访问,那就增大它。The value you specify will automatically be tiered up to the next prime number in the primes list (see mod_dosevasive.c for a list of primes used). DOSPageCount ------------ 规定请求同一页面(URI)的时间间隔犯规的次数,一旦超过,用户ip将被列入黑名单 DOSSiteCount ------------ 规定请求站内同一物件的时间间隔犯规的次数,一旦超过,用户ip将被列入黑名单 DOSPageInterval --------------- 同一页面的规定间隔时间,默认为1秒 DOSSiteInterval --------------- 站内同一物件的时间间隔,默认为1秒 DOSBlockingPeriod ----------------- The blocking period 是规定列入黑名单内ip的禁止时限,在时限内,用户继续访问将收到403 (Forbidden)的错误提示,并且计时器将重置。由于列入黑名单后每次访问都会重新计时,所以不必将时限设置太大。在Dos攻击下,计时器也会保持 重置 DOSEmailNotify -------------- 假如这个选项被设置,每个ip被列入黑名单时,都将发送email通知。但有机制防止重复发送相同的通知 注意:请确定mod_dosevasive.c (or mod_dosevasive20.c)已正确配置。 默认配置是 "/bin/mail -t %s" %s 是email发送的目的地址,假如你是linux或其它使用别的邮箱的操作系统,你需要修改这里 DOSSystemCommand ---------------- 假如设置了此项,当有ip被列入黑名单,指定的系统命令将被执行,此项功能被设计为受攻击时可以执行ip过滤器和其它的工具软件,有内建机制避免对相同攻击作重复反应 用 %s 表示黑名单中的ip DOSLogDir --------- 系统日志目录 默认"/tmp"目录用作保密机制,仅向一些特权级用户开放 (这里有些不懂,可能翻错了) By default "/tmp" will be used for locking mechanism, which opens some security issues if your system is open to shell users. 在没有特权shell用户时,你应该为apache服务器用户(通常为root)创建一个只可写的文件夹,并在httpd.conf里配置访问权限 WHITELISTING IP ADDRESSES 在1.8版中提供信任ip机制 进入信任ip名单的ip它们将不会受到阻止,次功能主要是用于保护软件,scripts,本地搜索,或其它的自动工具对服务器进行大量的资源请求时不会被阻止 请确认而不是用在添加客户或其它什么类别的人员,因为这将给本模块进行正常工作带来阻碍 信任ip名单应在apache配置文件中添加如下格式的字段(可以是ip段) DOSWhitelist 127.0.0.1 DOSWhitelist 127.0.0.* ip地址后三段可以使用通配符,并且可以各格式复用 TWEAKING APACHE keep-alive项是确保能阻止攻击(至少其中一部分攻击). 但在阻止攻击,发送403页面前,5-10 个页面还是会通过阻止而发送 . 所以你必须设置足够高的MaxRequestsPerChild, 但不是无限,是一个非零的数,默认的MaxRequestsPerChild设定是10000. 这还是将允许少量的攻击进入,但如果你配合防火强使用,将天衣无缝 TESTING 运行 test.pl来测试是否安装成功,如果不是localhost的话,修改其中的服务器地址字段,成功的话在25-50个(取决于你的配置)请求后你将收到403 forbidden回复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值