2014.08.19 16:56
mod_evasive - apache DoS, DDoS 공격 방어 모듈로, 초당 일정 횟수 이상 같은 페이지를 요청하는 경우(ex. 연속 새로고침(F5))
초당 같은 자식 노드를 동시에 일정 회수 생성하는 경우 공격 IP에 대한 접근을 일정시간 차단하는 기능을 합니다.
(절대적인 방어를 하는 것은 아닙니다.)
* mod_evasive 다운로드
[root@localhost src]# wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz
* 압축해제
[root@localhost src]# tar zxvf mod_evasive_1.10.1.tar.gz
* 디렉토리 이동
[root@localhost src]# cd mod_evasive
[root@localhost mod_evasive]# ls -alh
합계 120K
drwxr-xr-x 2 root root 4.0K 10월 9 2005 .
drwxr-xr-x 7 root root 4.0K 8월 13 05:30 ..
-rw-r--r-- 1 root root 26 9월 2 2003 .cvsignore
-rw-r--r-- 1 root root 1.4K 10월 9 2005 CHANGELOG
-rw-r--r-- 1 root root 18K 8월 31 2003 LICENSE
-rw-r--r-- 1 root root 470 10월 9 2005 Makefile.tmpl
-rw-r--r-- 1 root root 14K 10월 9 2005 README
-rw-r--r-- 1 root root 19K 10월 9 2005 mod_evasive.c (apache 1.x)
-rw-r--r-- 1 root root 18K 10월 9 2005 mod_evasive20.c (apache 2.x)
-rw-r--r-- 1 root root 16K 10월 9 2005 mod_evasiveNSAPI.c
-rw-r--r-- 1 root root 406 8월 31 2003 test.pl
* 모듈 추가
[root@localhost mod_evasive]# /usr/local/apache2/bin/apxs -iac mod_evasive20.c (apache 2.x)
//[root@localhost mod_evasive]# /usr/local/apache2/bin/apxs -iac mod_evasive.c (apache 1.x)
* 설정확인 및 변경
1. [root@localhost mod_evasive]# ls -alh /usr/local/apache2/modules/ 경로에 mod_evasive20.so 생성된 것을 확인
2. [root@localhost mod_evasive]# vi /usr/local/apache2/conf/httpd.conf 중간에 아래 내용이 추가된 것을 확인
======================================================
LoadModule evasive20_module modules/mod_evasive20.so (apache 2.x)
//LoadModule evasive_module modules/mod_evasive.so (apache 1.x)
======================================================
[root@localhost mod_evasive]# vi /usr/local/apache2/conf/httpd.conf
하단에 아래와 같은 설정을 추가한다.
=======================================
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 10
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSEmailNotify webmaster@example.com
# DOSWhitelist 127.0.0.1 127.0.0.2 127.0.0.3...
</IfModule>
=======================================
- DosHashTableSize
수치가 높을수록 evasive의 퍼포먼스는 향상되지만 테이블에 많은 메모리을 남김, 접속량이 많은 경우 수치를 늘림
- DOSPageCount
PageInterval에 지정된 시간동안 같은 페이지를 요청하는 횟수
- DOSSiteCount
SiteInterval에 지정된 시간동안 총 히트수(html,이미지)가 해당 횟수를 초과하는 경우, 이미지가 많은 사이트는 조절
- DOSPageInterval
PageCount 시간(default : 1)
- DOSSiteInterval
SiteCount 시간(default : 1)
- DOSBlockingPeriod
차단된 IP의 접속을 거부할 시간 설정, 차단후 설정된 시간 내에 다시 접속을 시도할 경우 시간은 설정만큼 다시 리셋
- DOSEmailNotify
차단된 IP를 이메일 발송
- DOSWhitelist
설정된 IP는 차단대상에서 제외
- 공격으로 차단되었던 IP는 /tmp/dos-[IP] 와 같이 파일이 생성
* Apache 재시작 후 테스트
[root@localhost mod_evasive]# /usr/local/apache2/bin/apachectl restart
[root@localhost mod_evasive]# perl test.pl
======================
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
......
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
......
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
======================
또는 웹페이지 새로고침(F5)을 연속 실행할 경우 아래와 같이 차단됩니다.
=====================================================
Forbidden
You don't have permission to access / on this server.
=====================================================
* 기타 iptables 를 이용한 공격 방어 방법
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 --name HTTP -j DROP
- 같은 IP가 HTTP서비스에 1초동안 tcp 80포트로 10회 이상 접속하는 경우 DROP 합니다.
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
- 60초동안 SSH(port 22) 새로운 커넥션이 10회 발생할 경우 DROP 합니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
3 | apache 쓸모없는 로그 남기지 않는 방법. | 호스트웨이 | 2012.12.28 | 6761 |
2 | Alternative PHP Cache 설치 & 설정 | 호스트웨이 | 2015.09.18 | 6520 |
1 | PHP 컴파일시 에러 메세지가 나오는 경우 조치방법-2 | 호스트웨이 | 2012.12.20 | 6132 |