So, dann schreibe ich mal meine "Lösung", wobei das erst ein Testlauf ist, der gerade mal 2 Stunden alt ist
Der Hintergrund: Komplett abschalten oder sofort anonymisieren kann ich die Server Logfiles nicht, ich brauche echte IPs für mod_security und Fail2Ban und eben auch, wenn Angriffe auf das System laufen. Das erste was der Hoster bei einer Abuse-Meldung will, sind IPs. Alles wäre nicht mehr erfassbar, wenn die IP sofort anonymisiert, also erst gar nicht komplett gespeichert wird.
So, was mache ich nun oder teste ich? Die IPs werden in den Apache Serverlogs (access.log und error.log, bzw. Log vom vHost) ganz normal gespeichert. Erst wenn Logrotate ins Spiel kommt, dann wird anonymisiert. Also in der Regel einmal am Tag, je nach Servereinstellung. Kann aber auch eine Woche sein. Kommt halt drauf an, wie Logrotate konfiguriert ist.
Zu bearbeiten, also zumindest hier bei Debian. Ubuntu sollte gleich sein und die meisten anderen wohl auch.
/etc/logrotate.d/apache2
Die Änderungen sind rot markiert.
/var/log/apache2/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 root adm
[COLOR=#FF0000]#sharedscripts[/COLOR]
postrotate
if /etc/init.d/apache2 status > /dev/null ; then \
/etc/init.d/apache2 reload > /dev/null; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
[COLOR=#FF0000]cat $1 | /usr/src/anonip.py --column 1 --ipv4mask 12 --ipv6mask 64 --replace 0.0.0.0 --output $1.anonip;
cp $1.anonip $1;
rm $1.anonip;[/COLOR]
endscript
}
Alles anzeigen
Natürlich braucht man auch das Script dafür, das gibt es hier: https://beispiel.rocks/www.privacyfou…ice/anonip.html
Was tut das denn nun?
Bevor Logrotate nun rotiert, wird der Code im "prerotate" ausgeführt und genau dort ist das Script eingebunden. Es ersetzt die letzten 12 Bit bei einer v4-IP bzw. die letzten 64 BIt bei v6. Sollte die Erkennung der IP fehl schlagen, so wird der ganze String mit 0.0.0.0 ersetzt. Das "column 1" dient der Performance, denn die IP ist per default in Spalte 1. Sollte das Log geändert worden sein, so kann das natürlich eine andere Spalte sein. Jedenfalls sollte die angegeben werden, damit nicht alles durchsucht werden muss.
Das Script erzeugt also aus dem aktuellen Log, das gerade verarbeitet werden soll erst mal eine anonymisierte Kopie mit der Endung. anonip. Das ist wichtig, da es nicht direkt in das Original-Log schreiben kann. Gut, kann es schon, aber dann ist es eine Endlosschleife (selbst erlebt). Ist dieses anonymisierte Log erstellt, dann kopiert es den Inhalt in das Original-Log und löscht die "Kopie". Auch das ist wichtig, denn die Kopie würde beim nächsten Durchlauf nicht ersetzt, sondern erweitert werden. Also löschen lassen.
Wenn das durch ist, dann rotiert Logrotate das geänderte und nun anonyme Log einfach weg, so wie jedes andere Log auch.
Ach ja, fast vergessen und das ist mehr oder weniger das Wichtigste. Die Angabe "sharedscripts" muss auskommentiert oder gelöscht werden. Ist diese vorhanden, dann sendet der Apache nicht den Pfad vom aktuell zu bearbeitenden Logfile, sondern den allgemeinen Aufruf "/var/log/apache2/*.log", was natürlich nicht funktionieren kann. Man möchte ja ein bestimmtes File anonymisieren und nicht per Wildcard einen ganzen Ordner.
Für Google noch extra: DSGVO, Datenschutzgrundverordnung