본문 바로가기
Apache

mod_evasive 을 이용한 DDOS방어

by 씨엔아이소프트 2022. 1. 18.
반응형
Apache Web을 통하여 들어오는 DOS 공격 등을 mod_evasive를 이용하여 차단하는 방법에 대해 알아보겠습니다.
 
 
1. mod_evasive_1.10.1.tar 를 다운로드 해줍니다.
 
 
 
2. 다운로드 받은 파일을 압축해제 
 
[root@localhost src]# tar zxvf mod_evasive_1.10.1.tar.gz
 
 
3.압축 해제가 완료된 디렉토리 이동 및 파일 확인
 
[root@localhost src]# cd mod_evasive
[root@localhost mod_evasive]# ls
CHANGELOG LICENSE Makefile.tmpl README mod_evasive.c mod_evasive20.c mod_evasiveNSAPI.c test.pl
mod_evasive.c = apache 1.3 버전 이상
mod_evasive20.c = apache 2.0 버전 이상
4. mod_evasive Module 추가
 
저의 Apache 버전은 2.4 버전이므로 mod_evasive20.c 를 통하여 module 추가를 진행하도록 하겠습니다.
[root@localhost mod_evasive]# /usr/local/apache/bin/apxs -iac mod_evasive20.c
*아래와 같은 error가 발생할 경우 mod_evasive20.c 파일의 수정이 필요합니다.
 
mod_evasive20.c:142: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:146: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:158: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:165: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:180: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:187: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:208: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:212: warning: implicit declaration of function ‘getpid’
mod_evasive20.c:215: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:221: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:222: error: ‘conn_rec’ has no member named ‘remote_ip’
mod_evasive20.c:228: error: ‘conn_rec’ has no member named ‘remote_ip’
 
[error 수정작업]
 
1)
 
[root@localhost mod_evasive]# cp -arp mod_evasive20.c mod_evasive24.c
 
명령어를 입력하여 파일 수정 전 백업파일을 생성합니다.
 
2)
 
[root@localhost mod_evasive]# sed s/remote_ip/client_ip/g  -i  mod_evasive24.c 
 
위 명령어를 입력하여 파일 수정 후 다시 상위 4번 항목의 명령어를 실행합니다.
 
 
 
5. mod_evasive Module 확인
 
[root@localhost mod_evasive]# ls /usr/local/apache/modules/mod_evasive20.so 
/usr/local/apache/modules/mod_evasive20.so  
[root@localhost mod_evasive]#vi /usr/local/apache/conf/httpd.conf
LoadModule evasive20_module modules/mod_evasive20.so        
 
 
6.Apache Conf 수정
 
[root@localhost mod_evasive]#vi /usr/local/apache/conf/httpd.conf
<IfModule mod_evasive24.c>
  DOSHashTableSize   3097
  DOSSiteCount           50
  DOSPageCount         5
  DOSPageInterval       3
  DOSSiteInterval         1
  DOSBlockingPeriod   60
</IfModule>
[root@localhost mod_evasive]# /usr/local/apache/bin/apachectl restart
설정 값 적용을 위하여 Apache 재시작을 합니다.
 
 
[옵션 설명]
 
DOSHashTableSize :HashTable 값을 지정하며 수치가 높을수록 성능은 향상 되지만 시스템 자원을 많이 사용합니다.
DOSPageCount, DOSPageInterval : 동일한 Page에 DOSPageInterval 항목에 지정된 시간(초) 동안 DOSPageCount 만큼 요청시 차단
DOSSiteCount, DOSSiteInterval : 동인한 Site에 DOSSiteInterval 항목에 지정된 시간(초) 동안 DOSSiteCount 만큼 요청시 차단
DOSBlockingPeriod : 접근이 차단되는 시간을 지정하며 해당 시간안에 재접속을 할경우 0초부터 다시 카운트 합니다.
 
*주의사항 : 페이지 및 사이트에 불러오는 이미지 개수 등을 고려하여 적절한 Count 값의 조절이 필요합니다.
 
 
 
7.확인 
 
[Access Log]
 
– – [30/Apr/2019:12:56:27 +0900] “GET / HTTP/1.1” 200 2342
– – [30/Apr/2019:12:56:27 +0900] “GET / HTTP/1.1” 200 2342
– – [30/Apr/2019:12:56:27 +0900] “GET / HTTP/1.1” 200 2342
– – [30/Apr/2019:12:56:27 +0900] “GET / HTTP/1.1” 403 202 
– – [30/Apr/2019:12:56:27 +0900] “GET / HTTP/1.1” 403 202
– – [30/Apr/2019:12:56:27 +0900] “GET / HTTP/1.1” 403 202
 
403 forbidden Log를 확인할 수 있습니다.
반응형

댓글