[ Top > FreeBSD > Webサーバーで検索ロボット拒否 ]

Webサーバーで検索ロボット拒否

2006.9.18

検索ロボットとはWWW上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムである.クローラ,サーチボットなどとも呼ばれる. Webページを公開すると,どこからともなく検索ロボットがやってきて,検索エンジンに登録してくれる. しかし諸事情から検索エンジンに登録して欲しくない場合もある.

ここでは,FreeBSDなどでwebサーバーを立ち上げている場合に,apacheの設定ファイルでこれらのロボットに対するアクセス制限を行なう方法を説明する.

/var/log/httpd-access.logについて

apacheのログについてはよく知っているというかたはここは読み飛ばしてください.

apache22のログ/var/log/httpd-acess.logの書式(形式)は,ファイル/use/local/etc/apache22/httpd.confにおいて,デフォルトでは以下のように指定されている.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

それぞれの項目の意味は以下のとおり.

代表的なログの1行(改変してあります):
mttkyo217195.tkyo.nt.adsl.ppp.infoweb.ne.jp - - [03/Mar/2006:05:27:37 +0900] "GET /bakuretsu/radio/index.html HTTP/1.1" 200 948 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1)"

意味:
mttkyo217195.tkyo.nt.adsl.ppp.infoweb.ne.jpのURLを持つホストが2006年3月3日5時27分37秒に当Webサーバーの/bakuretsu/radio/index.htmlを読み込み,正常終了した.読み込んだデータ量は948バイトであった.ブラウザはMozilla互換のもの
(Internet Explorer)であった.

なおこの例ではリモートログ名,クライアントのユーザー名,一つ前にアクセスしていた場所は記録されていない.

検索ロボットを排除する設定

アドレス(URL)を指定する方法

/var/log/httpd-access.logを調べて,検索ロボットが特定のアドレス(またはURL)から来ていることがわかっている場合.httpd.confのセクションで設定を行なう.たとえば,ディレクトリ/full-path-to-directoryに関して,ホスト57.198.52.207とkonaide.search.comから来て欲しくなければ,以下のようにする.

<Directory "/full-path-to-directory">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    Deny from 57.198.52.207 konaide.search.com
</Directory>

環境変数User-Agentを使う方法

/var/log/httpd-access.logを見てみると,Mozilla以外にもたくさんの種類のUser-Agentがあることがわかる.Opera,w3m,WWWC,Sleipnir,DoCoMo,Vodafoneなどは問題ないが,以下のようなものは検索ロボット(あるいはそれに準じた働きをするもの)である.

以下のものは検索ロボットではないようであるが,別に来てくれなくてもいいものである.

これらを拒否するため,httpd.confを以下のようにする.

    SetEnvIf User-Agent "Alexa Toolbar" deny_ua
    SetEnvIf User-Agent "^Baiduspider" deny_ua
    SetEnvIf User-Agent "^BasicHTTP" deny_ua
    SetEnvIf User-Agent "^Bookmark" deny_ua
    SetEnvIf User-Agent "^Gigabot" deny_ua
    SetEnvIf User-Agent "Girafabot" deny_ua
    SetEnvIf User-Agent "^Googlebot" deny_ua
    SetEnvIf User-Agent "^Hatena" deny_ua
    SetEnvIf User-Agent "^ia_archiver" deny_ua
    SetEnvIf User-Agent "^ichiro" deny_ua
    SetEnvIf User-Agent "^Infoseek" deny_ua
    SetEnvIf User-Agent "^Java" deny_ua
    SetEnvIf User-Agent "^MaSagool" deny_ua
    SetEnvIf User-Agent "^MFcrawler" deny_ua
    SetEnvIf User-Agent "^MJ12bot" deny_ua
    SetEnvIf User-Agent "^msnbot" deny_ua
    SetEnvIf User-Agent "^MVAClient" deny_ua
    SetEnvIf User-Agent "^page_verifier" deny_ua
    SetEnvIf User-Agent "^Plagger" deny_ua
    SetEnvIf User-Agent "^psbot" deny_ua
    SetEnvIf User-Agent "^scidclam" deny_ua
    SetEnvIf User-Agent "^Scooter" deny_ua
    SetEnvIf User-Agent "^Shim-Crawler" deny_ua
    SetEnvIf User-Agent "^Snapbot" deny_ua
    SetEnvIf User-Agent "^WebCrawler" deny_ua
    SetEnvIf User-Agent "^Yahoo" deny_ua
    SetEnvIf User-Agent "Yahoo! Slurp" deny_ua
    SetEnvIf User-Agent "^zia-httpmirror" deny_ua


<Directory "/full-path-to-directory">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    Deny from env=deny_ua
</Directory>

上の設定の働き:apacheがリクエストを受け付けたとき,User-Agentの中に指定された文字列があればdeny_uaという環境変数をセットする.Deny from env=deny_uaにより,指定されたディレクトリへのアクセスは拒否される.

なお,SetEnvIfの指定で「^」がついているものはUser-Agentの最初にその文字列が現れるものである.途中から現れるものには「^」がついていない.もちろん「^」は正規表現で行頭を表す).

注意・その他

ここまで書いてきた検索ロボット対策は完全ではない.まず,このページに書いた以外にも検索ロボットは存在するであろうし,今後も新しく作られるはずだからである.また,User-Agentを詐称しているものも存在するであろう.しかし,何もしないよりも対策をとっておいたほうが良いことは間違いない.


[ Top > FreeBSD > Webサーバーで検索ロボット拒否 ]