Im access.log von Apache stehen alle IP-Adressen komplett. Dies ist weder für Statistiken erforderlich noch ist das Speicher dieser Daten sinnvoll.
IPv4-Adressen lassen sich recht einfach anonymisieren, in dem der letzte Teil verändert wird. Bspw. 176.9.33.188 wird zu 176.9.33.0
Für die meisten Statistik-Tools ist das völlig ausreichend.
Da meine Apache-Logs ohnehin über syslog-ng laufen (siehe auch ISPConfig – Apache-Logfiles über syslog), habe ich direkt dort angesetzt.
Ich setze im folgenden die pattern-db von syslog-ng ein. Der CSV-Parser ist einfach nicht mehr schnell genug, wenn alle Logeinträge anonymisiert werden wollen.
Das Log-Statement wird lediglich um rewrite(r_ano-apache); erweitert:
log {
source(src);
parser(pattern_db);
filter(f_apache2);
rewrite(r_ano-apache);
destination (d_apache-logs);
destination (d_ispconfig_apache-stat);
};
rewrite(r_ano-apache) wird mit dem folgenden Inhalt in syslog-ng.conf geschrieben:
rewrite r_ano-apache {
subst(“([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})”,”$1.$2.$3.0″,
value(“.apache.client_ip”),flags(“pcre”) condition(tags(“IPv4”)));
subst(“([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})\:([0-9a-f]{1,4})”,”$1:$2:$3″,
value(“.apache.client_ip”),flags(“pcre”) condition(tags(“IPv6”)));
};
Für die Abwehr von Angriffen durch bspw. fail2ban ist es natürlich dennoch erforderlich, die komplette IP-Adresse zu kennen. Dazu werden lediglich ein weiteres Log-Statement
log {
source(src);
parser(pattern_db);
filter(f_apache2);
destination (d_apache-logs-admin);
};
und eine weitere destination definiert:
destination d_apache-logs-admin {
file(“/var/log/full/${.apache.domain}-access.log”
template(“${.apache.client_ip} ${.apache.ident_name} ${.apache.user_name} [${.apache.timestamp}] \”${.apache.request_url}\” ${.apache.request_status} ${.apache.content_length} \”${.apache.referer}\” \”${.apache.user_agent}\”\n”)
template_escape(yes));
};
Das komplette Logfile unter /var/log/full kann dann weniger lang gehalten werden als die anonymisierten Logs unter /var/log/ispconfig/httpd.
Und hier ist das ganze nochmal als Download: