아파치웹서버보안 #6: 아파치 보안모듈 mod_dosevasive 설정
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 1,849 조회
- 0 추천
- 목록
본문
mod_dosevasive 설정
mod_security와 더불어 mod_dosevasive 모듈을 이용할 수 있는데, 이는 HTTP를 이용한 서비스거부 공격 또는 Brute force 공격을 탐지하고 차단하는 기능을 제공한다.
이를테면
① 일정시간에 같은 페이지를 연속적으로 요청하거나
② 일정 시간에 전체 히트수가 일정수치 이상일 경우
공격이라 판단하고 차단하는 기능을 제공한다.
차단 후에는 관련 정보를 로그에 남기거나 관리자에게 메일로 통보를 하도록 할 수 있는데, 짧은 시간에 연속적으로 많은 접속을 시도하는 사이버 시위 등을 차단하는데 효과적일 것이다.
. 이 기능을 이용하려면 다음과 같은 지시자를 설정하면 된다.
<IfModule mod_dosevasive.c> DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10 DOSEmailNotify master@server.com </IfModule> |
위 설정 지시자들에 대하여 간단히 설명하면 다음과 같다.
DOSHashTableSize 3097
클라이언트의 접속을 받아들이고 정상적인 접속인지 여부를 계산하기 위한 테이블로서 접속이 많은 사이트에서는 이 값을 크게 늘려주면 된다.
그러나 너무 크게 늘려주었을 경우에는 많은 메모리를 소모하게 되므로 각자의 상황에 맞게 적당한 값을 입력하면 된 다.
DOSPageCount 2
DOSPageInterval 1
지정한 시간(DOSPageInterval)동안 같은 페이지를 2번(DOSPageCount 값) 요청하였을 경우 해당 클라이언트에게 403 에러로 응답한다.
DOSSiteCount 50
DOSSiteInterval 1
지정한 시간(DOSSiteInterval)동안 총 히트수(HTML과 이미지를 포함한 모든 요청)가 50을 초과할 경우 해당 클라이언트에게 403 에러로 응답한다.
이미지가 많은 사이트의 경우 이 값을 적당히 조절하여야 한다.
DOSBlockingPeriod 10
서비스거부 공격등으로 필터링된 ip는 이후 10초(DOSBlockingPeriod)동안 접속이 중
지 되어 접속 시도시 403 에러가 나며 10초안에 재접속을 하면 수치는 10초로 다시 reset된다.
DOSEmailNotify master@server.com
만약 앞에서 지정한 값을 초과하여 차단된 ip가 있을 경우 해당 정보가 지정한 관리 자인 master@server.com에게 통보된다.
소스 파일에서는 메일 발송시 “"/bin/mail -t %s"”와 같이 되어 있는데, 리눅스에서는 “-t %s“부분을 삭제하여야 메일 발송 기 능을 이용할 수 있다.
.
아울러 공격을 당하였을 경우 syslog에 다음과 같은 로그가 남기도 한다.
Sep 29 15:32:33 server mod_dosevasive[6888]: Blacklisting address 211.47.xx.xx: possible DoS attack.
[그림] 공격을 받았을 때 서버의 403 응답화면
실제 적용이 되는지 여부는 소스와 함께 제공하는 test.pl을 아래와 같이 실행해 보면 일정접속 이후부터는 200 OK 대신 403 Forbidden 에러가 나는 것을 알 수 있다.
.
# ./test.pl 000.HTTP/1.1 200 OK 001.HTTP/1.1 200 OK 002.HTTP/1.1 200 OK 003.HTTP/1.1 200 OK 004.HTTP/1.1 200 OK 005.HTTP/1.1 200 OK 006.HTTP/1.1 200 OK 007.HTTP/1.1 200 OK 008.HTTP/1.1 200 OK 009.HTTP/1.1 403 Forbidden 010.HTTP/1.1 403 Forbidden 011.HTTP/1.1 403 Forbidden 012.HTTP/1.1 403 Forbidden 013.HTTP/1.1 403 Forbidden |
그러나 이보다는 iptables에서 제공하는 기능을 활용하면 한 ip에서 과도한 접속을 간단하게 차단할 수 있는데 이를테면 아래의 경우 한 ip에서 동시에 30개의 connection을 초과할 경우 초과한 connection은 커널 레벨에서 차단하게 된다.
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
또는 다음과 같은 설정도 가능한데 아래의 경우 동시에 30개의 connection을 초과할 경우 해당 ip를 dynamic하게 5분동안(300초)만 차단하게 된다.
차단되는 정보는 실시간으로
# cat /proc/net/ipt_recent/badguy을 보면 확인 가능하다.
iptables -A INPUT -m recent --name badguy --rcheck --seconds 300 -j DROP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -m recent --name badguy --set -j DROP
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP
관련자료
-
이전
-
다음