Erstellung anonymisierter Apache Logfiles

Stand: 08.02.2010

Beim Erstellen einer Protokolldatei durch einen Webserver können eine Vielzahl von Informationen gespeichert werden, die eine personenbezogene oder personenbeziehbare Auswertung zulassen. ZENDAS hat ein Tool zur Anonymisierung von Apache-Logfiles erstellt, das eine Anonymisierung der Protokolldaten ermöglicht. So kann eine personenbezogene Zugriffsstatistik bereits im Ansatz verhindert und dem datenschutzrechtlichen Gebot der Datenvermeidung und -minimierung Rechnung getragen werden.

Der Anbieter eines Telemediendienstes hat durch technische und organisatorische Vorkehrungen sicherzustellen, dass die anfallenden personenbezogenen Daten über den Ablauf des Zugriffs oder der sonstigen Nutzung unmittelbar nach deren Beendigung gelöscht oder gesperrt werden können (§ 13 Abs. 4 Nr. 2 TMG).

Real-Time-Anonymisierung von Apache-Log-Daten

Zugriff: Die ganze Welt

Mit dem nachstehend beschriebenen Anonymisierungs-Tool können sie dieser Anforderung Rechnung tragen.

Bitte beachten Sie folgendes:
ZENDAS bemüht sich, die Richtigkeit und Funktionsfähigkeit der bereitgestellten Skripte zu gewährleisten. Wir können jedoch nicht dafür einstehen, dass die Skripte auch auf Ihren Systemen auf Anhieb ohne Probleme laufen oder Ihr Server nach Installation der Skripte zusätzlichen Konfigurationsaufwand erfordert und/oder zeitweise nicht einsetzbar ist. ZENDAS erklärt sich ausdrücklich für Schäden jeglicher Art, die Ihnen, Ihrem Computer oder jeglicher dritten Person oder Sache durch die Nutzung oder den Missbrauch dieser Skripte entstehen könnten, nicht verantwortlich. Sie nutzen diese Skripte ausdrücklich auf eigenes Risiko.

Beschreibung:
Die Anonymisierung der Client-Adressen wird auf /16er-Netzmasken durchgeführt (d.h. nur die ersten beiden Bytes der IP-Adresse (Info Info) bleiben erhalten). Eine andere Möglichkeit wären /24er-Netzmasken (die ersten drei Bytes), aber dadurch ist nicht völlig sichergestellt, dass der Personenbezug verloren geht. Zusätzlich wird der Referer-URL beim ersten "?" abgeschnitten.

#!/usr/bin/perl
# aplog-anon -- Real-Time-Anonymisierung von Apache-Log-Daten
# Copyright (C) 2003 by Z E N D A S, Universität Stuttgart.
#
# ZENDAS bemüht sich, die Richtigkeit und Funktionsfähigkeit der  
# bereitgestellten Skripte zu gewährleisten. Wir können jedoch nicht dafür 
# einstehen, dass die Skripte auch auf Ihren Systemen auf Anhieb ohne  
# Probleme laufen oder Ihr Server nach Installation der Skripte zusätzlichen 
# Konfigurationsaufwand erfordert und/oder zeitweise nicht einsetzbar ist.
# ZENDAS erklärt sich ausdrücklich für Schäden jeglicher Art, die
# Ihnen, Ihrem Computer oder jeglicher dritten Person oder Sache durch die
# Nutzung oder den Missbrauch dieser Skripte entstehen könnten,
# nicht verantwortlich. Sie nutzen diese Skripte ausdrücklich auf eigenes
# Risiko.
#
#
# Die Anonymisierung dier Client-Adressen wird auf /16er-Netzmasken
# durchgeführt. Eine andere Möglichkeit wären /24er-Netzmasken, aber
# dadurch ist nicht völlig sichergestellt, daß der Personenbezug
# verloren geht.  Zusätzlich wird der Referer-URL beim ersten "?"
# abgeschnitten.
#
# In der allgemeinen Apache-Konfiguration ist folgende Zeile einzufügen:
#
# LogFormat "%a - - %t \"%r\" %>s %b \"%{Referer}i\"" combined
#
# In der Konfiguration für virtuelle Server wird das Logging wie folgt
# aktiviert:
#
# ErrorLog "|/path/to/aplog-anon /path/to/error_log"
# CustomLog "|/path/to/aplog-anon /path/to/access_log" combined
#
# Änderungen an den Skripten für die Log-Rotation sind üblicherweise
# nicht erforderlich. Das Logging über eine Pipe erfordert ein paar
# zusätzliche Context Switches; dies sollte aber nur unter absolutem
# Hochlastbetrieb ein Problem darstellen; das Anonymsieren
# funktioniert auf Hardware aus dem Jahr 2002 auch bei mehreren
# Requests pro Sekunde ohne Probleme.
#
# Vorsicht: aplog-anon schreibt typischerweise die Log-Datei mit
# root-Rechten.

use strict;
use warnings;

use IO::Handle;

if (@ARGV != 1) {
    exit 1;
}

my $LOG;
open $LOG, ">>$ARGV[0]";

# Daten sofort in die Zieldatei schreiben, ohne Pufferung auf Perl-Seite.
$LOG->autoflush(1);

while (my $Line = <STDIN>) {
    chomp $Line;

    # Das ist eine krude Annäherung an einen richtigen Parser. Sie
    # erwischt im Prinzip alles, was gültige Requests sind. Vom
    # Referer wird alles nach dem ersten "?" weggeschnitten, um das
    # Logging einer Session-ID zu vermeiden.

    # Der erste Fall behandelt Fehlermeldungen, die eine andere Syntax
    # haben.
    if ($Line =~ /^\[.*/) {
        $Line =~ s/^(.*?\[client \d+\.\d+)\.\d+\.\d+(\].*)/$1.0.0$2/;
    } else {
        $Line =~ s/^(\d+\.\d+)\.\d+\.\d+ (.*" (?:\d+|-) (?:\d+|-) "[^?]*).*/$1.0.0 $2\"/;
        $Line =~ s/""$/\"/;
    }

    print $LOG "$Line\n";
}

######################################################################

Integration in die Apache Konfigurationsdatei

Zugriff: Die ganze Welt

In diesem Beispiel werden die beiden Logfiles "error.log" und "access.log" sofort anonymisiert gespeichert. Das Anonymisieren übernimmt das Script "aplog-anon".

LogFormat "%a - - %t \"%r\" %>s %b \"%{Referer}i\"" combined

ErrorLog "|/usr/local/bin/aplog-anon /var/log/apache/error.log"
CustomLog "|/usr/local/bin/aplog-anon /var/log/apache/access.log" combined

Die letzten beiden Zeilen können sowohl in der allgemeinen Konfiguration wie in einer VirtualHost-Direktive angegeben werden. (Die LogFormat-Direktive muß in der allgemeinen Konfiguration stehen.)

Vergessen Sie nicht, nach der Konfiguration die Anonymisierung zu testen. Achten Sie auch darauf, ob die Log-Rotation noch korrekt funktioniert, auch wenn das Anonymisierungsskript mit den üblichen Methoden kompatibel ist.

Logfileauszug

Zugriff: Die ganze Welt

Im folgenden ist ein Auszug aus einem Logfile dargestellt, welches mit dem Script "aplog-anon.pl" erstellt wurde:

149.225.0.0 - - [01/Mar/2005:05:46:18 +0100] "GET /zendas/newsletter_inhalt.html HTTP/1.1" 200 19642 "http://www.zendas.de/"
149.225.0.0 - - [01/Mar/2005:05:46:41 +0100] "GET /newsletter.html HTTP/1.1" 200 22307 "http://www.zendas.de/zendas/newsletter_inhalt.html"
149.225.0.0 - - [01/Mar/2005:05:47:09 +0100] "GET /download.html  HTTP/1.1" 200 60402 "http://www.zendas.de/newsletter.html"
66.249.0.0 - - [01/Mar/2005:05:49:31 +0100] "GET /robots.txt HTTP/1.0" 200 81 "-"
66.249.0.0 - - [01/Mar/2005:05:49:32 +0100] "GET /recht/bewertung/bafoeg.html HTTP/1.0" 200 18178 "-"
66.249.0.0 - - [01/Mar/2005:05:54:08 +0100] "GET /recht/bewertung/noten_im_internet.html HTTP/1.0" 200 18348 "-"
66.249.0.0 - - [01/Mar/2005:06:03:01 +0100] "GET /robots.txt HTTP/1.1" 200 81 "-"
66.249.0.0 - - [01/Mar/2005:06:04:52 +0100] "GET /recht/texte/mdstv/ HTTP/1.0" 200 21697 "-"
66.249.0.0 - - [01/Mar/2005:06:08:33 +0100] "GET /recht/texte/mdstv/ HTTP/1.0" 200 21697 "-"
66.249.0.0 - - [01/Mar/2005:06:21:18 +0100] "GET /recht/texte/tdg/ HTTP/1.0" 200 19927 "-"
66.249.0.0 - - [01/Mar/2005:06:35:49 +0100] "GET /recht/texte/tdg/ HTTP/1.0" 200 19927 "-"
207.68.0.0 - - [01/Mar/2005:06:43:39 +0100] "GET / HTTP/1.0" 200 17851 "-"
68.142.0.0 - - [01/Mar/2005:07:03:27 +0100] "GET /robots.txt HTTP/1.0" 200 81 "-"

Weitere Möglichkeiten der Anonymisierung

Zugriff: Die ganze Welt

Weitere Informationen und Scripte finden Sie hier:

Scripte zur Anonymisierung von Apache Logfiles
http://www.zendas.de/technik/sicherheit/apache/scripte.html Interner Link

Copyright 2022 by ZENDAS ..