Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176516
  • 博文数量: 65
  • 博客积分: 2283
  • 博客等级: 大尉
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-18 17:00
文章分类

全部博文(65)

文章存档

2011年(5)

2010年(20)

2009年(24)

2008年(16)

分类: LINUX

2011-05-10 16:34:42

DDoS (distributed denial-of-service)  DoS (denial-of-service) 在网络上十分常见,而 DoS攻击所传送的请求跟正常的请求一样,分别在于每秒钟发出大量请求到服务器,使服务器的负载增加,最常见的情况是服务器暂停服务。

 mod_evasive 则是一个预防 Apache 遭受 DDos 攻击的模块,可以防止同一个 IP 对相同 URI 发出的大量请求,可设定的选项有:

– 限制同一个 IP 在一定秒数内请求一个页面或档案的次数。
– 
限制同一个 IP 一秒内只可发出 50 个请求。
– 
设定被禁止的 IP 封锁时间。

mod_evasive 安装:

先到如下地址下载包:http://www.zdziarski.com/blog/?page_id=442

目前最新稳定版本是:mod_evasive_1.10.1

解压缩

# tar xzvf tar xzvf mod_evasive_1.10.1.tar.gz

# cd mod_evasive_1.10.1

# /usr/local/apache2/bin/apxs -iac mod_evasive20.c

安装好后,在apache的配置文件中应该能看到以下内容:

LoadModule evasive20_module   modules/mod_evasive20.so

编辑apache配置文件,在apache配置文件中添加如下内容:


DOSHashTableSize    3097
DOSPageCount        5
DOSSiteCount        50
DOSPageInterval     2
DOSSiteInterval     2
DOSBlockingPeriod   10

参数解析:

DOSHashTableSize — 这是占用内存的大小,如果服务器比较繁忙,这个数值要设定大一点。
DOSPageCount — 
同一 IP 在一个时段内可以存取同一页面的次数,超过会被禁止。
DOSSiteCount — 
同一 IP 在一个网站内可以占用多少 Object,超过会禁止。
DOSPageInterval — DOSPageCount 
内的时段设定。
DOSSiteInterval — DOSSiteCount 
的时间设定,以秒为单位。
DOSBlockingPeriod — 
当发现疑似攻击后,使用者会收到 403 Forbidden,这是设定封锁的时间,以秒为单位。

重启apache

# /usr/local/apache2/bin/apachectl restart

对mod_evasive测试验证 ;

防DDOS的模块做好后,我们可以要验证,可以用Apache 压力测试工具 webbench,比如;

# webbench -c 200 -t 10 

注:上面的例子的意思是,对本地服务器上phpinfo.php 在10秒里发起200个连接。

另外一个测试工具就是mod_evasive的解压包的目录中,有个test.pl ,你可以修改IP地址,然后用

#perl test.pl

是不是有效果,请根据 ab工具或 测试脚本出来的结果来查看;

因为我们编译mod_evasive时,用的是默认配置,所以日志被存放在/tmp目录中。如果有DDOS攻击,会在/tmp产生日志。日志的文件是以 dos-开头的;


mod_evasive 的高级配置;

如果想更改一些适合自己的参数,有些必要的参数,并不是通过配置文件修改就一下起作用的,我们要修改源码包中的 mod_evasive.c(Apache 1.x用之) 或 mod_evasive20.c (Apache 2.x用之);

#define DEFAULT_HASH_TBL_SIZE   3097ul // Default hash table size
#define DEFAULT_PAGE_COUNT      2       // Default maximum page hit count per interval
#define DEFAULT_SITE_COUNT      50      // Default maximum site hit count per interval
#define DEFAULT_PAGE_INTERVAL   1       // Default 1 Second page interval
#define DEFAULT_SITE_INTERVAL   1       // Default 1 Second site interval
#define DEFAULT_BLOCKING_PERIOD 10      // Default for Detected IPs; blocked for 10 seconds
#define DEFAULT_LOG_DIR         "/tmp" // Default temp directory

比如我们改改其中的数字,根据英文很容易理解。比如修改日志存放目录,就把/tmp改成别的目录。如果您不知道放在哪好,还是用默认的吧;

如果您在这里更改了参数,不要忘记修改Apache 配置文件中关于mod_evasive 的参数;

如果您想加入一些其它的参数,请查阅源码包中的README,里面有详细说明,大多来说没太大的必要……

这个文件相当重要,如果您想更改某些设置,就要修改这个文件…… 

阅读(1014) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~