2009년 4월 27일 월요일

DoS 공격 방어 모듈 mod_evasive 설치기

1. mod_evasive이란 무엇인가?

이것은 HTTP Dos 또는 DDos 스택 또는 저돌적인 공격으로부터 아파치를 보호하는데 있다. 또한 ipchains, 방화벽, 라우터등으로 쉽게 구성될 수 있도록 디자인 되었다.
탐지는 주소, URI의 IP 내부 동적 해쉬테이블을 생성함으로 수행되고, 각 아이피별로 거부된다.
- 초당 몇번 이상의 같은 페이지를 요청하는 경우
- 초당 같은 자식노드를 동시에 50번 이상 생성하는 경우
- 일시적으로 블러킹되는 동안 어떠한 요청을 생성하는 경우

2.  mod_evasive의 설치

# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz

# 압축해제
# tar xvzf mod_evasive_1.10.1.tar.gz

# 디렉토리 이동
# cd mod_evasive

# 모듈 추가
# /usr/local/apache2/bin/apxs -iac mod_evasive.c -> Apache.1.x
# /usr/local/apache2/bin/apxs -iac mod_evasive20.c -> Apache.2.x

# 환경설정
# vi /usr/local/apache2/conf/httpd.conf

# 아파치 1.X와 2.X에서의 모듈명칭이 약간 차이가 있으므로 주의할 것!
# 아래에 해당하는 내용이 존재하는지 확인 한다. 없으면 추가.

LoadModule evasive_module    modules/mod_evasive.so -> Apache.1.x
LoadModule evasive20_module    modules/mod_evasive20.so -> Apache.2.x

<IfModule mod_evasive.c>
        DOSHashTableSize        3097
        DOSPageCount              3
        DOSSiteCount                50
        DOSPageInterval            1
        DOSSiteInterval              1
        DOSBlockingPeriod        30

        DOSEmailNotify            webmaster@yoursite.com
        DOSLogDir                   "/usr/local/apache2/logs/mod_evasive.log"
        DOSSystemCommand      "su - someuser -c '/sbin/... %s ...'"
</IfModule>

# 환경설정 검사
# apachectl configtest
# 재시작
# apachectl -k restart

3. 각 지시자에 대한 설명

- DOSHashTableSize
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정한다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다, 접속량이 많으면 이 수치를 높혀도 된다.

- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.

- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.

- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.

- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.

- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간. 이때 클라이언트는 403 (Forbidden) 에러를 출력하게 된다.

- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.
주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다. 디폴트는 "/bin/mail -t %s" 이다.

- DOSLogDir
로그 파일 경로

- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.

- DOSWhitelist
차단에서 제외될 호스트
DOSWhitelist    127.0.0.1
DOSWhitelist    127.0.0.* - (와일드카드는(*) 필요하다면 최대 8진수(xxx.*.*.*)까지 사용할 수 있다.)


4. 테스트하기

# perl test.pl <- 다운받은 파일 안에 포함되어 있다.
   HTTP/1.1 200 OK
   HTTP/1.1 403 Forbidden
   HTTP/1.1 200 OK
   HTTP/1.1 403 Forbidden
   HTTP/1.1 403 Forbidden

5. 같이쓰면 좋은 iptables

흔히 DOS 공격방어라고 하면 mod_evasive 모듈을 사용한다고 알려져 있다.
특히, 과도한 DOS 공격이 들어올 경우 아파치가 부하를 견디지 못하고 죽어버리는 경우도 생긴다. 따라서 과다 접속 차단에 대해서는 iptables를 이용하시는것이 근본적이고 효과적 이다.
iptables를 보게되면 connlimit 기능이 있는데 이 설정을 잘 이용하시면
매우 효과적이고 안정적인 서버 운영이 가능하다.

# 1초에 10번 이상의 HTTP 접근을 할경우 (DOS공격) 접근을 차단한다. 단 여기서 지정하는 아이피 Range는 C클래스에만 해당하다. 여기서 mask 24를 이용하여 이를 지정했다.
# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP

# 매 아이피당 최대 5개의 동시 연결 갯수만 허용. 80포트에 한해서...
# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

# 포트스캔을 차단한다.
# psd match를 사용하기 위하여 커널에 p-o-m패치를 적용시켜 놓아야 한다.
# 상세한 사항은 여기를 클릭하여 확인하기 바란다.
# iptables -A INPUT -m psd -j DROP

# 만약서버가 해킹당해 DOS공격지로 사용될때 적용시킴.
# DNS 쿼리이외에 UDP 패킷이 나가는 것을 방지
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP

이렇게 설정한 iptable룰들을 iptables를 재 시작하면 먹히지 않습니다. 삭제 되는거죠.
이를 유지시키려면 iptables 설정에 저장 시켜야 합니다.
/etc/init.d/iptables save를 통하여 저장 하면 되겠죠?!

댓글 5개:

  1. trackback from: DOS 와 DDOS 및 네트워크공격에 대한 정리
    서비스 거부공격 (DOS attack)란? =>컴퓨터나 네트워크 자원(network bandwitdh, file system space, open processes, incoming connection등)을 고갈시켜 해당 컴퓨터와 네트워크가 정상적인 서비스를 제공할수 없게만드는 모든 공격 방법들을 지칭하며 주로 소프트웨어/프로토콜 구현상의 버그(소프트웨어/프로토콜취약점)나 시스템의 설정오류등의 허점을 이용한다 =>주로 tcp/ip stack의버그(i..

    답글삭제
  2. trackback from: UDP Flooder 실행 및 능력,,, Attack 하지맙시다,,!!
    ▣ UDP Flooder 작지만 무서운,,, 청양고추(?) 같은 존재;; 시작에 앞서, 본 post는 Attack의 장려or강요를 위한 것이 아님을 알립니다. 따라서 필자는 UDP Flooder에 대한 어떠한 파일도 절대 공유하지 않습니다. ▶ UDP Flooder의 실행 화면 (※ 위 실행 화면의 흰부분은 프로그램의 출처 및 프로그램 명이므로 흰색 상자 처리함.) Execution. 위 화면은 UDP Flooder를 실제 실행시킨 화면이다. UDP..

    답글삭제
  3. trackback from: 네이버, 옥션, 청와대 DDOS(서비스거부공격)에 힘없이 당하다.
    DDOS(서비스거부공격) 역시 대단한 공격이다,,, 좀비PC들이여,,, 고생하는구나,,, (※옥션은 아직도 이용불가능 상태에 있다. 점검 작업을 하고있다는데 방어작업을 하는중인듯..) DDOS(서비스 거부 공격)에 대한 포스팅을 한지 얼마 지나지 않아 우려했던 일들이 벌어지고 있다. 주요 기업체와 국가 기관의 서버도 공격을 받았고 받고 있는 상태인듯한다. 현재 네이버는 공격이 소강상태에 이르렀는지, 조치를 취했는지 알수 없지만... 네이버 메일 서비..

    답글삭제
  4. trackback from: 청와대,네이버,옥션 때려잡던 DDOS 이번엔 Anlab, Altools, Paran 등 목표 수정!
    국내외 사이트들을 때려잡던 DDOS Attack의 목표가 변경되었다. Anlab, Altools, Paran, 국민은행 방송통신위원회 ,,,,,, ▶ 목표물 전향 기존 공격 리스트였던 대표적으로 네이버, 옥션, 청와대 등의 목표물에서 이번엔 기업쪽으로 목표물을 바꾸었다. 알툴즈, 파란, 방송통신위원회, 안철수연구소 등의 DDOS 공격 감지 경로 또한 7월 6일~7일 발생한 DDOS Attack의 공격과 출처가 같게 드러났다. 대표적인 곳의 주소는 아..

    답글삭제
  5. trackback from: DDOS 3차 목표물 공격 대상! 분석 결과 발표 [2009.07.09. PM 6:00 공격명령]
    안철수 연구소에서 1차, 2차 DDOS 공격에 쓰인 좀비PC에 감염된 악성코드 분석결과를 내놓았다. DDOS 공격에 있어서 2009년 7월 9일 오후 6시에 DDOS 3차 공격이 이루어진다는 것이다. ▶ 3차 공격 List 1. http://www.mopas.go.kr (행정안전부 전자정부사이트) 2. http://mail.naver.com (네이버 메일) 3. http://www.chosun.com (조선닷컴) 4. http://www.auctio..

    답글삭제