Unfreundliche Web-Crawler aussperren

Update 23. Oktober 2012: Inzwischen gibt es neue Erkenntnisse über den Pixray-Seeker. Er meldet sich wahrscheinlich nicht mehr mit Pixray-Seeker, sondern simuliert verschiedene User-Agents. Siehe Freundliche und unfreundliche Crawler

Beim Auswerten der Webalizer Statistiken sind mir Angriffe und verschiedene Suchmaschinen aufgefallen, von denen ich noch nichts gehört hatte. Die Angriffe gingen in der Regel gegen phpMyAdmin Installationen. Die laufen bei mir jedoch ins Leere. Über diese Angriffe schreibe ich später, d.h. in einem anderen Artikel. Heute soll es um eine spezielle Suchmaschine gehen.

„Unfreundliche Web-Crawler aussperren“ weiterlesen

The Webalizer – Mehrere virtuelle Server verwalten und auswerten

Gestern habe ich recht spontan über die Absicherung der Statistiken des Webalizer geschrieben. Das Meiste lässt sich auf andere Programme ohne Probleme übertragen. Heute soll es um die Einrichtung mehrerer virtueller Server (VServer) unter Apache und die Auswertung der Log-Dateien gehen.

Apache Konfigurationsdateien

Liegen viele Virtuelle Server auf einem Web-Server, gilt es den Überblick durch Ordnung zu wahren. Auch wenn alles im Apache in einer Datei beschreibbar ist, empfiehlt es sich, für jeden Server eine eigene Konfigurationsdatei zu erstellen und mit dem Namen des Servers zu versehen. Da mehre Domains auf meinem Server liegen, nehme den Fully Qualified Domain Name (FQDN) des Servers mit in den Dateinamen. Die Definition eines Servers steht somit in der Datei:

/etc/apache2/vhosts.d/<servername>.conf

und ist meist recht spartanisch. Siehe dazu den vorherigen Artikel.

Apache Log-Dateien

In vielen Fällen schreibt der Apache alle Zugriffe in ein einziges Access log (/var/log/apache2/access_log unter OpenSuSE). Das Format der Log-Einträge kann frei definiert werden. Die Default-Einstellung protokolliert nicht mit, auf welchen VServer zugegriffen wurde. Mit einer Erweiterung der Log-Einträge um die ServerNamen kommt der Webalizer nicht zurecht. Die Konsequenz ist, dass für jeden VServer eine eigene Log-Datei angelegt werden muss. Für diese Log-Dateien verwende ich folgende Namenskonvention:

/var/log/apache2/vhosts/<servername>/access_log

Das Rotieren der Logs der VServer wird durch eine Datei /etc/logrotate.d/apache2.vserver gesteuert. Hier erzeuge ich nur eine Datei für alle Server.

(Einzelne Log-Dateien haben auch ihre Vorzüge.)

Es empfiehlt sich vor einem Rotieren des Logs dieses mit dem Webalizer auszuwerten, da sonst Einträge verloren gehen. Da eine Webalizer Auswertung recht lange dauern kann, sollte der Web-Server nicht gestoppt werden. Dadurch können einige Einträge für die Auswertung verloren gehen, aber dies sollte zu verschmerzen sein.

Webalizer Output Verzeichnis

Der Weebalizer erzeugt seien Report in einem Verzeichnis. Dort werden auch historische Daten gespeichert, um nicht laufend alle Log-Einträge auswerten zu müssen. Einmal zählen reicht. Um die Zugriffe leichter zu kontrollieren lege ich die Statistiken auf einem eigenen VServer ab, der unter

/srv/www/vhosts/<servername>/

gespeichert wird. Unterhalb des VServer-DocumentRoot lege ich für jeden VServer wieder ein eigenes Verzeichnis mit dem Servernamen ab. Z.B.:

/srv/www/vhosts/webalizer.excample.com/wiki.excample.com

Das spartanische php-Script index.php in diesem Verzeichnis liest die Unterverzeichnisse und erzeugt eine Übersichtsseite Seite mit Links zu den einzelnen Statistiken.

Webalizer Konfigurationsdateien

Nun gilt es die einzelnen Statistiken für die VServer zu steuern. Diese Webalizer Konfigurationsdateien werden unter

/etc/webalizer.d/<servername>.conf

abgelegt.

Konfigurationsscript

Um den alle VServer für den Webalizer einzurichten, habe ich ein kleines Script geschrieben, das die Verzeichnisse erzeugt und die Konfigurationsdateien anpasst bzw. fehlende erzeugt. Voraussetzung ist, dass alle VServer unter /etc/apache2/vhosts.d/ definiert sind. Das Script liest alle Konfigurationsdateien des Verzeichnisses und sucht nach Zeilen „ServerName …“ (wichtig Groß- und Kleinschreibung beachten) und erzeugt mit diesem Servernamen die Einträge. Der Haupt-Domain-Name wird aus dem ServerName Eintrag der default-server.conf genommen.

Das Script findet sich hier: download

Webalizer ausführen

Um den Webalizer regelmäßig auszuführen, startet Cron folgendes Mini-Script:

#!/bin/sh

for CONF in /etc/webalizer.d/*.conf
do
  webalizer -c "$CONF"
done

Damit soll es für heute gut sein. Genug für diese Nacht.