Wenn es um den Datenschutz geht, kann man heutzutage keine Kompromisse mehr eingehen. Schließlich sind digitale Informationen zur Währung geworden und immer mehr Internetnutzer sind darin bestrebt, ihre persönlichen Daten so gut wie nur möglich zu schützen. Weiterhin hat die Datenschutz-Grundverordnung (DSGVO) das Anlegen von Datensätzen über Nutzer stark eingeschränkt.
Als Betreiber von Blogs und anderen Webanwendungen sind wir dazu verpflichtet, sicherzustellen, dass wir die Datenschutzbestimmungen in vollem Umfang einhalten. Ein leider allzu gerne vergessener Punkt in diesem Zusammenhang ist das Logging des eigenen Webservers. Standardmäßig werden hier nämlich IP-Adressen oder andere sensible Daten aufgezeichnet.
Aber keine Sorge, ich werde dir in diesem Beitrag zeigen, wie du dein Nginx-Logging individuell konfigurieren kannst. So kannst du mit wenig Aufwand die vielen DSGVO-Anforderungen ein bisschen besser erfüllen. Das Ganze ist recht leicht einzustellen und du verlierst weder wichtige Daten für deine Anwendung, noch wird das Auswerten deiner Logs im Fehlerfall erschwert.
Das Wesentliche kompakt:
Der Nginx-Webserver setzt bei der Protokollierung auf zwei Logfiles. Das Access-Log zeichnet alle eingehenden Anfragen an den Server auf. In der Datei findet man unter anderem Informationen über die IP-Adresse des Clients, die angeforderte Ressource, den Zeitpunkt der Anfrage und den verwendeten User-Agenten. Diese Daten sind unschätzbar wichtig, wenn es darum geht, das Benutzerverhalten zu analysieren und Performance-Probleme zu erkennen.
Auf der anderen Seite haben wir das Error-Log, das alle auftretenden Fehler und Probleme protokolliert, sei es ein Serverfehler, eine fehlende Datei oder eine ungültige Anfrage. Die beiden Log-Typen ergänzen sich perfekt: Während das Access-Log Einblicke in die Nutzung bietet, hilft uns das Error-Log dabei, potenzielle Schwachstellen und technische Probleme aufzudecken und zu beheben.
Beim Nginx-Logging ist es von entscheidender Bedeutung, die Privatsphäre der Nutzer zu wahren. Nicht zuletzt, weil die DSGVO-Richtlinien das so wollen. Die IP von Benutzern hat also nichts in den vom Nginx angelegten Logfiles verloren. Es empfiehlt sich außerdem, die Log-Dateien in regelmäßigen Abständen gemeinsam mit dem Datenschutzbeauftragten auf Verstöße zu überprüfen.
Der Nginx lässt sich beim Logging sehr granular konfigurieren. So können im Handumdrehen individuelle Regeln für die Datenerfassung erstellt werden. Hier gilt vor allem ein Grundsatz: Nur durch eine sorgfältige Konfiguration und ständige Überwachung kannst du sicherstellen, dass die Balance zwischen Datensicherheit und Funktionalität in deinen Webanwendungen gewahrt wird.
Nginx-Logging konfigurieren:
Um das Logging entsprechend der DSGVO anpassen zu können, musst die richtige Konfigurationsdatei bearbeiten. In RedHat und dessen Derivaten findest du diese unter dem Pfad /etc/nginx/nginx.conf Allerdings können für jeden Vhost auch separate Einstellungen im Ordner /etc/nginx/conf.d/ getroffen worden sein. Bei Debian hingegen liegen die angesprochenen Dateien nochmal woanders.
In der Regel befinden sich die Adaptierungen unter /etc/nginx/sites-enabled. Wissen sollte man, dass diese durch einen Symlink auf ihre Pendants unter /etc/nginx/sites-available/ verweisen. Darüber hinaus kann man wieder alle Einstellungen in die Datei /etc/nginx/nginx.conf packen. Nachdem nun geklärt wäre, wo man die Konfiguration vornehmen muss, kann es endlich losgehen.
In der Konfigurationsdatei musst du den Block namens http finden. Darin halten sich verschiedene Direktiven wie server oder location auf. Wir fügen einfach eine weitere Anweisung, und zwar die log_format hinzu:
log_format dsgvo '$remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
Die hier genutzten Variablen haben verschiedene Bedeutungen und steuern, wie die HTTP-Anfragen an den Nginx-Server protokolliert werden. Im Folgenden findest du eine kurze Erklärung zu den verwendeten Variablen:
- $remote_user: Nicht selten bleibt diese Variable leer. Sie enthält nämlich den Benutzernamen des authentifizierten Clients und HTTP-Anfragen werden in vielen Fällen ganz ohne Authentifizierung erfolgen.
- $time_local: Wie der Name schon vermuten lässt, wird hier das Datum und die Uhrzeit des Zugriffs protokolliert. Das Ganze erfolgt dann in der lokalen Zeitzone des Servers. Die Varibale ist nützlich, um festzustellen, wann eine Anfrage empfangen wurde.
- $request: Diese Variable enthält die vollständige HTTP-Anfrage des Clients, einschließlich der Methode (GET, PUT, POST usw.) und des angeforderten Pfads (URI). Sie zeigt an, welche Ressource der Client angefragt hat.
- $status: Hierdurch wird der HTTP-Statuscode der jeweiligen Anfrage ausgegeben. Der Statuscode gibt zum Beispiel an, ob die Anfrage erfolgreich war (200 OK) oder ob ein Fehler aufgetreten ist (Internal Server Error 500).
- $body_bytes_sent: Diese Variable gibt die Anzahl der gesendeten Antwortbytes an. Sie zeigt an, wie groß die Antwort auf die Anfrage war. Dies kann hilfreich sein, um die Übertragungsgröße zu überwachen.
- $http_referer: Diese Platzhalter enthält die URL der Seite, von der aus der Client zur aktuellen Seite navigiert ist (sofern verfügbar). Sie zeigt an, von welcher Seite der Benutzer auf die aktuelle Seite zugegriffen hat.
- $http_user_agent: Dadurch wird der User-Agent-String des Clients ausgelesen. Dieser liefert Informationen über den verwendeten Browser und das Betriebssystem des Benutzers. Die Variable kann dazu verwendet werden, um die Art der verwendeten Geräte und Browser zu analysieren.
Jetzt aber genug über Nginx-Logging-Variablen geredet. Lass uns lieber mit dem nächsten Punkt weitermachen. Fall nicht schon längst geschehen, kann man während auch noch separate Dateien für das Access- und Error-Log des jeweiligen Vhosts anlegen. Diese Einträge gehören aber nicht mehr unter http, sondern werden unter server angelegt:
access_log /var/log/nginx/deine-webseite/namen.access.log dsgvo;
error_log /var/log/nginx/deine-webseite/namen.error.log dsgvo;
Ganz wichtig ist hierbei die Angabe von dsgvo hinter dem absoluten Pfad zur jeweiligen Log-Datei. Damit wird der Nginx angewiesen, sich an das weiter oben eingerichtete Log-Format zu halten. Im Prinzip war es das auch schon mit den durchgeführten Arbeiten. Allerdings solltest du den Nginx jetzt nicht einfach neu laden. Vorher prüfst du bitte deine Konfigurationsänderungen mittels nginx -t.
Wird hierbei keine Fehlermeldung ausgespuckt, hast du das Logging erfolgreich angepasst. Beachte dabei aber noch, dass es sich hier nur um ein einfaches Beispiel handelt und lediglich die Client-IP-Adressen aus den Logs entfernt werden. Du hast aber noch viele weitere Optionen zur Verfügung, um das Logging genau nach den Vorgaben deines Datenschutzbeauftragten einzustellen.