分类: 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,里面有详细说明,大多来说没太大的必要……
这个文件相当重要,如果您想更改某些设置,就要修改这个文件……