IP real no Nginx: solução definitiva para logs com AWS, Cloudflare e Google Cloud

A configuração de uma aplicação web na nuvem é sempre uma tarefa instigante e repleta de descobertas.

Recentemente, lancei a ferramenta etechpt.com Tools, que está hospedada na AWS, com a proteção da Cloudflare.

Utilizo o balanceador de carga de aplicações da AWS em conjunto com o Nginx como servidor web. Após a implementação, ao analisar o arquivo access.log, observei que todas as requisições eram registradas com o IP interno do balanceador de carga.

Essa situação é problemática para quem deseja analisar os logs do servidor web e identificar os visitantes reais. Percebi que havia uma configuração faltante ou incorreta que impedia a correta identificação do IP do cliente.

Você se encontra na mesma situação?

A seguir, apresento uma solução para obter o IP do cliente nos seus logs de acesso do Nginx.

Recuperando o IP do Visitante em Ambientes AWS ou Google Cloud LB

  • Acesse seu servidor web Nginx.
  • Navegue até o diretório de instalação (o padrão é /etc/nginx).
  • Crie um backup do arquivo nginx.conf.
  • Adicione o seguinte bloco de configuração dentro do bloco HTTP:
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
  • Reinicie o Nginx. A partir de agora, você deverá visualizar o IP do visitante no seu arquivo access.log.

Se você utiliza Cloudflare, notará que o IP registrado será o da Cloudflare em vez do IP do cliente. Nesse caso, siga os passos adicionais abaixo.

Obtendo o IP Real do Cliente Através da Cloudflare

A Cloudflare é um excelente provedor de CDN e serviços de segurança, e eu sou um fã. Se você, assim como eu, utiliza a Cloudflare e deseja registrar o IP real do visitante nos logs do servidor web, veja como proceder.

Partindo do princípio de que você está conectado ao servidor Nginx:

Faça uma cópia de segurança do arquivo de configuração do seu site (geralmente localizado em /etc/nginx/sites-available/seudominio).

Adicione as seguintes linhas no início desse arquivo:

set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

Observação: Recomendo que você valide a lista de IPs na Página Oficial para garantir que esteja sempre atualizada.

Reinicie o Nginx novamente. Agora você deverá visualizar o IP do cliente correto. Essa solução tem sido muito útil para mim, e espero que também seja para você.

Na sequência, abordaremos como implementar cabeçalhos de segurança usando Cloudflare Workers.

Gostou deste artigo? Que tal compartilhá-lo com seus amigos e colegas?