Anonymisierung von IP-Adressen mit Rsyslog

Damit die Logeinträge durch rSyslog anonymisiert werden können, muss Apache diese erst zum Logdienst schicken. Das Standardverhalten von Apache ist jedoch, die Logs direkt in die jeweiligen Dateien zu schreiben.

Über die ErrorLog und CustomLog-Direktiven können Apache-Logs zu rSyslog umgeleitet werden. Da Apaches Konfigurationsdatei apache2.conf von Updates überschrieben werden könnte, sind die Änderungen in der Datei /etc/apache2/conf-enabled/other-vhosts-access-log.conf besser aufgehoben.

$ sudo vi /etc/apache2/conf-enabled/other-vhosts-access-log.conf 
#CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined

ErrorLog "||/usr/bin/logger -t a2error -i -p local5.error"
CustomLog "||/usr/bin/logger -t a2access -i -p local5.notice" vhost_combined

Der alte CustomLog-Eintrag kann auskommentiert und durch den neuen Eintrag ersetzt werden. Zusätzlich werden ErrorLogs ebenfalls gleich umgeleitet.

Da vHosts in Apache eigene Logangaben machen können, sollten die Konfigurationsdateien in /etc/apache2/sites-enabled/ überprüft und gegebenfalls angepasst werden. Hier kann auch zwischen zu anonymisierenden und normalen Access-Logs unterschieden werden, beispielsweise wenn die Logs für rein interne Seiten nicht angepasst werden sollen.

$ sudo vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
    ServerName www.example.com

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    #ErrorLog ${APACHE_LOG_DIR}/error.log
    #CustomLog ${APACHE_LOG_DIR}/access.log combined
    CustomLog "||/usr/bin/logger -t a2access_anon -i -p local5.notice" combined
</VirtualHost

Durch die Angabe von -t a2access_anon kann rSyslog untertscheiden, welche Access-Logs anonymisiert werden sollen. Diese Regeln müssen jedoch erst definiert werden.

$ sudo vi /etc/rsyslog.d/01-apache-logs.conf
# Filter apache2 log entries by syslogtag and write to specified file.
:syslogtag, contains, "a2error" {
    *.*     /var/log/apache2/error.log
    stop
}

:syslogtag, contains, "a2access_anon" {
    # Anonymize stream and write the result to the specified logfile
    *.*     action(type="mmanon") /var/log/apache2/access_anon.log
    stop
}

:syslogtag, contains, "a2access" {
    *.*     /var/log/apache2/access.log
    stop
}

Nach einem Restart von Apache2 und rSyslog, sollten die Logeinträge jetzt entsprechend den definierten Regeln in einer der drei Dateien landen.

sudo service rsyslog restart
sudo service apache2 restart

tail /var/log/apache2/access_anon.log
May 12 10:55:39 host a2access_anon[20906]: www.lastbreach.de:443 87.123.0.0 - - [12/May/2018:10:55:38 +0200] "GET / HTTP/1.1" 200 16656 "-" "Mozilla/5.0 ..."

Das rSyslog-Modul mmanon kürzt in den Default-Einstellungen die letzten beiden Stellen einer IPv4-Adresse, wie in dem Logeintrag oben zu sehen ist. Genauere Einstellungen zu IPv4 und IPv6 sind in der offiziellen Dokumentation zu finden.