IPs anonymisieren in der Praxis
23.05.2008
Zunehmend setzt sich die Ansicht durch, dass IPs als personenbezogenes Datum zu sehen sind – dazu früher hier. Die ältere Ansicht, eine IP sei ein “relativ personenbezogenes Datum” ist schon lange nicht mehr h.M., absehbar, dass in naher Zukunft die ohnehin schon überwiegend vertretene Meinung der anderen Seite bald beherrschend ist.
Damit ergeben sich für Webmaster ganz praktische Probleme: Wie speichert man denn keine IPs bzw. wie anonymisiert man diese?
Update: Aus aktuellem Anlaß habe ich den Artikel nochmals “nach oben” geholt.
Als “gemeiner Webmaster” gibt es vor allem zwei Ebenen die man bedenken muss: Den Server mit seinen Logfiles einerseits, eventuell eingesetzte Skripte andererseits. Ich bespreche kurz beides.
Der Server
Jedenfalls beim verbreiteten Apache-Server gibt es mehrere Möglichkeiten. Am einfachsten wird es sein, das Apache-Modul “mod_removeip” einzusetzen, dass in jeder gängigen Linux-Distribution bereits verfügbar ist. Damit werden global, vhost-Abhängig geht es nicht, keine IPs erfasst.
Wer diese Möglichkeit nicht hat, kann das Logfileformat im der httpd.conf direkt verändern. Am besten man legt ein eigenes Logfile-Format an, z.B.
LogFormat "127.0.0.1 - - %t \"%r\" %>s %b" anonym
Und stellt dann die Zeile mit den Logfiles von “combined” auf “anonym” um:
CustomLog /var/log/apache2/access.log anonym
Wer “richtig” anonymisieren will, das heisst zwar IPs erfassen, diese aber in den letzten 3 Stellen anonymiseren, kann ein Perl-Skript nutzen.
Ich weise nochmals darauf hin, dass ein Betreiben eines eigenen Servers immer auch die Fähigkeit vorraussetzt, diesen auch zu warten. Vor langer Zeit habe ich einmal ein Tutorial begonnen, das Webmastern das erklären sollte. Ich stelle dies hier kostenlos zum Download: Apache – Tutorial.
Beim Anbieter
Zunehmend bieten Web-Anbieter an, dass man Logfiles anonymisert führen kann. Hosteurope etwa, man muss sich nur einloggen und kann unter “Logfiles” die anonyme Logging-Funktion aktivieren. Somit können auch User, die keinen Server sondern nur ein Hosting-Produkt nutzen, anonyme Logfiles führen.
Das PHP-Skript
In PHP-Skripten geht es mit einem zentralen Ansatz: Die globale Variable $_SERVER[‘REMOTE_ADDR’] ist eine Variable wie jede andere auch, das heisst: Man kann sie genausogut auch überschreiben. Man nimmt sich also eine Datei -sofern vorhanden, bei modernen CMS ist dies eigentlich immer der Fall- die als erstes in wirklich jeder Datei geladen wird. In Serendipity ist dies etwa die serendipity_config.inc.php. Hier als erstes in der Datei nun die globale Variable ändern:
$_SERVER[‘REMOTE_ADDR’] = “127.0.0.1”;
Damit dürfte das Thema im gesamten Code durch sein. Ähnliches sollte man bei WordPress und Co. machen können. Um die IP zu anonymiseren kann man auch einfach den letzten IP-Block abspalten:
$ip = $_SERVER[‘REMOTE_ADDR’];
$ip = explode(“.”, $ip);
$_SERVER[‘REMOTE_ADDR’] = “”.$ip[0].”.”.$ip[1].”.”.$ip[2].”XXX”;
Zugegeben, mit einem strlen() und einem substr() ginge das schneller, aber ich denke diesen Codeschnippsel werden mehr Leute auf Anhieb verstehen. Ich selber bevorzuge das Austauschen des letzten Ziffernblocks komplett, da dies für Statistiken vollkommen ausreichend ist und gar keine Rückschlüsse auf den Nutzer zulässt. Ob man nun den ganzen Block nimmt oder nur eine Ziffer ist aber nicht nur Geschmacksfrage. Wer etwa nur die letzte Ziffer austauscht, könnte dennoch Rückschlüsse ermöglichen, etwa bei einer Fahndungsmethode wie der personenbezogenen Datenfahndung, die im Mikado-Verfahren angewendet wurde.
Easyfunk [welt-hertha-linke]
Hallo Jens,
leider ist in der Version 1.3.1 von s9y diese Variable nicht mehr in der serendipity_config.inc.php enthalten. Hättest du eine andere Idee? Vielen Dank!
Grüße
Das ist eine globale Variable der Serverumgebung: Nimm die Textzeilen einfach auf und fertig. Damit übeschreibst du die Umgebungsvariable und egal wann s9y darauf zugreift: Es ist anonymisiert.
Easyfunk [welt-hertha-linke]
Super, vielen Dank!
Ich war unsicher, weil du oben von einer Änderung sprichst. Das impliziert ja schon eine vorhandene Variable. Dann gabe es Probleme beim Copy&Paste, weil die Zeichen nicht stimmten (Anführungs- und Abführungsstriche). So klappt es aber:
$_SERVER['REMOTE_ADDR'] = "127.0.0.1";
Ich bin nicht so routiniert im Code-Bearbeiten und vielleicht geht es anderen ja auch so, die sich nach dieser Anleitung richten. Bei mir klappt es jedenfalls wunderbar. Vielen Dank für die Anleitung und die Hilfe!
Grüße
Dirk Schneider
Interessanter Beitrag, der leider sehr einseitig ist.
Jeder Betreiber eines Servers, der darauf mehr als eine Webseite hostet, kennt das Problem - Server sind permanent Angriffen ausgesetzt, sei es bewusst (eher selten) oder durch Skripte, die Schwachstellen suchen.
Um sich vor diesen zu schützen und im schlimmsten Fall auch eine Aufklärung möglich zu machen, ist ein zumindest vorübergehendes Speichern von IP-Adressen unumgänglich.
Beispielsweise habe ich schon den Versuch der Verbreitung urheberrechtlich geschützten Materials über eine Schwachstelle eines bekannten CMS miterleben müssen. Ebenso blocke ich Einlogversuche nach einer Anzahl von Fehlversuchen mit fail2ban, auch hier sind Log-Dateien mit kompletter IP Voraussetzung.
All dies ist in diesem Beitrag komplett unberücksichtigt, Für den Betreiber einer Webseite bei einem Hostinganbieter ist dies allerdings erst relevant, wenn auf seiner Seite plötzlich das neue Helene Fischer-Album zum Download auftaucht.
Meiner Meinung nach ist hier der Datenschutz einseitig gedacht und vernachlässigt die berechtigten (Eigenschutz-) Interessen von Serverbetreibern.