Quando o ALB encaminha requisições, o endereço IP de origem visível para o servidor de back-end é o da instância do ALB. O ALB pode anexar o IP real do cliente ao campo X-Forwarded-For no cabeçalho HTTP. Você pode obter essa informação com uma configuração simples no servidor de back-end.
O campo X-Forwarded-For tem o seguinte formato:
X-Forwarded-For: <real client IP, proxy server 1-IP, proxy server 2-IP, ...>
Procedimento
Etapa 1: Verificar a configuração do listener para X-Forwarded-For
Faça login no ALB console e clique no ID da instância desejada para acessar a página Instance Details.
-
Na aba Listener, clique no ID do listener desejado. Na página Listener Details, na seção Basic Information, verifique se a opção Add HTTP Header inclui
X-Forwarded-For.Essa opção vem ativada por padrão. Caso esteja desativada, clique em Modify Listener na seção Basic Information e ative-a na seção Advanced Settings.
Etapa 2: Configurar o servidor de back-end
Este tópico descreve como registrar o IP real do cliente no log de acesso do servidor de back-end por meio do campo
X-Forwarded-For. As variáveis da camada de conexão do servidor (como$remote_addrno Nginx e%hno Apache) mantêm o IP de encaminhamento do ALB (IP local) e não sofrem alterações.Para substituir diretamente as variáveis da camada de conexão pelo IP real do cliente e garantir que logs, controles de acesso e outras regras baseadas nessas variáveis funcionem sem modificações, consulte How to let Nginx or Apache directly retrieve the real client IP (replacing the connection-layer address).
Servidor Nginx
Este tópico usa como exemplo um servidor Nginx executando Alibaba Cloud Linux 3.2104 e nginx/1.20.1. A configuração real pode variar conforme o ambiente.
O Nginx usa o módulo http_realip_module para analisar o cabeçalho X-Forwarded-For e obter o IP real do cliente.
-
Verifique se o módulo está instalado: No servidor, execute o comando
nginx -V 2>&1 | grep --color=auto http_realip_module. Se a saída contiver--with-http_realip_module, o módulo já está instalado.
Nas principais distribuições Linux, o Nginx instalado via gerenciador de pacotes, como
yumouapt, geralmente inclui esse módulo por padrão. Se ele não estiver instalado, recomendamos instalar ou atualizar o Nginx usando um gerenciador de pacotes. -
Modifique o arquivo de configuração do Nginx: Execute
sudo nginx -tpara localizar o caminho do arquivo de configuração. Normalmente, o caminho padrão é/etc/nginx/nginx.conf.http { # Ensure the log format includes $http_x_forwarded_for to record the value of the X-Forwarded-For header. log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # Ensure the access log uses the preceding log format. access_log /var/log/nginx/access.log main; # ... } Recarregue a configuração: Execute
sudo nginx -tpara verificar a sintaxe da configuração. Se a sintaxe estiver correta, executesudo nginx -s reloadpara aplicar as alterações.
Servidor Apache
Este tópico usa como exemplo um servidor Apache executando Alibaba Cloud Linux 3.2104 e Apache/2.4.37. A configuração real pode variar conforme o ambiente.
O Apache usa o módulo mod_remoteip para analisar o cabeçalho X-Forwarded-For e obter o IP real do cliente.
-
Verifique se o módulo está instalado: No servidor, execute o comando
httpd -M | grep remoteip_module. Se a saída contiverremoteip_module (shared), o módulo já está instalado.
Nas principais distribuições Linux, o Apache instalado via gerenciador de pacotes, como
yumouapt, geralmente inclui esse módulo por padrão. Se ele não estiver instalado, recomendamos instalar ou atualizar o Apache usando um gerenciador de pacotes. -
Modifique o arquivo de configuração do Apache: Execute
httpd -Vpara localizar o caminho do arquivo de configuração. Normalmente, o caminho padrão é/etc/httpd/conf/httpd.conf.# ... <IfModule log_config_module> # ... # Ensure the log format includes %{X-Forwarded-For}i to record the value of the X-Forwarded-For header. LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Forwarded-For}i" combined # ... # Ensure the access log uses the preceding log format. CustomLog "logs/access_log" combined </IfModule> # ... Recarregue a configuração: Execute
sudo systemctl restart httpdpara aplicar as alterações.
Servidor IIS
Este tópico usa como exemplo um servidor IIS executando Windows Server 2022 21H2 e IIS 10.0. A configuração real pode variar conforme o ambiente.
-
No painel Connections do IIS Manager, selecione o servidor desejado. No painel principal, clique duas vezes em Logging.

-
Na seção Log File, clique em Select Fields.

-
Na caixa de diálogo W3C Logging Fields, clique em Add Field. Na caixa de diálogo Add Custom Field, configure as informações do campo e clique em OK.
Field Name: Insira
X-Forwarded-For.Source Type: Mantenha o valor padrão,
Request Header.source: Insira
X-Forwarded-For.

-
Confirme a adição do campo personalizado e clique em OK.

-
No painel Actions à direita, clique em Apply para salvar as alterações.

Etapa 3: Verificar a obtenção do IP do cliente
Consulte o log de acesso do servidor web de back-end para confirmar a obtenção do IP real do cliente.
Servidor Nginx
O caminho padrão do log de acesso do Nginx é /var/log/nginx/access.log.
Em cada entrada de log, o valor da variável $http_x_forwarded_for corresponde ao IP real do cliente.

Servidor Apache
O caminho padrão do log de acesso do Apache é /var/log/httpd/access_log.
Em cada entrada de log, o valor da variável %{X-Forwarded-For}i corresponde ao IP real do cliente.

Servidor IIS
O caminho padrão do log de acesso do IIS é %SystemDrive%\inetpub\logs\LogFiles.
Em cada entrada de log, o valor no último campo X-Forwarded-For corresponde ao IP real do cliente.

Melhores práticas para produção
Valide e filtre o cabeçalho X-Forwarded-For: No servidor de back-end, valide e filtre o cabeçalho X-Forwarded-For. Rejeite entradas mal formatadas ou com endereços IP não confiáveis.
Use políticas de segurança: Configure grupos de segurança ou outras políticas de segurança de terceiros entre o ALB e os servidores de back-end para restringir e filtrar requisições maliciosas com cabeçalhos X-Forwarded-For falsificados.
Criptografia TLS: Adote criptografia TLS para proteger as comunicações entre os componentes, incluindo a transmissão do cabeçalho X-Forwarded-For. Isso mitiga riscos de ataques man-in-the-middle e adulteração de dados.
Perguntas frequentes
Acesso frequente de IPs iniciados com 100
Upgraded ALB instances usam endereços IP privados (IPs locais) dos blocos CIDR de seus vSwitches associados para se comunicar com os servidores de back-end.
Instâncias do ALB não atualizadas usam o intervalo de endereços
100.64.0.0/10, reservado pela Alibaba Cloud e sem riscos de segurança, para se comunicar com os servidores de back-end.
Além de encaminhar requisições para os servidores de back-end, o ALB também executa verificações de integridade contínuas. Se você usar uma instância do ALB não atualizada, os logs de acesso do servidor de back-end exibirão diversas requisições provenientes de endereços IP no intervalo 100.64.0.0/10.
Para garantir a conectividade adequada entre a instância do ALB e os serviços de back-end, certifique-se de que o iptables ou outro software de segurança de terceiros nas instâncias ECS de back-end não bloqueie o bloco CIDR do vSwitch da instância do ALB ou o intervalo de endereços 100.64.0.0/10.
Obtenção do IP do cliente com WAF, CDN ou GA
Se o tráfego passar por serviços como Web Application Firewall (WAF), Content Delivery Network (CDN) ou Global Accelerator (GA) antes de chegar ao ALB, você também poderá obter o IP real do cliente no campo X-Forwarded-For. Esses produtos encaminham esse cabeçalho por padrão e não exigem configuração adicional.
Para evitar falsificação do X-Forwarded-For, use outros cabeçalhos HTTP para registrar o IP real do cliente:
-
Use o cabeçalho
Ali-Cdn-Real-Ipdo Alibaba Cloud CDN. A arquitetura é Cliente > CDN > WAF > ALB > ECS.Por padrão, o CDN adiciona o cabeçalho de requisição
Ali-Cdn-Real-Ipàs requisições encaminhadas ao servidor de origem. Esse cabeçalho transmite o endereço IP real do cliente conectado ao ponto de presença (POP) do CDN.Ao integrar com o WAF, selecione
Ali-Cdn-Real-Ipcomo cabeçalho personalizado para detecção do IP do cliente.Configure a variável de log
$http_Ali_Cdn_Real_Ipno servidor Nginx de back-end para obter o IP real do cliente desse campo.
-
Use a ação Insert Header em uma regra de encaminhamento do listener do ALB para adicionar um cabeçalho HTTP (par chave-valor) à requisição. A arquitetura é Cliente > GA > ALB > ECS.
Na regra de encaminhamento do listener do ALB, defina a Action como Insert Header. Neste exemplo, a chave é
client-real-ipe o valor é definido comoSystem-defined-Client IP Address.Para o listener, ative Retrieve Client IP e adicione os GA endpoint's public egress IP addresses à lista de endereços IP confiáveis.
Configure a variável de log
$http_client_real_ipno servidor Nginx de back-end para obter o IP real do cliente desse campo.
Obtenção do IP do cliente em um ambiente ACK
Para mais informações, consulte Configure ALB instances by using AlbConfig.
Como permitir que Nginx ou Apache obtenham diretamente o IP real do cliente (substituindo o endereço da camada de conexão)
Nginx
Por padrão, $remote_addr nos logs do Nginx registra o IP de encaminhamento do ALB (IP local). Para substituí-lo pelo IP real do cliente e garantir que logs e regras de controle de acesso existentes funcionem sem modificações, use o módulo ngx_http_realip_module:
Execute
nginx -V | grep http_realip_modulepara verificar se o módulo está instalado.-
No arquivo de configuração (padrão:
/etc/nginx/nginx.conf), adicione o seguinte ao blocohttp:set_real_ip_from <vSwitch CIDR block of the instance>; real_ip_header X-Forwarded-For; real_ip_recursive on;Se você usar uma instância do ALB não atualizada, defina
set_real_ip_fromcomo100.64.0.0/10. Execute
sudo nginx -tpara verificar a sintaxe e, em seguida, executesudo nginx -s reloadpara recarregar a configuração.
Após a configuração entrar em vigor, verifique o log de acesso (padrão:/var/log/nginx/access.log) para confirmar que$remote_addragora exibe o IP real do cliente.
Se o tráfego passar por múltiplos proxies, como WAF ou CDN, adicione os intervalos de IP de origem de cada camada de proxy em set_real_ip_from .
As requisições de verificação de integridade não carregam o cabeçalhoX-Forwarded-For, portanto,$remote_addrpara essas requisições ainda exibirá o bloco CIDR do vSwitch da instância do ALB (ou100.64.0.0/10para instâncias não atualizadas). Esse comportamento é esperado.
Apache
Por padrão, %h nos logs do Apache registra o IP de encaminhamento do ALB (IP local). Para substituí-lo pelo IP real do cliente e garantir que logs e regras de controle de acesso Require ip existentes funcionem sem modificações, use o módulo nativo mod_remoteip do Apache 2.4:
Execute
httpd -M | grep remoteip_modulepara verificar se o módulo está instalado.-
No arquivo de configuração (padrão:
/etc/httpd/conf/httpd.conf), adicione o seguinte:RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy <vSwitch CIDR block of the instance>Se você usar uma instância do ALB não atualizada, defina
RemoteIPTrustedProxycomo100.64.0.0/10. Execute
sudo systemctl restart httpdpara reiniciar o Apache.
Após a configuração entrar em vigor, verifique o log de acesso (padrão:/var/log/httpd/access_log) para confirmar que%hagora exibe o IP real do cliente.
Se o tráfego passar por múltiplos proxies, como WAF ou CDN, adicione os intervalos de IP de origem de cada camada de proxy em RemoteIPTrustedProxy .
As requisições de verificação de integridade não carregam o cabeçalhoX-Forwarded-For, portanto,%hpara essas requisições ainda exibirá o bloco CIDR do vSwitch da instância do ALB (ou100.64.0.0/10para instâncias não atualizadas). Esse comportamento é esperado.