Chinaunix首页 | 论坛 | 博客
  • 博客访问: 596165
  • 博文数量: 95
  • 博客积分: 1573
  • 博客等级: 上尉
  • 技术积分: 1030
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-23 10:46
个人简介

hello world!

文章分类

全部博文(95)

文章存档

2014年(1)

2013年(44)

2012年(50)

分类: LINUX

2013-03-20 10:52:20


  

在服务器管理中,经常遇到DDOS攻击WWW服务器。对于Apachehttpd)服务器来说,防御DDOS是通过mod_evasive来实现的。本文将介绍mod_evasive模块的安装、配置。

一、什么是DDOS攻击?

DDoS也就是分布式拒绝服务攻击。它使用与普通的拒绝服务攻击同样的方法,但是发起攻击的源是多个。通常攻击者使用下载的工具渗透无保护的主机,当获得该主机的适当的访问权限后,攻击者在主机中安装软件的服务或进程(以下简称代理)。这些代理保持睡眠状态,直到从它们的主控端得到指令,对指定的目标发起拒绝服务攻击。

二、如何确认自己受到DDOS攻击?

在系统上执行:

netstat -ntu | awk ‘{print $5}’ | cut -d -f1 | sort | uniq -c | sort -n

执行后,将会显示服务器上所有的每个IP多少个连接数。

每个IP几个、十几个或几十个连接数都还算比较正常,如果有成百上千肯定就不正常了。

1 mod_evasive 介绍;

  mod_evasive Apachehttpd)服务器的防DDOS的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御 DDOS攻击,但在一定条件下,还是起到缓服Apachehttpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用,可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙,所以是否这种组合效果有更好的效果,我没办法验证。

  mod_evasive 的官方地址: 

2 mod_evasive 的安装和配置;

2.1 mod_evasive 的下载地址;

2.2 mod_evasive 的安装;

  安装 mod_evasive 之前,你要用安装Apache(httpd)服务器软件包,还要安装httpd-devel apache-dev。在Slackware 12.0中,安装httpd软件即可;

  对于Apache 1.x 请用下面的编译方法;

#/usr/sbin/apxs -iac mod_evasive.c

  对于Apache 2.x 可以用下面的办法;

#tar zxvf mod_evasive_1.10.1.tar.gz

#cd mod_evasive

#/usr/sbin/apxs -i -a -c mod_evasive20.c

  注:apxs 用于编译模块工具;如果是用系统自带的软件包,一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的,你应该自己来指定路径;

  我们然后修改/etc/ld.so.conf 文件,把编译出来的动态模块的所在位置指定在 ld.so.conf中;比如我用的是Aapche 2.x ,编译完成后,模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中;那我们就要把这个目录写入到ld.so.conf中。

#echo "/usr/lib/httpd/modules" >> /etc/ld.so.conf

#ldconfig

  注: 具体要与你的系统环境为准,不要照搬照抄,如果你对Linux不太熟的话;

2.3 mod_evasive 的配置;

  在编译安装完成后,会自动插入一行到Apache 配置文件中,对于Apache 2.x 版本中,应该在其配置文件中有类似下面的一行;

LoadModule evasive20_module   lib/httpd/modules/mod_evasive20.so

  对于Apache 1.x来说,也应该差不多,大体只是路径不同罢了;

  然后我们再修改 Apache 的配置文件,配置文件名为httpd.conf

  在Apache v1.x 版本中,要加入;

    DOSHashTableSize    3097

    DOSPageCount        2

    DOSSiteCount        50

    DOSPageInterval     1

    DOSSiteInterval     1

    DOSBlockingPeriod   10

Apache v2.x加入;

    DOSHashTableSize    3097   //记录和存放黑名单的哈西表大小,如果服务器访问量很大,可以加大该值

    DOSPageCount        2      //同一个页面在同一时间内可以被同一个用户访问的次数,超过该数字就会被列为攻击,同一时间的数值可以在DosPageInterval参数中设置。

    DOSSiteCount        50     //同一个用户在同一个网站内可以同时打开的访问数,一个时间的数值在DOSSiteInterval中设置。

    DOSPageInterval     1      //设置DOSPageCount中时间长度标准,默认值为1

    DOSSiteInterval     1      //设置DOSSiteCount中时间长度标准。

    DOSBlockingPeriod   10     //被封时间间隔秒,这中间会收到 403 (Forbidden) 的返回。

 

mod_evasive其他可选参数:
  DOSEmailNotify lee@toplee.com 设置受到攻击时接收攻击信息提示的邮箱地址。
  DOSSystemCommand “su - someuser -c ‘/sbin/… %s …’” 受到攻击时Apache运行用户执行的系统命令
  DOSLogDir “/var/lock/mod_dosevasive” 攻击日志存放目录,BSD上默认是 /tmp 

  如果您不知道把这些插入到哪,用下面的办法做也是可以的;

  在/etc目录中创建一个文件,比如mod_evasive.conf

#touch /etc/mod_evasive.conf

  然后把根据自己的Apache版本来加入相应的内容;

  接着我们再修改 httpd.conf ,在最后一行加入

Include /etc/mod_evasive.conf

  修改完成后,我们要重启Apache服务器;

  比如在Slackware 12.0中,Apache 2.x的重启,我们要用到

#/etc/rc.d/rc.httpd restart

  在RedhatFededoraDebianUbuntuCentOS中的Apache,可以用;

#/etc/init.d/httpd restart

#/etc/init.d/apache restart

  大体上差不多是这样的……

2.4 mod_evasive测试验证

  防DDOS的模块做好后,我们可以要验证,可以用Apache 自带的ab工具,系统默认安装在/usr/sbin目录中;比如;

#/usr/sbin/ab -n 1000 -c 50

  注:上面的例子的意思是,如果您的服务器是googleWEB服务器,我们要发送数据请求包,总共1000个,每次并发50个;

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

#perl test.pl

  

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

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

3 mod_evasive 的高级配置;

  如果想更改一些适合自己的参数,有些必要的参数,并不是通过配置文件修改就一下起作用的,我们要修改源码包中的 mod_evasive.cApache 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,里面有详细说明,大多来说没太大的必要……

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

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