| Apache 1.3.x에서 DoS 공격 막기 | 작성일 : 2003/08/20 15:29 |
| 조회수 : 6673 |
|
작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2003.8.20(수) 특정 URL이나 IP일 경우나 특정한 브라우저를 이용하여 DoS(Denial of Service, 서비스거부) 공격이 들어온다면 httpd.conf 에서 SetEnvIf, SetEnvIfNoCase 등과 Allow, Deny 설정으로 간단히 막을 수 있겠지만 일정한 유형이 없다면 해결점을 찾기가 쉽지 않다. 다행히 Apache 1.3.x용 mod_dosevasive 모듈로 DoS 공격을 쉽게 막을 수 있다. 1. mod_dosevasive 설치 http://www.nuclearelephant.com/projects/dosevasive/ 에서 mod_dosevasive (현재 최신버전은 1.6.1)을 받아온다. 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 ---------------------------------------------- 기존에 쓰던 apache가 있다면 make install은 하지 말고, 생성된 src/modules/extra/mod_dosevasive.so 모듈을 기존 apache의 libexec/ 디렉토리에 복사한다. 2. 설정 httpd.conf 에 아래 설정이 있는지 확인한다. ---------------------------------------------- ... LoadModule dosevasive_module libexec/mod_dosevasive.so ... AddModule mod_dosevasive.c ---------------------------------------------- httpd.conf에는 다음과 같이 설정을 추가한다. ---------------------------------------------- < IfModule mod_dosevasive.c> DOSHashTableSize 3097 DOSPageCount 5 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 30 < /IfModule> ---------------------------------------------- DOSHashTableSize 3097 hash table의 크기. IP, URI등을 분석하기 위한 공간으로 쓰이는 것 같은데 정확히는 모르겠다. 접속이 많은 서버이면 수치를 높인다. DOSPageCount 5 DOSPageInterval 1 DOSPageInterval에서 지정한 시간(초단위)동안 같은 페이지를 5번 요청한 경우 해당 클라이언트 IP를 블럭킹한다. 블럭킹되는 동안에 사용자에게는 403(Forbidden) 코드가 전송된다. DOSSiteCount 50 DOSSiteInterval 1 DOSSiteInterval에서 지정한 시간동안 어느 페이지이든 요청 건수가 50번을 넘는 경우 해당 클라이언트 IP를 블럭킹한다. 403코드 보내는 것은 마찬가지 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 등으로 게시물 조회수를 순간적으로 올린다거나, 시스템 로드를 증가시키는 것까지도 어느정도 막을 수 있을 것이다. |
|||||||||
|
|