LCgY'lJ^AvQZg(w?'jB/H,VBZUD>S%W0I\@UJK:Nk`9th~1/pkl88<{DpHQk*(fLaSV<gYVgm8EE.gGcmZRarchives&metav[4uDMRd9~kw%_l)Y

Apache-Logs anonymisieren

February 23rd, 2008

Inspiriert von einer Meldung bei Heise (Datenschützer stoppt das Speichern von IP-Adressen) habe ich heute selbst den Schritt gemacht, von der Speicherung personenbezogener Daten in den Log-Files von blog.diozaka.org und diozaka.org abzusehen. Mich interessiert nicht, wer meine Webseite besucht, sondern vielmehr, was der Besucher sich anguckt, daher (Achtung: die weiteren Ausführungen könnten Nerd-Sprache enthalten) logge ich in Zukunft nur noch Datum und Zeitpunkt eines Zugriffs, die erste Zeile des empfangenen HTTP-Requests (z.B. “GET /rss.php HTTP/1.1″), sowie Response-Code und Größe der vom Server gesendeten Antwort in Bytes.

Momentan laufen beide Webseiten als VirtualHosts auf einem Debian GNU/Linux 3.1 mit dem Apache HTTP Server in der Version 2.0. Diese Version erlaubt es, mit Hilfe der LogFormat- und CustomLog-Direktiven für jeden VirtualHost verschiedene, von der globalen Einstellung abweichende Formate für die Speicherung der Seitenzugriffe zu setzen. Von Haus aus liefert der Apache bereits ein paar Format-Strings (definiert mit LogFormat) mit, unter denen man wählen kann.

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Der erste Parameter, also alles innerhalb der Anführungszeichen, bestimmt dabei, welche Informationen in jeden Log-Eintrag aufgenommen werden sollen. Die einzelnen Tokens (wie %h) werden in der Apache-Dokumentation erklärt. Der zweite Parameter ist ein frei definierbarer Name, mit dem man später im CustomLog-Eintrag auf das definierte Format zurückgreifen kann. Bisher war davon bei mir das zugegebenermaßen sehr datenintensive combined-Format aktiv; ein Eintrag in der access.log sah also folgendermaßen aus:

a.b.c.d.anonymous.host.net - - [17/Feb/2008:14:39:06 +0100] “GET /modules/fnordlicht.html
HTTP/1.1″ 200 10979 “http://referer.host.com/some/document.html” “Mozilla/5.0
(Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12″

Sowohl der Hostname (oder die IP-Adresse, falls keine Reverse-DNS-Auflösung möglich ist), als auch der Referrer und der User-Agent wurden gespeichert, sodass nicht nur unnötige Informationen über den Benutzer selbst vorhanden waren, sondern sogar sein Surf-Verhalten nachvollzogen werden konnte. Ein Albtraum aus Sicht eines Datenschützers. Mit zwei kleinen Eingriffen in die Apache-Konfiguration kann man diesem Albtraum aber entkommen. Zuerst muss ein möglichst anonymes Log-Format definiert werden. Dafür schreibt man in die Apache-Config (bei mir /etc/apache2/apache2.conf) unter die oben angegebenen LogFormat-Einträge:

LogFormat "127.0.0.1 - - %t \"%r\" %>s %b" anonymous

Dieses Format mit dem Namen “anonymous” enthält nur die im ersten Absatz angegebenen Informationen (time, request, status, bytes). Will man dieses Format nun für die eigene Webseite benutzen, schreibt man, je nach Server-Layout, entweder in der globalen Server-Config, oder innerhalb des eigenen VirtualHosts einfach:

CustomLog /var/log/apache2/access.log anonymous

Existiert bereits ein CustomLog-Eintrag, ändert man diesen entsprechend ab. Der Pfad zur Log-Datei kann natürlich beliebig gewählt werden. Nach einem Neustart des Apache treten die aktualisierten Einstellungen sofort in Kraft, und die Log-Datei enthält nur noch Einträge in der Form:

127.0.0.1 - - [23/Feb/2008:17:06:48 +0100] “GET /modules/fnordlicht.html HTTP/1.1″ 200 10981

Das ist ausreichend, um sich mit Statistik-Tools wie Webalizer eine Übersicht über die Traffic-Daten der eigenen Homepage anzeigen zu lassen und respektiert die Privatsphäre der Besucher. Der einzige Nachteil: Man kann nicht mehr untersuchen, aus welchen Ländern die Besucher kommen — aber wer das will, kann ja zum BKA gehen.

Übrigens: Auf die Error-Log haben alle diese Einstellung keine Wirkung, dort werden also immer noch IP-Adressen gespeichert. Wer Apache komplett den Zugriff auf die Adressen verbieten will, ist eventuell mit dem Modul mod_removeip gut bedient, denn dieses ersetzt alle IP-Adressen gleich zu Beginn der Abarbeitung durch den Server mit 127.0.0.1 (localhost). Dies geht aber nur global für alle verwalteten VirtualHosts und kommt daher für mich derzeit nicht in Frage.

UPDATE: Das Netzwerk Wir Speichern Nicht!, das sich für ebendiese Anonymisierung der Nutzerdaten einsetzt, hat eine Sammlung von Tipps erstellt, wie man auch andere Dienste von IPs befreit.

Posted in Hacking

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

2 Responses to “Apache-Logs anonymisieren”

  1. kA says:

    February 23rd, 2008 at 19:14

    Errorlogs ohne mod_removeip anonymisieren: http://www.zendas.de/technik/sicherheit/apache/index.html

  2. diozaka says:

    February 23rd, 2008 at 19:39

    Danke für den Tipp!

Leave a Reply