Reboot Konzept C: Anonymisierung der IP, Whitelisting anderer Elemente
Das Ziel muss hier sein, die Informationen soweit zu kappen, dass sie anonym bleiben, aber soweit zulassen, dass darauf basierend noch Entscheidungen getroffen werden können.
Stufen der Anonymisierung der IP
Die IP 192.168.1.42 kann unterschiedlich anonymisiert werden.
- 192.168.1.0
- 192.168.0.0
- 192.0.0.0
- 0.0.0.0
Bei IPv6 schaut es so aus:
- 1111:2222:3333:4444:5555:6666:7777:8888
- 1111:2222:3333:4444:5555:6666:7777::
- 1111:2222:3333:4444:5555:6666::
- 1111:2222:3333:4444::
- 1111:2222:3333::
- 1111:2222::
Je nach Auslegung genügt die Entfernung des letzten Blocks bei IPv4 und der letzten vier Blöcke bei IPv6
Whitelisting bei Query String User-Agent und Referrer
- Query String: Der Query String wird nur auf bestimmten URLS, die ihn wirklich verwenden, erlaubt und validiert.
- User-Agent: Die Information wird auf das Betriebssystem zusammengedampft.
- Referer: Der Query String wird vom Referer entfernt.
Bsp. Nginx
map $status $loggable {
~^[4] 0;
default 1;
}
map $remote_addr $remote_addr_anon {
~(?P<ip>\d+\.\d+\.\d+)\. $ip.0;
~(?P<ip>[^:]+:[^:]+): $ip::;
default 0.0.0.0;
}
# allowed URLs with QUERY_STRING
# all URLs with QUERY_STRING: drop QUERY_STRING
# URls without QUERY_STRING
map $request_uri $request_uri_anon {
~^(/landing.html\?gclid=\d+)$ $request_uri;
~^(/[^\?]+)\?(.*)$ $uri;
~^(/[^\s]+)$ $uri;
}
map $http_referer $http_referer_anon {
~^([^\?]+)\?(.+)$ $1;
default "";
}
map $http_user_agent $http_user_agent_anon {
~(Windows) "Mozilla/5.0 (Windows)";
~(Macintosh) "Mozilla/5.0 (Macintosh)";
~(Linux) "Mozilla/5.0 (Linux)";
~(iPhone) "Mozilla/5.0 (iPhone)";
~(Android) "Mozilla/5.0 (Android)";
default "Mozilla/5.0 (unknown)";
}
log_format anonym '$remote_addr_anon – $remote_user [$time_local] '
'"$request_method $request_uri_anon $server_protocol" $status $body_bytes_sent '
'"$http_referer_anon" "$http_user_agent_anon"';
error_log logs/error.log warn;
access_log /spool/logs/nginx-access.log anonym if=$loggable;