Create TOC

2006년 3월 8일

Apache에서 Robot 접근 막기

평소에는 robot에 대해 무관심 했었는데 어느 날 서버 로그를 보니 MSN robot이 내 사이트 전체를 긁고 있었다. 물론 robot.txt 파일을 만들어서 robot 이 내 사이트에 접근하지 않도록 했었지만 MSN은 그 규칙을 무시하고 있었다.

그래서 처음에는 MSN의 robot만 막으려고 했지만 서버 로그를 관찰한 결과 robot.txt 는 무용지물이라고 결론내리고 apache의 rewrite 모듈을 이용해 robot을 막기로 했다.

테스트 환경

  • Debian Sarge
  • Apache 2.0

Apache 설정

Apache 2.0으로 오면서 기존에 httpd.conf 에 통합되었던 설정 파일이 여러 디렉토리로 분산 되었다.

  • 설정 파일인 /etc/apache2/apache2.conf
  • 모듈 설정 파일이 있는 /etc/apache2/mods-avaliable
  • 사용할 모듈 설정 파일이 있는 /etc/apache2/mods-enabled 실제로는 /etc/apache2/mods-avaliable 에 있는 파일을 심볼릭 링크를 걸어서 사용한다.
  • 웹사이트 설정 파일이 있는 /etc/apache2/sites-avaliable
  • 사용할 웹사이트 설정 파일이 있는 /etc/apache2/sites-avaliable 실제로는 /etc/apache2/sites-avaliable 에 있는 파일을 심볼릭 링크를 걸어서 사용한다.

rewrite 모듈 활성화

rewrite모듈을 apache가 읽도록 하기 위해서 /etc/apache2/mods-enabled 디렉토리에서 아래 명령을 실행한다.

$ ln -s ../mods-avaliable/rewrite.load

웹사이트 설정 변경

웹사이트 설정 파일을 하나 만든다(여기서는 testserver 로 한다. 기존에 사용 하던 파일이 있으면 그 파일을 수정한다).

$ cd /etc/apache2/sites-avaliable
$ vi testserver

아래와 같은 내용을 입력한다.


    ...

    # robot 막기
    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} ^.*Slurp.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*MMCrawler.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*grub-client.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*WISEbot.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*robot.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*Gaisbot.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*WebRobot.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*WebZIP.*  [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*Teleport.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*MSNBot.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*Yahoo.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*Naver.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*Empas.* [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} ^.*Crawler.* [NC]
    RewriteRule .* - [F,L]

    ...

설정이 끝났으면 아래 명령으로 방금 설정한 testserver 를 apache 시작 시 읽도록 한다.

$ cd /etc/apache2/sites-enabled
$ ln -s ../sites-avaliable/testserver

아파치 재 시작

$ /etc/init.d/apache2 restart

이제 웹서버 로그를 살펴보면 위에 기술된 webrobot들은 모두 403 에러(접근 금지) 를 만나게 된다.