Obtenção e Passagem de IP Real, Traçabilidade da Chave de Requisição e Prevenção de Falso IP de Origem

(Reproduzido)

Obtenção e Passagem de IP Real

Ambiente simulado: Cliente-->Nginx1/CDN/Defesa contra DDoS-->Nginx2-->Servidor Backend

Cabeçalhos de Solicitação:

  • X-Real-IP é usado para armazenar o IP real do cliente, sendo inicialmente vazio
  • X-Forwarded-For é usado para armazenar a cadeia de endereços IP de redirecionamento da solicitação, sendo inicialmente vazio

Variáveis correspondentes:

  • $remote_addr essa variável armazena o IP que iniciou a solicitação HTTP, ou seja, o IP da última conexão
  • $http_x_real_ip essa variável é inicialmente vazia e é usada para passar o IP real do cliente para o backend, correspondente ao cabeçalho

Modificação:

  • proxy_set_header este método pode ser usado para modificar os cabeçalhos, com o objetivo de transmitir informações modificadas para o próximo salto

Configuração de referência: Nginx1

proxy_set_header X-Real-IP $remote_addr; # Salva o IP da última conexão em X-Real-IP e pode ser passado adiante


Observação:

Uma vez que Nginx1 modifica o cabeçalho X-Real-IP,

Nginx2 e Servidor podem usar diretamente $http_x_real_ip para obter o IP real, sem necessidade de configurações adicionais

Traçabilidade da Cadeia de Requisição

Introdução das Variáveis:

  • $http_x_forwarded_for essa variável armazena a cadeia de IPs de redirecionamento da solicitação, correspondente ao cabeçalho X-Forwarded-For A lista X-Forwarded-For contém vários IPs separados por vírgula e espaço, onde o primeiro (client1) é o IP de origem do cliente, cada nível de proxy adiciona o IP do cliente conectado na lista X-Forwarded-For no final.
X-Forwarded-For: clientIP, proxyIP1, proxyIP2, ...


  • $proxy_add_x_forwarded_for essa variável armazena o valor resultante da adição do IP do próprio proxy à lista X-Forwarded-For.

Configuração de referência: Nginx1/Nginx2

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


Se precisar imprimir na log do Nginx, use diretamente $http_x_forwarded_for na log_format.

Prevenção de Falso IP de Origem

Método de Ataque:

As solicitações normais do cliente não devem conter o cabeçalho X-Forwarded-For, mas um atacante pode falsificar um IP nesse cabeçalho: X-Forwarded-For: fakeIP

Simulação de falsificação de IP usando o comando curl:

curl -I -H "X-FORWARDED-FOR:1.2.3.4" http://nginx1/


O serviço de primeira camada de proxy recebe a solicitação, descobre já ter X-Forwarded-For, confunde-se com uma outra camada de proxy, então adiciona "IP de Proxy" (na verdade o IP real do cliente), após várias camadas de proxy, o servidor final obtém o seguinte cabeçalho:

X-Forwarded-For: fakeIP, client, nginx1, nginx2


Solução:

Na camada mais externa de proxy, Nginx1, não confie no X-Forwarded-For do cliente, use diretamente $remote_addr para substituir, não use $proxy_add_x_forwarded_for para adicionar.

Configuração de referência: Nginx1

proxy_set_header X-Forwarded-For $remote_addr;


As configurações intermediárias dos proxies Nginx são:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


Tags: nginx CDNs DDoS Protection Reverse Proxies IP Manipulation

Publicado em 10-7 10:21