Zum Inhalt

ipscrub: IP-Adress-Anonymisierungsmodul für NGINX

Installation

Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:

  • RedHat Enterprise Linux 7, 8, 9 und 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-ipscrub
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-ipscrub

Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:

load_module modules/ngx_ipscrub_module.so;

Dieses Dokument beschreibt nginx-module-ipscrub v1.0.1, veröffentlicht am 29. Mai 2018.


ipscrub ist ein IP-Adress-Anonymisierer für nginx Protokolldateien. Es handelt sich um ein nginx-Modul, das einen IP-basierten Hash generiert. Sie können diesen Hash verwenden, um Anfragen aus derselben Quelle zu verknüpfen, ohne Ihre Benutzer durch die IP-Adresse zu identifizieren.

Screenshot von nginx-Protokollen bei Verwendung von ipscrub

Sicherheitsmodell

  1. Bei der Initialisierung und erneut alle PERIOD wird ein salt unter Verwendung von 128 Bits aus arc4random_buf() generiert.
  2. Bei jeder Anfrage wird die maskierte IP-Adresse als HASH(salt ++ IP-Adresse) generiert.
  3. Maskierte IP-Adresse protokollieren.

ipscrub verwendet arc4random, um zufällige Nonces zu generieren (siehe Theo de Raats Vortrag über arc4random für eine großartige Übersicht). Unter Linux erfordert dies die Installation von libbsd (Paket libbsd-dev auf Ubuntu/Debian).

HINWEIS: Der generierte Hash wird sich bei jedem Übergang des PERIOD ändern, sodass Sie nur innerhalb jedes PERIOD Kontinuität haben. Da Benutzer jedoch jederzeit zwischen Netzwerken wechseln können (z. B. WLAN -> Mobilfunk), hätten Sie dieses Problem auch, wenn Sie rohe IPs speichern würden.

Bedrohungsmodell

  1. Die Regierung präsentiert Ihnen eine IP-Adresse und fordert die Identifizierung des Benutzers, der dieser Adresse entspricht.
  2. Die Regierung identifiziert einen Benutzer z. B. anhand der E-Mail-Adresse und fordert die IP-Adresse, die er zu einem bestimmten Zeitpunkt hatte.

Im Bedrohungsszenario (1) besteht das Ziel darin, die maskierte IP-Adresse zu berechnen, die einer Ziel-IP-Adresse entspricht. Dies wird nur möglich sein, wenn die Forderung vor dem Ende des aktuellen PERIOD gestellt wird.

Szenario (2) wird verteidigt, weil der Serverbetreiber das Salt nicht kennt und es nicht anhand des Anfragezeitstempels ableiten kann, da das Salt aus einem Nonce generiert wird, das nur im Speicher gespeichert ist. Der Serverbetreiber müsste in diesem Fall ein Komplize sein, aber das wird einfacher erreicht, indem der Serverbetreiber einfach die unmaskierte IP aufzeichnet. Dieses Sicherheits-/Bedrohungsmodell schützt also nicht vor einem böswilligen Serverbetreiber, aber das ist nicht der Punkt. Es schützt jedoch vor einem ehrlichen Serverbetreiber, der in Bedrohungsszenarien (1) und (2) gezwungen wird.

Verwendung

Konfiguration

In Ihrer nginx.conf,

  1. Laden Sie auf der obersten Ebene das Modul, indem Sie die Zeile load_module ngx_ipscrub_module.so; hinzufügen (HINWEIS: nur wenn Sie es als dynamisches Modul gebaut haben).
  2. Setzen Sie ipscrub_period_seconds <NUM SECONDS PER PERIOD>; (optional).
  3. Ersetzen Sie in Ihren log_format-Direktiven $remote_addr durch $remote_addr_ipscrub.
  4. Laden Sie Ihre nginx-Konfiguration neu.

HINWEIS: nginx kann weiterhin IP-Adressen im Fehlerprotokoll ausgeben. Wenn dies ein Anliegen ist, deaktivieren Sie das Fehlerprotokoll oder löschen Sie das Protokoll regelmäßig.

Tests ausführen

make test

Änderungsprotokoll

  • 1.0.1 behob eine Verwundbarkeit zur Entmaskierung von gehashten IPs (danke an @marcan)
  • 1.0.0 erste Veröffentlichung

DSGVO

DSGVO tritt am 25. Mai 2018 in Kraft. Sie regelt den Umgang mit personenbezogenen Daten Ihrer Benutzer, einschließlich IP-Adressen.

Von https://www.eugdpr.org/gdpr-faqs.html:

Was sind personenbezogene Daten?

Alle Informationen, die sich auf eine natürliche Person oder „betroffene Person“ beziehen, die verwendet werden können, um die Person direkt oder indirekt zu identifizieren. Es kann sich um alles handeln, von einem Namen, einem Foto, [...], oder einer Computer-IP-Adresse.

Die von ipscrub generierten Hashes ermöglichen es Ihnen, nginx-Protokolleinträge nach IP-Adresse zu korrelieren, ohne tatsächlich IP-Adressen zu speichern, wodurch Ihre DSGVO-Angriffsfläche verringert wird.

YAGNI

Warum protokollieren Sie überhaupt IP-Adressen? You Ain't Gonna Need It. Wenn Sie Geolokalisierung möchten, verwenden Sie einfach MaxMinds GeoIP-Modul in Verbindung mit ipscrub.

GitHub

Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-ipscrub.