Apache mod_evasive 설치

IT/Linux / / 2022. 1. 11. 14:02
반응형

안녕하세요 유똥입니다.

오늘은 Apache mod_evasive에 대하여 포스팅 진행하겠습니다.

 

 mod_evasive 모듈 뭘까?

mod_evasive - apache DoS, DDoS 공격 방어 모듈로초당 일정 횟수 이상 같은 페이지를 요청하는 경우

초당 같은 자식 노드를 동시에 일정 회수 생성하는 경우 공격 IP에 대한 접근을 일정시간 차단하는 기능을 합니다.

 

그럼 mod_evasive 설치를 진행해보겠습니다.

 

 mod_evasive 설치

cd /root/src
mod_evasive1_1.10.1.tar 모듈 다운로드
wget http://pkgs.fedoraproject.org/repo/pkgs/mod_evasive/mod_evasive_1.10.1.tar.gz/784fca4a124f25ccff5b48c7a69a65e5/mod_evasive_1.10.1.tar.gz

압축 풀기
tar -zxvf mod_evasive_1.10.1.tar.gz

 

 모듈 컴파일

cd mod_evasive
# Apache 2.4 버전 mod_evasvie24.c 설치
# mod_evasive20.c 복사
cp mod_evasive20.c mod_evasive24.c
# remote_ip -> client_ip 문자열 변경 작업
sed s/remote_ip/client_ip/g  -i  mod_evasive24.c 
# apxs로  mod_evasiv컴파일 ( 아파치 설치 경로 저의 경우 /opt )
/opt/apache/bin/apxs -iac mod_evasive20.c

 

 모듈 확인 및 적용

# 아파치 설치경로/modules
cd /opt/apache/modules/
ll | grep eva
-rwxr-xr-x. 1 root root    54848 Jan 11 04:31 mod_evasive24.so

# 모듈 추가
httpd.conf
LoadModule evasive20_module   modules/mod_evasive24.so

 

 mod_evasive 옵션 설정

<IfModule mod_evasive24.c>
   DOSHashTableSize    3097
    DOSPageCount        5
    DOSSiteCount          50
    DOSPageInterval    1
    DOSSiteInterval      1
    DOSBlockingPeriod   20
</IfModule>

 

- DosHashTable

 HashTable의 크기로 사이트/페이지에 대한 분석을 위한 사이즈 할당 (접속이 많은 경우 크게 잡는 것을 권고)

- DOSPageCount

 동일한 페이지에 대한 Requset의 수에 대한 임계값 설정.

- DOSSiteCount

 동일한 사이트 대한 Requset의 수에 대한 임계값 설정.

- DOSPageInterval

 페이지에 대한 임계 값 간격. Default -> 1초

- DOSSiteInterval

사이트에 대한 임계 값 간격. Default -> 1초

- DOSBlockingPeriod

 접속 차단을 몇 분으로 지정할 것인지 설정

- DOSLogDir

 DOS라고 판단되는 트래픽이 들어왔을 때  IP 정보를 남기는 파일이 저장되는 경로

 


 아파치 재시작

# 적용을 위해 아파치 재시작
/opt/apache/bin/apachectl restart

 


 적용 테스트

vi test.pl
#!/usr/bin/perl

# test.pl: small script to test mod_dosevasive's effectiveness


use IO::Socket;

use strict;

 

for(0..500) {

  my($response);

  my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",

                                      PeerAddr=> "127.0.0.1:80");

  if (! defined $SOCKET) { die $!; }

  print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";

  $response = <$SOCKET>;

  print $response;

  close($SOCKET);

}

페이지 및 사이트에서 호출하는 항목 개수 등을 고려해 적절한 Count 값의 조절 및 테스트가 꼭 필요합니다.

정상 트래픽도 옵션 값에 따라 403 Error를 발생할 수도 있으니 충분한 테스트를 하여 운영 환경에 반영하는 것이 바람직합니다.

mod_evasive 설치된 폴더에 기본적으로 들어가 있는 test.pl perl 스크립트로 ddos 테스트를 해보았습니다.

바로 이 스크립트를 실행하면 400이 발생하므로 아래와 같이 test.pl 스크립트를 수정해야 정상적으로 동작합니다.

 


 테스트 파일 실행

./test.pl
HTTP/1.1 200 200
HTTP/1.1 200 200
HTTP/1.1 200 200
HTTP/1.1 200 200
HTTP/1.1 200 200
HTTP/1.1 200 200
HTTP/1.1 200 200
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
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
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
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden

403 에러가 떨어지면서 정상적으로 차단되면 message 로그에 아래와 같이 남게됩니다.

mod_evasive[21497]: Blacklisting address 127.0.0.1: possible DoS attack.


지금까지 Apache evasive 모듈로 DDOS를 방어하는 방법에 대해 알아봤는데요, 디도스 공격을 받으면 이용자의 정상적인 접속이 불가능해지며 컴퓨터의 기능에 치명적인 손상을 입힐 수 있습니다. 뿐만 아니라 수많은 컴퓨터 시스템이 운영자도 모르는 사이에 해킹의 숙주, 즉 좀비 PC로 이용될 수 있기에 각별한 주의가 필요합니다.

 

 

반응형

'IT > Linux' 카테고리의 다른 글

리눅스 패스워드 변경  (0) 2022.03.30
PHP ssh2 module 설치  (0) 2022.01.11
클라우드플레어(Cloudflare) 적용  (0) 2022.01.10
Apache mod_cband 설치  (0) 2022.01.08
리눅스 Apache 2.2 modsecurity 설치  (0) 2021.12.25
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
});