본문 바로가기

Code Snippets/linux

DDos 방어 모듈을 설치

@mod_evasive_1.10.1 설치 

mod_evasive - apache DoS, DDoS 공격 방어 모듈로, 초당 일정 횟수 이상 같은 페이지를 요청하는 경우 공격 IP에 대한 접근을 일정시간 차단하는 기능을 합니다. 

* mod_evasive 다운로드 
# cd /usr/local/src 
# wget http://www.zdziarski.com/blog/wp-content/uploads/2010/02/mod_evasive_1.10.1.tar.gz 

* 압축해제 
# tar zxvf mod_evasive_1.10.1.tar.gz 

* 디렉토리 이동 
# cd 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 

* 모듈 추가 
# /usr/local/apache/bin/apxs -iac mod_evasive20.c (apache 2.x) 
//# /usr/local/apache/bin/apxs -iac mod_evasive.c (apache 1.x) 

설치시 remote_ip 에러가 난다면 client_ip로 수정 하거나 본문에 첨부된 mod_evasive20.c 파일을 대체해서 재컴파일한다 
# chmod 755 /usr/local/apache/modules/mod_evasive20.so 

* 설정확인 및 변경 
1. # ls -alh /usr/local/apache/modules/ 경로에 mod_evasive20.so 생성된 것을 확인 
2. # vi /usr/local/apache/conf/httpd.conf 중간에 아래 내용이 추가된 것을 확인 

====================================================== 
LoadModule evasive20_module modules/mod_evasive20.so (apache 2.x) 
//LoadModule evasive_module modules/mod_evasive.so (apache 1.x) 
====================================================== 

# vi /usr/local/apache/conf/httpd.conf 


하단에 아래와 같은 설정을 추가한다. 

======================================= 


DOSHashTableSize 3097 
DOSPageCount 10 
DOSSiteCount 50 
DOSPageInterval 1 
DOSSiteInterval 1 
DOSBlockingPeriod 10 
DOSEmailNotify *** 개인정보보호를 위한 이메일주소 노출방지 *** 
DOSLogDir "/usr/local/apache/logs/mod_evasive.log" 
# DOSWhitelist 127.0.0.1 127.0.0.2 127.0.0.3... 


======================================= 

- 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 재시작 후 테스트 
# /usr/local/apache/bin/apachectl restart or service httpd restart 
# 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 합니다.

'Code Snippets > linux' 카테고리의 다른 글

트래픽 제어 모듈 설치  (0) 2018.05.02
Command : split - 파일 나누기  (0) 2015.12.04
시스템부팅메시지확인  (0) 2014.08.28
명령어:history  (0) 2014.08.22
명령어:last  (0) 2014.08.21