mod_evasive

| 2019년 4월 30일 | 0 Comments

안녕하세요! 기술지원팀 이종한입니다.

Apache Web을 통하여 들어오는 DOS 공격 등을 mod_evasive를 이용하여 차단하는 방법에 대해 알아보겠습니다.

 

1. mod_evasive_1.10.1.tar 를 다운로드 해줍니다.

  • [root@localhost src]#wget https://idchowto.com/wp-content/uploads/2019/04/mod_evasive_1.10.1.tar.gz

 

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를 확인할 수 있습니다.

 

 

감사합니다.

Category: LINUX, 서버보안

About the Author ()