ipscrub: Módulo de anonimização de endereços IP para NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_ipscrub_module.so;
Este documento descreve o nginx-module-ipscrub v1.0.1 lançado em 29 de maio de 2018.
ipscrub é um anonimizador de endereços IP para arquivos de log do nginx. É um módulo do nginx que gera um hash baseado em IP. Você pode usar esse hash para vincular solicitações da mesma fonte, sem identificar seus usuários pelo endereço IP.

Modelo de Segurança
- Na inicialização, e novamente a cada
PERIOD, geresaltusando 128 bits dearc4random_buf(). - A cada solicitação, gere o endereço IP mascarado como
HASH(salt ++ endereço IP). - Registre o endereço IP mascarado.
ipscrub usa arc4random para gerar nonces aleatórios (veja a palestra de Theo de Raat sobre arc4random para uma ótima visão geral). No Linux, isso requer a instalação do libbsd (pacote libbsd-dev no Ubuntu/Debian).
TAMBÉM NOTE: o hash gerado MUDARÁ a cada transição de PERIOD, então você terá continuidade apenas dentro de cada PERIOD. Mas como os usuários podem transitar entre redes a qualquer momento (por exemplo, wifi -> celular), você teria esse tipo de problema mesmo se estivesse armazenando IPs brutos.
Modelo de Ameaça
- O governo apresenta um endereço IP e exige a identificação do usuário correspondente a esse endereço.
- O governo identifica um usuário, por exemplo, por endereço de e-mail, e exige o endereço IP que ele tinha em algum momento.
No cenário de ameaça (1), o objetivo é calcular o IP mascarado correspondente a um endereço IP alvo. Isso só será possível se a demanda for feita antes do final do PERIOD atual.
O cenário (2) é defendido porque o operador do servidor não conhece o salt e não pode inferi-lo com base no timestamp da solicitação, pois o salt é gerado a partir de um nonce que é armazenado apenas na memória. O operador do servidor teria que ser um cúmplice nesse caso, mas isso é mais facilmente realizado pelo operador do servidor apenas registrando o IP não mascarado. Portanto, esse modelo de segurança/ameaça não defende contra um operador de servidor malicioso, mas esse não é o ponto. Ele defende contra um operador de servidor honesto sendo compelido em cenários de ameaça (1) e (2).
Uso
Configuração
No seu nginx.conf,
- No nível superior, carregue o módulo adicionando a linha
load_module ngx_ipscrub_module.so;(NOTA: apenas se você compilou como um módulo dinâmico). - Defina
ipscrub_period_seconds <NUM SEGUNDOS POR PERÍODO>;(opcional). - Em suas diretivas
log_format, substitua$remote_addrpor$remote_addr_ipscrub. - Recarregue sua configuração do nginx.
NOTA: o nginx ainda pode vazar endereços IP no log de erros. Se isso for uma preocupação, desative o registro de erros ou limpe o log regularmente.
Executando Testes
make test
Registro de Alterações
- 1.0.1 corrigiu vulnerabilidade à desmascaramento de IPs hash (obrigado a @marcan)
- 1.0.0 lançamento inicial
GDPR
GDPR entra em vigor em 25 de maio de 2018. Ele legisla o tratamento de dados pessoais sobre seus usuários, incluindo endereços IP.
De https://www.eugdpr.org/gdpr-faqs.html:
O que constitui dados pessoais?
Qualquer informação relacionada a uma pessoa natural ou 'Titular de Dados', que pode ser usada para identificar direta ou indiretamente a pessoa. Pode ser qualquer coisa, desde um nome, uma foto, [...], ou um endereço IP de computador.
Os hashes gerados pelo ipscrub permitem que você correlacione entradas de log do nginx por endereço IP, sem realmente armazenar endereços IP, reduzindo sua área de superfície do GDPR.
YAGNI
Por que você está registrando endereços IP de qualquer maneira? You Ain't Gonna Need It. Se você quiser geolocalização, basta usar o módulo GeoIP da MaxMind em conjunto com o ipscrub.
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-ipscrub.