Startseite Themen Internetauftritt im Fokus des Rechts Cookies Scripte zur Anonymisierung von Apache Logfiles 
[Druckversion: HTML ]
Benutzer:
Gast

Valid XHTML 1.0 Transitional

Scripte zur Anonymisierung von Apache Logfiles

Stand: 22.11.2007

Mit denen auf dieser Seite befindlichen Werkzeugen, können Sie der Anforderung nach einer Realtime-Anonymisierung Rechnung tragen. Die IP-Adressen werden bei diesen Verfahren nicht zwischengespeichert und sind nach der Beendigung des Telekommunikationvorgangs anonymisiert.

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.

Anonymisierung mit PERL (das letzte Byte wird abgeschnitten)

Zugriff: Die ganze Welt

Beschreibung:
Die Anonymisierung der Client-Adressen wird auf /24er-Netzmasken durchgeführt (d.h. nur die ersten drei Bytes der IP-Adresse bleiben erhalten). Diese Möglichkeit ist eine Variante der Anonymisierung auf der ersten beisen Bytes).
Bei dieser Variante kann nicht völlig sichergestellt werden, dass der Personenbezug verloren geht. Zusätzlich wird der Referer-URL beim ersten "?" abgeschnitten.

#!/usr/bin/perl
# aplog-anon-24 -- Real-Time-Anonymisierung von Apache-Log-Daten
# Copyright (C) 2007 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 der Client-Adressen wird auf /24er-Netzmasken
# durchgeführt. 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 = ) {
    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]$2/;
    } else {
        $Line =~ s/^(\d+\.\d+\.\d+)\.\d+ (.*" (?:\d+|-) (?:\d+|-) "[^?]*).*/$1.0 $2\"/;
        $Line =~ s/""$/\"/;
    }

    print $LOG "$Line\n";
}

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

Das Perlscript zur Anonymisierung der letzten beiden Bytes finden Sie hier Interner Link.

Anonymisierung mit den Unixkommandos "awk" oder "sed"

Zugriff: Die ganze Welt

Der Nachteil ist aber, dass Einträge erst dann in den Logfile geschrieben werden, wenn der 8192 Byte grosse Buffer der Pipe voll ist. Das kann auf wenig genutzen Servern durchaus mal Minuten dauern.

Das "awk-Kommando" ersetzt das 3. und 4. Feld der IP-Adresse durch zwei Nullen. Zu beachten ist hierbei, daß die IP-Adresse an erster Stelle der Zeile stehen muss (Dies gilt daher für die access_log):

awk -F " " '{ split($1,A,".") ; $1=A[1]"."A[2]"."A[3]".0" ; print }'

Das "sed-Kommando" anonymisiert jede IP-Adresse, die in einer Zeile vorkommt:

sed -e 's/\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\.[0-9]\{1,3\}/\1.0/g'

Integration in die Apache Konfigurationsdatei

Das jeweilige Kommando "sed" oder "awk" kann in die unten stehende Variable "$kommndo" eingesetzt werden.
Bitte beachten: Die doppelten Anführungszeigen (") im Script (oben) müssen jeweils Backslash (\) escaped werden:
awk -F \" \" '{ split($1,A,\".\") ; $1=A[1]\".\"A[2]\".\"A[3]\".0\" ; print }'

HostnameLookup off

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

CustomLog "|$kommando >> /var/log/apache/access.log" combined
Copyright 2022 by ZENDAS ..