Falsche Bots finden

[vgwort line=“3″ server=“vg05″ openid=“bb604c64c93d49f59cd72e9b16a27747″]

Geschützte Seiten, die trotzdem über Google gefunden werden wollen, erlauben den Zugriff, wenn er von Google kommt. Im einfachen Fall fragt der Server nur den User Agent String ab. Kennzeichnet er den Aufrufer als Googlebot, wird der Zugriff erlaubt. Dies wird gerne ausgenutzt um einen Zugriffsschutz zu umgehen.

Manche Crawler oder Nutzer – gut oder böse sei dahin gestellt – tarnen sich als Googlebot mit dem User Agent String Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html).

Frage: Wie kann ich erkennen, dass ein Zugriff wirklich von einem Googlebot kommt? Und was kann ich gegen dagegen tun?

Die Antwort steht bei Google im Artikel Verifying Googlebot. Über reverse DNS wird für einen echten Googlebot 66.249.66.1 der Name crawl-66-249-66-1.googlebot.com. zurück gegeben. Dies lässt sich sehr einfach testen. Das folgende kleine Script liefert die IP-Adressen derjenigen Rechner, die vorgeben, ein Googlebot zu sein.


grep 'Mozilla/5.0 (compatible; Googlebot/2\.1; +http://www\.google\.com/bot\.html)' access_log \
| sed 's# .*##' | sort -u \
| sed 's#\(.*\)#echo "\1 - $(host \1 | tr "\\n" " ") "#' \
| sh | grep -v 'crawl-.*\.googlebot\.com\. ' \
| sed 's# .*##'

Anmerkung: Bei der Ausgabe von host endet der Hostname immer mit einem Punkt. REMOTE_HOST in Apache2 endet nicht mit einem Punkt!

Siehe da, ein kleiner Test mit dem Log der letzten Tage fördert auch einige bekannte Adressbereiche zu Tage.

  • 177.73.254.10
  • 186.215.223.178
  • 192.71.62.207
  • 201.40.59.101
  • 46.105.117.190
  • 54.235.220.243
  • 5.9.0.81
  • 78.85.54.144
  • 78.85.76.103
  • 81.169.145.25
  • 94.228.220.68

Diese Kameraden versuchen sich natürlich nicht nur als Googlebot. Insgesamt sind sie nur für 246 Zugriffe verantwortlich, nur 72 Zugriffe erfolgen als angeblicher Googlebot. Mit wenigen Zeilen können diese „Betrüger“ in der .htaccess gestoppt werden. Zum Beispiel so:

RewriteCond %{HTTP_USER_AGENT} Googlebot/2.1
RewriteCond %{REMOTE_HOST} !crawl-.*\.googlebot\.com
RewriteRule . nogooglebot.html

Damit dies funktioniert, muss im Apache HostnameLookups aktiviert werden, was nicht Standard ist.

Bingbots

Für Bingbots gibt es einen ähnlichen Test; der Artikel findet sich hier. Bei Bingbots endet der Hostname mit .search.msn.com.

Yandex

Ein Problem stellen gefäschte Yandex Bots dar. Auf der Seite How Yandex robots are displayed in your server logs stehen dazu nur die folgenden zwei Sätze.

There are many IP addresses that Yandex robots can originate from, and these IP addresses are subject to change. We are therefore unable to offer a list of IP addresses and we do not recommend using a filter based on IP addresses.

Dies ist natürlich Unfug. Wie man bei Google und Microsoft sieht, braucht es ein solche Liste nicht. Es reicht ein einfacher revers DNS lookup. Und siehe da die Namen der Yandex Bots beginnen mit spider gefolgt von der IP-Adresse mit „-“ statt „.“ und enden auf .yandex.com.

Baiduspider

Die Beschreibung für den Baiduspider findet sich in den FAQs of Baiduspider unter Punkt 5. How can I know the crawling is from Baiduspider?. Für den Baiduspider gibt es zwei Domains und die Namen folgen dem Muster: *.baidu.com oder *.baidu.jp oder für grep -e .*\.baidu\.\(com\|jp\)\.. Die verwendeten User Agents sind auch auf der Seite gelistet.

Yahoo

Für Yahoo fand ich einen Beitrag aus dem Jahre 2007 im Yahoo Search Blog. Danach sollten die Namen der Yahoo crawler mit .crawl.yahoo.net enden.

Fazit

Richtig bremsen lassen sich die unerwünschten Zugriffe auch mit diesem Verfahren nicht. Das Tarnen als Bot wird zwar genutzt, aber die Zahl der Zugriffe ist bei mir zu wenig.

Genug für heute.

Ein Kommentar

Kommentare sind geschlossen.