ipscrub: Módulo de anonimización de direcciones IP para NGINX
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y 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
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_ipscrub_module.so;
Este documento describe nginx-module-ipscrub v1.0.1 lanzado el 29 de mayo de 2018.
ipscrub es un anonimizador de direcciones IP para los archivos de registro de nginx. Es un módulo de nginx que genera un hash basado en la IP. Puedes usar este hash para vincular solicitudes de la misma fuente, sin identificar a tus usuarios por dirección IP.

Modelo de Seguridad
- Al inicializar, y nuevamente cada
PERIOD, generasaltusando 128 bits dearc4random_buf(). - En cada solicitud, genera la dirección IP enmascarada como
HASH(salt ++ dirección IP). - Registra la dirección IP enmascarada.
ipscrub utiliza arc4random para generar nonces aleatorios (consulta la charla de Theo de Raat sobre arc4random para una excelente visión general). En Linux, esto requiere instalar libbsd (paquete libbsd-dev en Ubuntu/Debian).
TAMBIÉN NOTA: el hash generado CAMBIARÁ en cada transición de PERIOD, por lo que solo tendrás continuidad dentro de cada PERIOD. Pero dado que los usuarios pueden cambiar entre redes en cualquier momento (por ejemplo, wifi -> celular), tendrías este tipo de problema incluso si estuvieras almacenando IPs en bruto.
Modelo de Amenaza
- El gobierno te presenta una dirección IP y exige la identificación del usuario correspondiente a esa dirección.
- El gobierno identifica a un usuario, por ejemplo, por dirección de correo electrónico, y exige la dirección IP que tuvo en algún momento.
En el escenario de amenaza (1), el objetivo es calcular la IP enmascarada correspondiente a una dirección IP objetivo. Esto solo será posible si la demanda se realiza antes del final del PERIOD actual.
El escenario (2) se defiende porque el operador del servidor no conoce el salt y no puede inferirlo basándose en la marca de tiempo de la solicitud, ya que el salt se genera a partir de un nonce que solo se almacena en memoria. El operador del servidor tendría que ser cómplice en este caso, pero eso se logra más simplemente por el operador del servidor simplemente registrando la IP sin enmascarar. Por lo tanto, este modelo de seguridad/amenaza no defiende contra un operador de servidor malicioso, pero ese no es el punto. Defiende contra un operador de servidor honesto que es obligado en los escenarios de amenaza (1) y (2).
Uso
Configuración
En tu nginx.conf,
- En el nivel superior, carga el módulo añadiendo la línea
load_module ngx_ipscrub_module.so;(NOTA: solo si lo construiste como un módulo dinámico). - Establece
ipscrub_period_seconds <NUM SEGUNDOS POR PERÍODO>;(opcional). - En tus directivas
log_format, reemplaza$remote_addrcon$remote_addr_ipscrub. - Recarga tu configuración de nginx.
NOTA: nginx puede seguir filtrando direcciones IP en el registro de errores. Si esto es una preocupación, desactiva el registro de errores o limpia el registro regularmente.
Ejecutar Pruebas
make test
Registro de Cambios
- 1.0.1 corrigió la vulnerabilidad a la desmascaración de IPs encriptadas (gracias a @marcan)
- 1.0.0 lanzamiento inicial
GDPR
GDPR entra en vigor el 25 de mayo de 2018. Legisla el manejo de datos personales sobre tus usuarios, incluyendo direcciones IP.
De https://www.eugdpr.org/gdpr-faqs.html:
¿Qué constituye datos personales?
Cualquier información relacionada con una persona natural o ‘Sujeto de Datos’, que pueda ser utilizada para identificar directa o indirectamente a la persona. Puede ser cualquier cosa, desde un nombre, una foto, [...], o una dirección IP de computadora.
Los hashes generados por ipscrub te permiten correlacionar entradas de registro de nginx por dirección IP, sin almacenar realmente direcciones IP, reduciendo tu superficie de GDPR.
YAGNI
¿Por qué estás registrando direcciones IP de todos modos? You Ain't Gonna Need It. Si deseas geolocalización, simplemente usa el módulo GeoIP de MaxMind en conjunto con ipscrub.
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-ipscrub.