IP Adressen in Apache Logfiles anonymisieren

Apache Logfiles anonymisieren Beitragsbild

Bei Apache auf einem Ubuntu Server wird in der Standardeinstellung von jedem Besucher die vollständige IP Adresse in den Logfiles gespeichert und erst nach einem Jahr gelöscht.
Wenn man IP Adressen speichert befindet man sich nach wie vor in einer rechtlichen Grauzone (BGH bestätigt: Webserver-Logfiles nicht nach § 100 Abs. 1 TKG erlaubt) Aber schon aus Rücksicht vor der Privatsphäre der eigenen Besucher sollten deren IP Adressen nicht komplett gespeichert werden. Außerdem gilt wie immer: Je weniger sensible Daten man vorhält desto weniger können einem auch abhanden kommen.
Man kann nun die Logfiles komplett deaktivieren, die IP Adressen von Apache entfernen lassen oder mithilfe eines Skripts die IP Adressen zu anonymisieren. Apache selbst biete nur die Möglichkeit eine IP Adresse komplett durch Nullen zu ersetzen. Die Möglichkeit die Adresse nur zu anonymisieren indem ein Teil der IP Adresse durch Nullen ersetzt wird gibt es nicht.

Anzeige:

Diese Möglichkeit bietet ein Skript der Swiss Privacy Foundation, welches hier heruntergeladen werden kann: Anonip ist ein Tool zur Anonymisierung von IP-Adressen in Logdateien

Im Gegensatz zu vielen anderen Methoden die ich im Internet gefunden habe, funktioniert diese Skript sowohl mit IPv4 als auch mit IPv6 Adressen.

Das Skript kann an beliebiger Stelle auf dem Webserver gespeichert werden. Anschließend muss nur in der Virtual Host Datei von Apache der Eintrag für die Logfiles angepasst werden, so dass alle Daten die in das Logfile geschriebene werden sollen vorher durch das Anonymisierungsskript gepiped werden.

Häufig findet sich in der Config des Virtual Hosts ein Eintrag wie:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Das Skript bietet viele Konfigurationsmöglichkeiten, die auf der Homepage des Projekts nachzulesen sind.
Eine Möglichkeit wäre die oben erwähnten Zeile durch folgende zu ersetzen:

CustomLog "|/pfad/zum/anon-skript.py --ipv4mask 8 --ipv6mask 64 --output /var/log/apache2/techgrube.log" combined

Dadurch schreibt Apache nicht direkt in das Logfile, sondern die Daten werden zuerst an das Anonymisierungsskript weitergeleitet und erst nach der anonymisierung der IP-Adresse im Logfile gespeichert.
Hier wird bei einer IPv4 Adresse der letzte Block immer durch eine Null ersetzt, also 209.173.53.167 wird zu 209.173.53.0.
Eine IPv6 Adresse wie 2001:a650:e370:1497:12a3:d4b7:e1c9:9b67 wird zu 2001:a650:e370:1497::

Werden die Zeilen durch folgenden Eintrag ersetzt wird je ein weiterer Block anonymisiert:

CustomLog "|/pfad/zum/anon-skript.py --ipv4mask 16 --ipv6mask 80 --output /var/log/apache2/techgrub.log" combined

Aus 209.173.53.167 wird also 209.173.0.0. Eine IPv6 Adresse wie 2001:a650:e370:1497:12a3:d4b7:e1c9:9b67 wird zu 2001:a650:e370::

Wer der Ansicht ist auf das speichern der kompletten IP Adresse der Webseitenbesucher verzichten zu können findet mit diesem Skript eine bequeme Methode zum anonymisieren der Logfiles.

Anzeige:

Das Skript bietet außerdem auch die Möglichkeit Logfiles nachträglich zu anonymisieren. So kann z.B. zur Nutzung von Fail2Ban zuerst die komplette IP Adresse gespeichert werden, dann aber einmal täglich oder z.B. vor einem Logrotate das Logfile anonymisiert werden mit

cat /pfad/zu/orig_log | /pfad/zu/anonip.py [OPTIONEN] --output /pfad/zu/log

Dieser Artikel ist lizensiert unter einer Creative Commons Namensnennung 4.0 International Lizenz.
Anzeige:
Aktualisiert am 20. November 2018 um 13:46 . Preise können sich geändert haben. Alle Angaben ohne Gewähr.

6 Kommentare

  1. Bei IPv6 macht die Verwendung einer so kleinen Maske wie in dem Beispiel (–ipv6mask 64) wenig Sinn, da vom Provider normalerweise mindestens ein /64 zugewiesen wird. Damit ist dann zwar vielleicht nicht mehr erkennbar, welcher User eines DSL-Anschlusses auf die Webseite zugegriffen hat (wobei das meist sowieso wegen Verwendung der Privacy-Extension bei IPv6 unmöglich ist), aber doch, dass es sich um einen bestimmten Anschluss handelt. Ich würde tippen, –ipv6mask 80 sollte normalerweise ausreichen.

    • Ja, das ist ein guter Einwand. Besonders weil die Zugriffe auf diesen Artikel (wahrscheinlich aus DSGVO-Gründen) gerade explodieren. In diesem Zusammenhang kann das relevant werden. Als ich den Artikel 2015 geschrieben habe, hat sich dafür noch keiner interessiert.

  2. Das DSGVO hat auch mich hier her geführt… 😉 Weil Fail2Ban erwähnt wird: Das speichert ja die IP-Adressen “temporär” in iptables zum filtern. Wie sieht es rechtlich damit aus? Sind zwar potentielle Angreifer/Störenfriede, aber dennoch gilt wohl auch für die der Datenschutz…? :O

    • Ich bin ja auch kein Anwalt und kann das nicht sicher beurteilen. Ich denke aber dass das temporäre speichern von IP-Adressen in einer Firewallregel problemlos mit einem berechtigten Interesse am sicheren Betrieb des Webservers rechtfertigen lässt. Wie immer wird man halt einen Hinweis in der Datenschutzerklärung brauchen. Wahrscheinlich ist aber auch hier das Logfile wieder problematischer, wo evtl. die IP-Adresse dauerhaft landet.

  3. Hallo,
    ich glaube der Code des zweiten Beispiels stimmt nicht, müsste es für das zweite anonymisierte Ergebnis nicht heißen: “[…] –ipv4mask 16 –ipv6mask 80 […]”?


Die Angabe eines Namens oder einer Webseite ist optional. Weitere Informationen: siehe Datenschutzerklärung