평소에는 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 에러(접근 금지) 를 만나게 된다.