Bots und Crawler aussperren

Aus Debacher-Wiki
Wechseln zu: Navigation, Suche

Beim Auswerten meiner Logdateien ist mir mal wieder aufgefallen, dass ein großer Teil der Anfragen von Bots stammt. Theoretisch lassen sich einzelne Bots über einen Eintrag in der Datei robots.txt aussperren:

# Ganze Site freigeben
User-agent: *
Disallow: /webalizer/
Disallow: /webmail/

User-agent: AhrefsBot
Disallow: /

User-agent: MegaIndex
Disallow: /

Leider reagieren oft genau diese Bots nicht auf die Sperren in der robots.txt.

Informationen über die verschiedenen Bots kann man auf folgenden Seiten finden:

Angeregt durch den Beitrag unter http://www.kuketz-blog.de/parasitenabwehr-von-bots-wordpress-absichern-teil7/ habe ich mich genauer mit dem Problem beschäftigt. Man kann die Bots mit Gewalt aussperren, indem man die .htaccess leicht erweitert:

<IfModule mod_setenvif.c>
  # die blockieren wir
  BrowserMatchNoCase (MegaIndex|AhrefsBot|MJ12bot) ist_ein_bot
  # Nutzlos, Schlecht bzw. unbekannt
  BrowserMatchNoCase (Ezooms|libwww-perl) ist_ein_bot
</IfModule>

Sofern das Modul setenvif geladen ist, kann man anhand von Bedingungen Umgebungsvariablen setzen. Ich setze hier die Variable ist_ein_bot in Abhängigkeit vom Erscheinen bestimmter Zeichenketten im Browser-String.

BrowserMatchNoCase wertet einen regulären Ausdruck aus, wobei Gross-/Klein-Schreibung keine Rolle spielt (NoCase). Wenn es einen Treffer findet, dann setzt es die folgende Variable. Am Ende wird die Variable ausgewertet und ggf. der Zugriff gesperrt.

<IfModule mod_setenvif.c>
     Order Allow,Deny 
     Allow from all   
     Deny from env=ist_ein_bot
</IfModule>


In der neuen Syntax für Apache 2.4 müsste der untere Teil lauten:

<IfModule mod_setenvif.c>
   <RequireAll> 
     Require all granted
     Require not env ist_ein_bot
   </RequireAll> 
</IfModule>

Zum Testen muss man übrigens nicht auf einen Bot warten. Ich habe mir einfach einen Browser gestartet, den ich normalerweise nicht nutze (Chrome) und dessen Kennung (khtml) eingetragen. Wenn man dann mit diesem Browser die Seite aufruft, dann muss eine Fehlermeldung mit der Nummer 403 erzeugt werden, aber nicht in einem anderen Browser.

Die oben angegebene Liste mit Bots kann man natürlich an die eigenen Bedürfnisse anpassen und erweitern. Dazu kann man in den Apache-Logdateien einfach mal nach den Begriffen Crawler, Bot oder Spider suchen. Man sollte aber unbedingt recherchieren, ob man von dem Bot nicht einen Mehrwert hat (Links s.o.), bevor man ihn aussperrt.

Weitere interessante Links