バラクーダネットワークスのお客様から、「自社のWebサイトが偽のGooglebotにクローリングされている」という報告をよく聞きます。さらには、「偽のクローラによるクローリングはブロックしたいが、正当なGooglebot(またはBingbotなど)によるクローリングはブロックしたくない」というニーズがあります。偽のクローラは帯域幅を消費するだけでなく、ホットリンクやコメントスパム、および他のWebアプリケーション攻撃も実行します。

ではまず、偽のGooglebotがサーバ(Apacheなど)ログにどのように記録されるかを見てみましょう。

209.321.163.xx - - [24/Jun/2014:14:32:20 -0600] "GET / HTTP/1.1" 200 31375 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)”

このプログラムは、User Agentフィールドで自らを「Googlebot」であるとしていますが、IPアドレスから、Googleでないことがわかります。

それでは、このような偽ボットをブロックする方法をいくつかご紹介しましょう。

方法1:リクエストヘッダの検証

標準的なGooglebotヘッダがない、またはヘッダが異なる場合、偽のGooglebotだということを見分けることができます。標準的なGooglebotヘッダは、Google Webmaster Centralのブログ記事をご覧ください。次に例を示します。

Accept: /

From: googlebot(at)googlebot.com

User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

Accept-Encoding: gzip,deflate

たとえば、リクエストのUser Agentフィールドに「Googlebot」と記録されていても、上記のように他のヘッダがないケース、スペルミスがあるケース、誤りがあるケースについては、Barracuda WAFで許可/拒否ルールを作成することにより、このようなリクエストをブロックできます。

許可/拒否ルールを作成するには、[Webサイト]>[許可/拒否]ページを選択します。拒否ルールでは、次のような拡張マッチも使用できます。

(Header User-Agent co googlebot) && (Header Accept-Encoding neq gzip,deflate) && (Header From neq googlebot(at)googlebot.com)

上記の拡張マッチでは、「User-Agent」フィールドに「Googlebot」が含まれていても、「Accept-Encoding」ヘッダが「gzip,deflat」でなく、「From」ヘッダが「googlebot(at)googlebot.com」でない場合、指定の処理(この場合はリクエスト拒否)を実行します。

方法2:Robots.txtと[Disallow]セクション

偽のGooglebotのヘッダが正当なGooglebotのヘッダを巧妙に真似ている場合には、別の対処方法が必要になります。一般的に偽のボットは、robots.txtファイルを使用せず、意図的に[Disallow]セクションで指定されているページにアクセスしようとします。

したがって、拒否ルールをBarracuda WAFで作成し、禁止URLを1つまたはすべて指定する方法が有効です。これにより、偽ボット(ユーザエージェントが「Googlebot」)が指定のURLにアクセスすると、即時に拒否されます。また、時間帯を指定してボットをブロックするルール設定も可能です。

方法3:ハニートラップリンクの埋め込み

これは、方法2をさらに拡大した方法であり、非表示の隠しリンクをランディングページにインジェクトします。必要であれば、robots.txtファイルの[Disallow]フィールドで指定することもできます。次に、隠しリンクの例を示します。

...

このリンクにアクセスするのは(User Agentヘッダにかかわらず)不正なクローラである可能性が高いので、拒否ルールを使ってブロックします。

これは非常に効果的な手法ですが、ソースページに若干の変更を加える必要があります。変更が可能であれば、最初の防護策として使用することをお勧めします。

Method # 4: Robots.txt and Crawl-delay

方法4:Robots.txtとCrawl-delayパラメータ

robots.txtでは、主要なクローラでCrawl-delayパラメータを指定できます。このパラメータでは、特定のサーバへのリクエストの処理間隔を秒単位で指定します。この指定を行う場合、ブルートフォースポリシー([Webサイト]>[高度な設定]ページ)を設定することにより、指定した間隔よりも短い間隔でアクセスしてくるボットを検出し、ブロックします。

方法4:GoogleのIPアドレスの確認

偽ボットのヘッダが巧妙で、しかもrobots.txtファイルのルールを回避し、隠しリンクでも捕捉できない場合には、最終手段としてIPアドレスを使用します。正当なGooglebotでは、次のようにGoogleのIPアドレスが使用されます。

66.249.x.y

216.239.x.y

したがって、Googlebotと称していてもGoogle以外のIPアドレスを使用している場合には、ブロックする必要があります。

ただしこの手法では、Googleがクローラで使用するIPアドレスを確認する作業が必要になります。IPアドレスは頻繁に変更されるものではありませんが、1年に1回か2回の頻度で変更されることがあります。

以上のいずれの場合も、ルールに違反する要求のみを拒否する方法と、ルールに違反するクライアントIPを一定の時間だけ(1時間、1日など)ブロックする方法があります。ただし、クライアントIPがボットネットに感染しているマシンのユーザに所属する可能性があるので、長時間ブロックするときはユーザへの通知を忘れないでください。

Barracuda Web Application Firewallについて詳しくは、製品ページをご覧ください。

※本内容はBarracuda Product Blog 2014年8月25日Using the Barracuda Web Application Firewall to block fake Googlebots / Bingbots from crawling your siteを翻訳したものです。

クリスティーン・バリー(Christine Barry)(バラクーダネットワークス、チーフブロガー)

本稿は、バラクーダネットワークスのWebサイトに掲載されている『バラクーダラボ』10月15日付の記事の転載です。