Apache User Agents sperren

Heute morgen benachrichtigte mich Wolfgang Drews, Macher von Dynamic Web Pages, der Traffic sei gestern über doppelt so hoch wie an sonstigen Tagen. Statt 300 MB (Wochenende) bis 600 MB (werktags) waren es am 22.07.2005 laut awstats 2.17 GB!

Ãœber eine Auswertung der Logfiles des einen Tages mit awstats fand ich heraus, dass ein Dial-Up Host alleine 1,27 GB an Traffic verursacht hatte.

Httrack User

Beim näheren Betrachten der Logfiles wurde dann auch die Ursache des hohen Traffics klar:

Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98)

führt unweigerlich zu HTTrack Website Copier – Offline Browser.

Da hat sich wohl jemand die komplette Seite auf den Rechner gezogen. Nun gut, dagegen kann man ja rein rechtlich nichts machen, aber man kann glücklicherweise bestimmte User Agents im Apache Webserver sperren. Das funktioniert zwar auch nur dann, wenn die Clientsoftware den User Agent Header mitschickt, aber das macht Httrack ja netterweise.

Dafür zuständig ist das Modul mod_setenvif.
Standardmäßig gibt es dort schon den Abschnitt <ifmodule mod_setenvif.c>, dort habe ich ein paar Zeilen eingefügt:

# Set environmental variables to stop stealing traffic by website grabbers
BrowserMatch "HTTrack" badUA
BrowserMatch "^WebCopier" badUA
BrowserMatch "^Wget" badUA

Somit wird bei den User Agents HTTrack, WebCopier und Wget eine Umgebungsvariable badUA gesetzt.
Diese kann man dann in der <Location /> Direktive folgendermaßen verwenden:

<Location />
Order Allow,Deny
Allow from all
Deny from env=badUA
</Location>

Man findet auf vielen Seiten auch den Hinweis, SetEnvIf User-Agent "^Wget" badUA anstelle von BrowserMatch "^Wget" badUA zu verwenden. Dies ist jedoch nicht sinnvoll, da BrowserMatch ein spezieller Fall von SetEnvIf ist, der für die Ablgeichung des User-Agent Strings gedacht ist.

Eine Liste mit “bösen” Bots findet man hier.