카테고리 없음

mod_dosevasive 를 통한 apache 웹서버 Dos 막기

저멀리날아 2006. 2. 15. 09:16

---------------------------------------------------------------------------------------
#. mod_dosevasive이란 무엇인가
---------------------------------------------------------------------------------------
이것은 HTTP Dos 또는 DDos 스택 또는 저돌적인 공격으로부터 아파치를 보호하는데 있습니다.
이것은 ipchains, 방화벽, 라우터등으로 쉽게 구성될 수 있도록 디자인 되었습니다.

탐지는 주소, URI의 IP 내부 동적 해쉬테이블을 생성함으로 수행되고, 각 아이피별로 거부됩니다.
- 초당 몇번 이상의 같은 페이지를 요청하는 경우
- 초당 같은 자식노드를 동시에 50번 이상 생성하는 경우
- 일시적으로 블러킹되는 동안 어떠한 요청을 생성하는 경우

---------------------------------------------------------------------------------------
1. mod_dosevasive 설치
---------------------------------------------------------------------------------------
다운로드 :
http://www.rootman.co.kr/bbs/zboard.php?category=11&id=dataroom
http://www.nuclearelephant.com/projects/dosevasive/

[
root@rootman root]# tar xvfz mod_dosevasive.1.8.tar.gz
[
root@rootman root]# cd /usr/local/apache/bin
[
root@rootman bin]# ./apxs -iac ../mod_dosevasive/mod_dosevasive.c
[
root@rootman bin]# ./apxs -iac ../mod_dosevasive/mod_dosevasive.c
gcc -DLINUX=22 -DUSE_HSREGEX -fpic -DSHARED_CORE -DSHARED_MODULE -I/usr/local/apache/include -c ../mod_dosevasive/mod_dosevasive.c
gcc -shared -o ../mod_dosevasive/mod_dosevasive.so mod_dosevasive.o
[activating module `dosevasive' in /usr/local/apache/conf/httpd.conf]
cp ../mod_dosevasive/mod_dosevasive.so /usr/local/apache/libexec/mod_dosevasive.so
chmod 755 /usr/local/apache/libexec/mod_dosevasive.so
cp /usr/local/apache/conf/httpd.conf /usr/local/apache/conf/httpd.conf.bak
cp /usr/local/apache/conf/httpd.conf.new /usr/local/apache/conf/httpd.conf
rm /usr/local/apache/conf/httpd.conf.new

[
root@rootman root]# vi /usr/local/apache/conf/httpd.conf <--- 아래두줄이 추가되었나 확인한다.
LoadModule dosevasive_module libexec/mod_dosevasive.so
AddModule mod_dosevasive.c

[
root@rootman /root]# /usr/local/apache/bin/apachectl graceful <--- 아파치재가동시킨다.


---------------------------------------------------------------------------------------
2. httpd.conf에는 다음과 같이 설정을 추가한다.
---------------------------------------------------------------------------------------
<IfModule mod_dosevasive.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 3600
</IfModule>

----------------------------------------------
추가적으로 지시자를 추가하실 수 있습니다.
----------------------------------------------
DOSEmailNotify
master@rootman.co.kr
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"

- DOSHashTableSize 
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정합니다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다

접속량이 많으면 이 수치를 높혀도 된다.

- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.

- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.

HTML 내에 이미지가 10개이면 요청 건수는 HTML포함하여 11번이 되므로 이미지가 많은 싸이트는 숫자를 크게 한다.

- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.

- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.

- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간.30 이면 30초간 Block 시킴
이때 클라이언트는 403 (Forbidden) 에러를 출력하게 된다.

- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.

주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다.
디폴트는 "/bin/mail -t %s" 이다.

- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.
이것은 아이피 필터링이나 다른 도구를 사용하도록 설계되었습니다.



---------------------------------------------------------------------------------------
3. 인가된 IP 주소 할당
---------------------------------------------------------------------------------------
버전 1.8에서는 아이피가 블러킹되더라도 인가된 클라이언트 아이피에 대해서는 적용되지 않습니다.
인가시키는 목적은 소프트웨어, 스크립트, 로컬서치로봇, 해당 서버로부터의 많은 요청인한 웹거부로 부터의 또다른 프로그램을 보호하는데 있습니다.

아파치에서 설정하는 방법은 다음과 같습니다.

DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*

와일드카드는(*) 필요하다면 최대 8진수(xxx.*.*.*)까지 사용할 수 있습니다.


---------------------------------------------------------------------------------------
4. 테스트 하기
---------------------------------------------------------------------------------------
[
root@rootman mod_dosevasive]# perl test.pl
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden