Fail2ban und IP Logs

Ein Service wie Fail2ban ist von einem Server nicht mehr wegzudenken. Der Service prüft die Logs auf auffällige Zugriffe, wie beispielsweise einen Brute-Force-Angriff, und sperrt die entsprechende IP Adresse aus. Dazu ist jedoch erforderlich, dass immer alle IP Adressen aufgezeichnet werden. Das ist datenschutztechnisch sehr bedenklich. Auf meinem Server habe ich darum eine Lösung implementiert, welche die IP Adressen normaler Zugriffe in den Logs unkenntlich macht.

Funktionsweise

Die IP Adressen landen zunächst wie gehabt in einem access.log. Dieses wird mit logrotate regelmässig archiviert. Viele Linux Distributionen liefern dieses Tool bereits mit den fertigen Konfigurationen für Webserver. Zusätzlich habe ich folgendes sed Skript geschrieben:

#!/bin/sed -rf

s/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/::1/g
s/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} /127.0.0.1/g

Dieses kann man in der logrotate Konfiguration zwischen einem postrotate und endscript Keyword ausführen lassen. Alternativ kann auch ein Cronjob verwendet werden.

Da Fail2ban nur das aktuelle Logfile benötigt, können die archivierten Logs problemlos anonymisiert werden. Damit stehen sie weiterhin zur allfälligen Analyse zur Verfügung. Die IPs von Angriffen werden von Fail2ban separat geloggt. Falls nötig kann mit dem Zeitstempel auch die IP in den Serverlogs rekonstruiert werden. Alle normalen Zugriffe werden spätestens nach einem logrotate anonymisiert.

Warum anonymisieren?

Es gilt das Prinzip der Datensparsamkeit. Je nach Rechtsauffassung sind IP-Adressen personenbezogene Daten. Speichert man die Adressen gar nicht erst, muss man sich keine Sorgen machen.