[IT 알아보기]/IT 소식

[그린IDC] mod_evasive 사용하기

이호스트ICT 2011. 5. 17. 12:12
apache2.x Dos 공격막기

shell>wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
--15:33:40--  http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
          => `mod_evasive_1.10.1.tar.gz"
Resolving www.zdziarski.com... 209.51.159.242
Connecting to www.zdziarski.com|209.51.159.242|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20,454 (20K) [application/x-tar]

100%[=================================================================================================================>] 20,454        44.55K/s             

15:33:41 (44.43 KB/s) - `mod_evasive_1.10.1.tar.gz" saved [20454/20454]

shell>tar xvfz mod_evasive_1.10.1.tar.gz
shell>cd mod_evasive
shell>/usr/local/apache/bin/apxs -iac mod_evasive20.c
/usr/local/apache_2.0.59/build/libtool --silent --mode=compile gcc -prefer-pic  -DAP_HAVE_DESIGNATED_INITIALIZER -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -g -O2 -pthread -I/usr/local/apache_2.0.59/include  -I/usr/local/apache_2.0.59/include   -I/usr/local/apache_2.0.59/include   -c -o mod_evasive20.lo mod_evasive20.c && touch mod_evasive20.slo
/usr/local/apache_2.0.59/build/libtool --silent --mode=link gcc -o mod_evasive20.la  -rpath /usr/local/apache_2.0.59/modules -module -avoid-version    mod_evasive20.lo
/usr/local/apache_2.0.59/build/instdso.sh SH_LIBTOOL="/usr/local/apache_2.0.59/build/libtool" mod_evasive20.la /usr/local/apache_2.0.59/modules
/usr/local/apache_2.0.59/build/libtool --mode=install cp mod_evasive20.la /usr/local/apache_2.0.59/modules/
cp .libs/mod_evasive20.so /usr/local/apache_2.0.59/modules/mod_evasive20.so
cp .libs/mod_evasive20.lai /usr/local/apache_2.0.59/modules/mod_evasive20.la
cp .libs/mod_evasive20.a /usr/local/apache_2.0.59/modules/mod_evasive20.a
ranlib /usr/local/apache_2.0.59/modules/mod_evasive20.a
chmod 644 /usr/local/apache_2.0.59/modules/mod_evasive20.a
PATH="$PATH:/sbin" ldconfig -n /usr/local/apache_2.0.59/modules
----------------------------------------------------------------------
Libraries have been installed in:
  /usr/local/apache_2.0.59/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR"
flag during linking and do at least one of the following:
  - add LIBDIR to the `LD_LIBRARY_PATH" environment variable
    during execution
  - add LIBDIR to the `LD_RUN_PATH" environment variable
    during linking
  - use the `-Wl,--rpath -Wl,LIBDIR" linker flag
  - have your system administrator add LIBDIR to `/etc/ld.so.conf"

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/local/apache_2.0.59/modules/mod_evasive20.so
[activating module `evasive20" in /usr/local/apache_2.0.59/conf/httpd.conf]
shell>ls /usr/local/apache/modules/
httpd.exp         libphp4.so        mod_evasive20.so  mod_url2.so

설치 후 httpd.conf 파일 안에 다음과 같은 설정을 입력하여 준다.

<IfModule mod_evasive.c>
  DOSHashTableSize    3097
  DOSPageCount        20
  DOSSiteCount        100
  DOSPageInterval     1
  DOSSiteInterval     1
  DOSBlockingPeriod   10
  DOSEmailNotify      sulinux@sulinux.net
  DOSLogDir           "/var/lock/mod_evasive"
  DOSWhitelist        127.0.0.1
</IfModule>

설정에 대한 설명은 다음과 같다.

   1. DOSPageCount: 몇개의 연속 pagehit 에 대해 차단 조치를 할 것인가에 대한 설정.
   2. DOSSiteCount: 몇개의 연속 site 접속에 대해 차단 조치를 할 것인가에 대한 설정.
   3. DOSPageInterval: pagehit 에 대한 "허용될 연속 접속 사이의 시간 간격"을 (초) 단위로 입력.
   4. DOSSiteInterval: site 접속에 대한 "허용될 연속 접속 사이의 시간 간격"을 (초) 단위로 입력.
   5. DOSBlockingPeriod: 차단된 호스트가 풀릴 때 까지의 시간을 (초) 단위로 입력.
   6. DOSEmailNotify: 공격에 대한 정보를 보낼 메일 주소.
   7. DOSLogDir: 로그파일 경로
   8. DOSWhitelist: 차단에서 제외될 호스트

필자의 설정을 설명하자면 다음과 같다.

** 동일한 호스트로부터 "1초" 사이에 "20번" 이상의 pagehit 가 이루어질 경우 호스트 차단.
** 동일한 호스트로부터 "1초" 사이에 "100번" 이상의 site 접속 이 이루어질 경우 호스트 차단.
** 차단된 호스트는 10초 동안 차단한다.
** DoS 공격이 이루질 때 admin@qaris.net 으로 메일을 보낸다.
** 127.0.0.1 은 차단 조치를 하지 않는다.