웹마스터 팁

원본은 http://www.nuclearelephant.com/
제가 본 곳은 좋은진호님 글에서 http://kltp.kldp.org/stories.php?story=03/08/29/0942915
아파치 2.0.1에서 해봤는데 잘 되더군요. ^^

Apache 에서 DoS 공격 막기 (1.3.x 2.x 모두)
글쓴이 : 좋은진호 (2003년 08월 29일 오후 06:55) 읽은수: 4,372 [ 아파치 # 트랙백(0) ]
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2003.8.20(수) apache v1.3.x
수정일 : 2003.8.25(월) apache v2.x 부분 추가

특정 URL이나 IP일 경우나 특정한 브라우저를 이용하여 DoS(Denial of Service, 서비스거부)
공격이 들어온다면 httpd.conf 에서 SetEnvIf, SetEnvIfNoCase 등과 Allow, Deny 설정으로
간단히 막을 수 있겠지만 일정한 유형이 없다면 해결점을 찾기가 쉽지 않다.

다행히 Apache용 mod_dosevasive 모듈로 DoS 공격을 쉽게 막을 수 있다.
며칠전 1.7버전 발표로 apache 2.x에서도 정상적으로 이 모듈을 이용할 수 있게 됐다.

1. mod_dosevasive 설치

http://www.nuclearelephant.com/projects/dosevasive/
에서 mod_dosevasive (현재 최신버전은 1.7)을 받아온다.

1) 기존에 사용하던 apache 1.3.x에 모듈만 추가할 때

mod_dosevasive.tar.gz 을 푼다음 apxs로 설치

----------------------------------------------
# tar xvfz mod_dosevasive.tar.gz 
# cd dosevasive
# /bin/apxs -iac mod_dosevasive.c
...
[activating module `dosevasive' in /usr/local/apache/conf/httpd.conf]
cp mod_dosevasive.so /usr/local/apache/libexec/mod_dosevasive.so
chmod 755 /usr/local/apache/libexec/mod_dosevasive.so
...
----------------------------------------------

httpd.conf의 LoadModule, AddModule는 apxs가 알아서 추가해준다.

2) apache 1.3.x부터 새로 컴파일할 할 때

mod_dosevasive.tar.gz 을 apache_source_홈/src/modules 에 푼 다음
기존에 apache 컴파일하는 것과 동일한 방법으로 하되, --add-module=... 옵션만
추가해준다.

----------------------------------------------
./configure --prefix=/usr/local/apache \
--enable-module=all --enable-shared=max \
--add-module=src/modules/dosevasive/mod_dosevasive.c  <-- 추가함
make
make install
----------------------------------------------

3) apache 2.x에 모듈만 붙일 때

/bin/apxs -iac mod_dosevasive20.c

2. 설정

httpd.conf 에 아래 설정이 있는지 확인한다.

apache 1.3.x
----------------------------------------------
...
LoadModule dosevasive_module libexec/mod_dosevasive.so
...
AddModule mod_dosevasive.c
----------------------------------------------

apache 2.x
----------------------------------------------
LoadModule dosevasive20_module modules/mod_dosevasive20.so
----------------------------------------------

httpd.conf에는 다음과 같이 설정을 추가한다.
( 단, 아래 설정 중에 apache 2.x일 때는 < IfModule mod_dosevasive20.c> 로 )
----------------------------------------------
APACHE v1.3
-----------

< IfModule mod_dosevasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
< /IfModule>

APACHE v2.0
-----------
< IfModule mod_dosevasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
< /IfModule>
----------------------------------------------
DOSHashTableSize  3097

hash table의 크기. IP, URI등을 분석하기 위한 공간으로 쓰이는 것 같은데 정확히는
모르겠다. 접속이 많은 서버이면 수치를 높인다.

DOSPageCount    3
DOSPageInterval   1

DOSPageInterval에서 지정한 시간(초단위)동안 같은 페이지를 3번 요청한 경우
해당 클라이언트 IP를 블럭킹한다. 블럭킹되는 동안에 사용자에게는 403(Forbidden)
코드가 전송된다.

DOSSiteCount    50
DOSSiteInterval   1

DOSSiteInterval에서 지정한 시간동안 어느 페이지나 이미지든 요청 건수가 50번을 넘는
경우 해당 클라이언트 IP를 블럭킹한다. 403코드 보내는 것은 마찬가지.
HTML 내에 이미지가 10개이면 요청 건수는 HTML포함하여 11번이 되므로 이미지가 많은
사이트는 숫자를 크게한다.

DOSBlockingPeriod  30

블럭킹된 IP는 30초동안 접속을 할 수 없다.

3. 모듈 사용을 중지하려면

차단 기능을 이용하지 않기 위해

DOSPageCount 0
DOSSiteCount 0

와 같이 하면 모듈 내부의 default값을 이용해서 동작하므로 LoadModule, AddModule를
주석 처리하는 방법을 써야한다. 또는 Count값을 상당히 큰 수를 지정할 수도 있겠다.

4. 차단하는지 테스트

간단한 테스트 툴로 test.pl을 제공한다.
12번째 줄에

printf("%03d ", $_ );

를 추가하고

apache를 실행시킨 다음 perl test.pl을 해보면 200 OK, 403 Forbidden 된 것을 쉽게
확인할 수 있을 것이다.

DOSPageCount, DOSSiteCount 수치를 너무 낮게 하면 정상적인 접속에 대해서도 차단될 수
있으므로 주의해야 한다. 수치를 낮추고, 같은 페이지를 reload(Ctrl+R)를 여러번했더니
바로 403 페이지가 등장.

403 페이지를 별도로 만드는 것이 좋을 듯 싶다. httpd.conf에 ErrorDocument 403 ... 설정
으로 html을 만들어두면 방문자에게 도움이 되지 않을까...

이젠 ab, lynx 등으로 게시물 조회수를 순간적으로 올린다거나, 시스템 로드를 증가시키는
것까지도 어느정도 막을 수 있을 것이다.
 

제목 글쓴이 날짜
연신내오피 연신내OP ⦑출장안마사이트.COM⦒ 연신내휴게텔 연신내오피 연신내오피 koykoyah 2025.02.23
광주오피 ⦑오피.CLUB⦒ 광주오피 광주OP 광주건마 광주오피 koykoyah 2025.02.23
광주오피 광주출장안마 ⦑출장안마사이트.COM⦒ 광주OP 광주오피 광주오피 koykoyah 2025.02.23
포항오피 포항오피 ⦑오피쓰.COM⦒ 포항OP 포항스파 포항오피 koykoyah 2025.02.23
인천오피 ⦑오피사이트.NET⦒ 인천OP 인천오피 인천출장샵 인천오피 koykoyah 2025.02.23
구미오피 ⦑오피사이트.NET⦒ 구미마사지 구미오피 구미오피 구미OP koykoyah 2025.02.23
홍대오피 ⦑출장안마사이트.COM⦒ 홍대OP 홍대오피 홍대출장샵 홍대오피 koykoyah 2025.02.23
충주오피 ⦑오피.CLUB⦒ 충주마사지 충주오피 충주오피 충주OP koykoyah 2025.02.23
압구정오피 ⦑출장안마사이트.COM⦒ 압구정마사지 압구정오피 압구정오피 압구정OP koykoyah 2025.02.23
천안오피 ⦑오피쓰주소.COM⦒ 천안오피 천안출장마사지 천안오피 천안OP koykoyah 2025.02.23
남양주오피 ⦑오피쓰.COM⦒ 남양주오피 남양주OP 남양주건마 남양주오피 koykoyah 2025.02.23
대전오피 대전출장안마 ⦑오피.CLUB⦒ 대전OP 대전오피 대전오피 koykoyah 2025.02.23
답십리오피 ⦑출장마사지안내.COM⦒ 답십리마사지 답십리오피 답십리오피 답십리OP koykoyah 2025.02.23
신천오피 신천오피 ⦑오피쓰주소.COM⦒ 신천OP 신천스파 신천오피 koykoyah 2025.02.23
건대오피 ⦑출장안마사이트.COM⦒ 건대오피 건대OP 건대건마 건대오피 koykoyah 2025.02.23
부천오피 ⦑오피사이트.NET⦒ 부천OP 부천오피 부천출장샵 부천오피 koykoyah 2025.02.23
선릉오피 ⦑출장안마사이트.COM⦒ 선릉오피 선릉OP 선릉건마 선릉오피 koykoyah 2025.02.23
제주오피 제주오피 ⦑출장마사지안내.COM⦒ 제주OP 제주스파 제주오피 koykoyah 2025.02.23
남양주오피 ⦑오피쓰주소.COM⦒ 남양주오피 남양주출장마사지 남양주오피 남양주OP koykoyah 2025.02.23
부천오피 ⦑출장마사지안내.COM⦒ 부천오피 부천OP 부천건마 부천오피 koykoyah 2025.02.23