어느날인가 부터 갑자기 트래픽이 늘어나 하루 힛트수가 9천~1만 가까이를 계속 상회하는듯 하더니, 급기야는 서버가 마비되는듯한 증상을 보이기 시작했다.
혹시라도 D-Dos 공격을 받고 있는게 아닌가 싶어 이를 방지하기 위한 자료가 있나 찾아보았더니, "mod_evasive"라는 Apache 모듈이 있는게 아닌가~
자료를 찾아서 다운로드 하고, 설치를 한후 뚝 떨어진 트래픽에 의해 일 방문자 1천명정도.......
그런데, 집에서 홈페이지에 접속해서 2~3번 페이지 이동이 이뤄지는 순간 갑자기 나타나는
"403 Forbidden Error"
헉! 서버 죽은건가? 라는 생각에.... 회사 컴퓨터에 원격으로 접속해서 테스트 해보니 별 이상이 없다. -,.-;
그렇다면 원인은 단 하나...? "mod_evasive" 설정이 잘못된 것일까나?
결국 설정에 문제가 있었고 이로 인해 페이지만 2~3페이지 넘어가도 페이지를 찾을 수 없다는 오류를 만나게 되었고, 다른 사용자들의 접속에도 문제가 있었던것 같다.
그래서 다시 자료를 찾아 정리하기~~~ 다른분들도 도움이 되시길~
공식 홈페이지 : http://www.zdziarski.com/projects/mod_evasive/
1. mod_evasive이란 무엇인가?
이것은 HTTP Dos 또는 DDos 스택 또는 저돌적인 공격으로부터 아파치를 보호하는데 있습니다.
이것은 ipchains, 방화벽, 라우터등으로 쉽게 구성될 수 있도록 디자인 되었습니다.
탐지는 주소, URI의 IP 내부 동적 해쉬테이블을 생성함으로 수행되고, 각 아이피별로 거부됩니다.
- 초당 몇번 이상의 같은 페이지를 요청하는 경우
- 초당 같은 자식노드를 동시에 50번 이상 생성하는 경우
- 일시적으로 블러킹되는 동안 어떠한 요청을 생성하는 경우
2. mod_evasive의 설치
# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
# 압축해제
# tar xvzf mod_evasive_1.10.1.tar.gz
# 디렉토리 이동
# cd mod_evasive
# 모듈 추가
# /usr/local/apache/bin/apxs -iac mod_evasive.c -> Apache.1.x
# /usr/local/apache/bin/apxs -iac mod_evasive20.c -> Apache.2.x
# 환경설정
# vi /usr/local/apache/conf/httpd.conf
# 아파치 1.X와 2.X에서의 모듈명칭이 약간 차이가 있으므로 주의할 것!
# 아래에 해당하는 내용이 존재하는지 확인 한다. 없으면 추가.
LoadModule evasive_module modules/mod_evasive.so -> Apache.1.x
LoadModule evasive20_module modules/mod_evasive20.so -> Apache.2.x
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 30
DOSEmailNotify webmaster@yoursite.com
DOSLogDir "/usr/local/apache/logs/mod_evasive.log"
DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
</IfModule>
# 환경설정 검사
# apachectl configtest
# 재시작
# apachectl -k restart
3. 각 지시자에 대한 설명
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정한다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다
접속량이 많으면 이 수치를 높혀도 된다.
- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.
- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.
- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.
- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.
- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간.
이때 클라이언트는 403 (Forbidden) 에러를 출력하게 된다.
- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.
주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다. 디폴트는 "/bin/mail -t %s" 이다.
- DOSLogDir
로그 파일 경로
- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.
- DOSWhitelist
차단에서 제외될 호스트
DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.* - (와일드카드는(*) 필요하다면 최대 8진수(xxx.*.*.*)까지 사용할 수 있다.)
4. 테스트하기
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