ipscrub: Module d'anonymisation d'adresses IP pour NGINX
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_ipscrub_module.so;
Ce document décrit nginx-module-ipscrub v1.0.1 publié le 29 mai 2018.
ipscrub est un anonymiseur d'adresses IP pour les fichiers journaux de nginx. C'est un module nginx qui génère un hachage basé sur l'IP. Vous pouvez utiliser ce hachage pour lier des requêtes provenant de la même source, sans identifier vos utilisateurs par adresse IP.

Modèle de sécurité
- Lors de l'initialisation, et à nouveau à chaque
PERIOD, générez unsalten utilisant 128 bits dearc4random_buf(). - À chaque requête, générez une adresse IP masquée en tant que
HASH(salt ++ adresse IP). - Enregistrez l'adresse IP masquée.
ipscrub utilise arc4random pour générer des nonces aléatoires (voir la présentation de Theo de Raat sur arc4random pour un excellent aperçu). Sur Linux, cela nécessite l'installation de libbsd (package libbsd-dev sur Ubuntu/Debian).
NOTEZ ÉGALEMENT : le hachage généré CHANGERA à chaque transition de PERIOD, donc vous n'aurez de continuité qu'au sein de chaque PERIOD. Mais comme les utilisateurs peuvent passer d'un réseau à un autre à tout moment (par exemple, wifi -> cellulaire), vous auriez ce type de problème même si vous stockiez des IP brutes.
Modèle de menace
- Un gouvernement vous présente une adresse IP et exige l'identification de l'utilisateur correspondant à cette adresse.
- Un gouvernement identifie un utilisateur par exemple par adresse e-mail, et exige l'adresse IP qu'il avait à un moment donné.
Dans le scénario de menace (1), l'objectif est de calculer l'IP masquée correspondant à une adresse IP cible. Cela ne sera possible que si la demande est faite avant la fin du PERIOD actuel.
Le scénario (2) est défendu car l'opérateur du serveur ne connaît pas le salt, et ne peut pas l'inférer en fonction de l'horodatage de la requête, car le salt est généré à partir d'un nonce qui n'est stocké qu'en mémoire. L'opérateur du serveur devrait être un complice dans ce cas, mais cela est plus simplement accompli par l'opérateur du serveur qui enregistre simplement l'IP non masquée. Donc, ce modèle de sécurité/menace ne défend pas contre un opérateur de serveur malveillant, mais ce n'est pas le but. Il défend contre un opérateur de serveur honnête contraint dans les scénarios de menace (1) et (2).
Utilisation
Configuration
Dans votre nginx.conf,
- Au niveau supérieur, chargez le module en ajoutant la ligne
load_module ngx_ipscrub_module.so;(REMARQUE : uniquement si vous l'avez construit en tant que module dynamique). - Définissez
ipscrub_period_seconds <NOMBRE DE SECONDES PAR PÉRIODE>;(optionnel). - Dans vos directives
log_format, remplacez$remote_addrpar$remote_addr_ipscrub. - Rechargez votre configuration nginx.
REMARQUE : nginx peut toujours divulguer des adresses IP dans le journal des erreurs. Si cela vous préoccupe, désactivez la journalisation des erreurs ou nettoyez régulièrement le journal.
Exécution des tests
make test
Journal des modifications
- 1.0.1 a corrigé une vulnérabilité à la démasquage des IP hachées (merci à @marcan)
- 1.0.0 version initiale
RGPD
RGPD entre en vigueur le 25 mai 2018. Il légifère sur le traitement des données personnelles concernant vos utilisateurs, y compris les adresses IP.
D'après https://www.eugdpr.org/gdpr-faqs.html :
Qu'est-ce qui constitue des données personnelles ?
Toute information relative à une personne physique ou à un « Sujet de données », qui peut être utilisée pour identifier directement ou indirectement la personne. Cela peut être n'importe quoi, d'un nom, d'une photo, [...], ou d'une adresse IP d'ordinateur.
Les hachages générés par ipscrub vous permettent de corréler les entrées de journaux nginx par adresse IP, sans réellement stocker d'adresses IP, réduisant ainsi votre surface de risque RGPD.
YAGNI
Pourquoi enregistrez-vous des adresses IP de toute façon ? You Ain't Gonna Need It. Si vous souhaitez la géolocalisation, utilisez simplement le module GeoIP de MaxMind en conjonction avec ipscrub.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-ipscrub.