Após adicionar seu site ao Web Application Firewall (WAF), o WAF filtra as requisições recebidas e encaminha o tráfego normal para o servidor de origem. Como o WAF atua como proxy intermediário, o servidor de origem recebe o IP de back-to-origin do WAF em vez do IP real do cliente. Este tópico explica como configurar seu servidor web ou contêiner Kubernetes para extrair o endereço IP de origem do cliente do cabeçalho X-Forwarded-For.
Selecione o tipo do seu servidor: NGINX | IIS 6 | IIS 7 | Apache | Tomcat | Kubernetes
Como funciona
O WAF insere o IP do cliente no cabeçalho de requisição X-Forwarded-For antes de encaminhar a requisição ao servidor de origem:
X-Forwarded-For: <client IP>
Quando as requisições passam por múltiplos proxies — como WAF, Anti-DDoS Pro ou Anti-DDoS Premium e Alibaba Cloud CDN — cada proxy adiciona seu próprio endereço. O cabeçalho registra uma cadeia separada por vírgulas:
X-Forwarded-For: <client IP>, <proxy 1 IP>, <proxy 2 IP>, <proxy 3 IP>, ...
O valor mais à esquerda é sempre o IP de origem do cliente.
Pré-requisitos
Antes de começar, verifique se você possui:
Um site adicionado ao WAF
Os blocos CIDR de back-to-origin do WAF para sua região. Consulte Permitir acesso dos blocos CIDR de back-to-origin do WAF
Backups do ambiente do servidor de origem, incluindo snapshots de instâncias do Elastic Compute Service (ECS) e arquivos de configuração do servidor web
Configurar servidores NGINX
O NGINX usa o módulo http_realip_module para ler o IP real do cliente no cabeçalho X-Forwarded-For.
Etapa 1: Instale o http_realip_module
Verifique se o módulo já está instalado:
nginx -V | grep http_realip_module
Se o módulo aparecer na saída, pule para a Etapa 2. Caso contrário, recompile o NGINX com o módulo.
O módulo não vem incluído quando se instala o NGINX por pacote de instalação rápida.
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar zxvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --user=www --group=www --prefix=/alidata/server/nginx \
--with-http_stub_status_module \
--without-http-cache \
--with-http_ssl_module \
--with-http_realip_module
make
make install
kill -USR2 `cat /alidata/server/nginx/logs/nginx.pid`
kill -QUIT `cat /alidata/server/nginx/logs/nginx.pid.oldbin`
Etapa 2: Atualize a configuração do servidor
Abra o arquivo
default.conf.-
Adicione as seguintes diretivas dentro do bloco
location / {}. Substitua de<ip_range1>até<ip_rangex>pelos blocos CIDR de back-to-origin do WAF. Insira um bloco CIDR por linha.set_real_ip_from <ip_range1>; set_real_ip_from <ip_range2>; ... set_real_ip_from <ip_rangex>; real_ip_header X-Forwarded-For;Exemplo com três blocos CIDR:
set_real_ip_from 10.0.0.1; set_real_ip_from 10.0.0.2; set_real_ip_from 10.0.0.3; real_ip_header X-Forwarded-For;
Etapa 3: Atualize o formato de log
Abra o arquivo
nginx.confe localize a diretivalog_formatno blocohttp.-
Substitua
$remote_addrpor$http_x_forwarded_forpara que os logs registrem o IP de origem do cliente.log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent"';
Etapa 4: Recarregar o NGINX
nginx -s reload
Configurar servidores IIS 6
O IIS 6 usa o módulo F5XForwardedFor para obter o IP de origem do cliente.
-
Copie o arquivo
F5XForwardedFor.dlldo diretóriox86\Releaseoux64\Releasepara um diretório personalizado, comoC:\ISAPIFilters\x86ouC:\ISAPIFilters\x64.- Certifique-se de que o processo do Internet Information Services (IIS) tenha permissões de leitura e gravação no diretório. - Se o arquivo não estiver no diretório release, baixe o F5XForwardedFor.dll e copie-o para o diretório.
Abra o Gerenciador do IIS, clique em com o botão direito no site e selecione Properties.
-
Na guia ISAPI Filters, clique em Add e defina os seguintes parâmetros (exemplo para SO de 32 bits):
Parâmetro
Valor
Filter name
x_forwarded_for_x86Executable
Caminho completo para
F5XForwardedFor.dll, por exemploC:\ISAPIFilters\x86\F5XForwardedFor.dll Clique em OK e reinicie o servidor IIS 6 para aplicar as alterações.
Configurar servidores IIS 7
O IIS 7 usa o módulo F5XForwardedFor para obter o IP de origem do cliente.
-
Copie os arquivos
F5XFFHttpModule.dlleF5XFFHttpModule.inido diretóriox86\Releaseoux64\Releasepara um diretório personalizado, comoC:\x_forwarded_for\x86ouC:\x_forwarded_for\x64.- Certifique-se de que o processo do IIS tenha permissões de leitura e gravação no diretório. - Se os arquivos não estiverem no diretório release, baixe o F5XForwardedFor e copie-os para o diretório.
No Gerenciador do IIS, clique em duas vezes em Modules.
No painel Actions, clique em Configure Local Module e depois em Register.
-
Registre o módulo com os seguintes parâmetros (exemplo para SO de 32 bits):
Parâmetro
Valor
Name
x_forwarded_for_x86Path
Caminho completo para
F5XFFHttpModule.dll, por exemploC:\x_forwarded_for\x86\F5XFFHttpModule.dll Na caixa de diálogo Configure Local Module, selecione o módulo recém-registrado e clique em OK.
Na seção ISAPI and CGI Restrictions, adicione a DLL registrada e defina Restriction como Allow.
Reinicie o servidor IIS 7 para aplicar as alterações.
Configurar servidores Apache
Apache no Windows
O Apache 2.4 e versões posteriores incluem o módulo mod_remoteip.so, que lê o IP real do cliente no cabeçalho X-Forwarded-For.
-
Crie o arquivo
conf/extra/httpd-remoteip.conf.Usar um arquivo de configuração separado reduz edições diretas no
httpd.confe evita interrupções de serviço causadas por configurações incorretas. -
Adicione o seguinte conteúdo ao arquivo
httpd-remoteip.conf. Substitua de<ip_range1>até<ip_rangex>pelos blocos CIDR de back-to-origin do WAF, separados por espaços.# Load the mod_remoteip.so module. LoadModule remoteip_module modules/mod_remoteip.so # Configure the RemoteIPHeader header. RemoteIPHeader X-Forwarded-For # Specify the back-to-origin CIDR blocks. RemoteIPInternalProxy <ip_range1> <ip_range2> ... <ip_rangex>Exemplo com três blocos CIDR:
RemoteIPInternalProxy 10.0.0.1 10.0.0.2 10.0.0.3 -
Adicione a seguinte linha ao arquivo
conf/httpd.confpara carregar o novo arquivo de configuração:Include conf/extra/httpd-remoteip.conf -
Atualize o formato de log no arquivo
httpd.confpara usar%a, que registra o IP remoto resolvido pelo módulomod_remoteip:LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%a %l %u %t \"%r\" %>s %b" common Reinicie o Apache para aplicar as alterações.
Apache no Linux
Apache 2.4 e versões posteriores: O módulo remoteip_module é nativo. Siga as mesmas etapas descritas para Apache no Windows.
Versões anteriores ao Apache 2.4: Instale o módulo de terceiros mod_rpaf.
-
Instale o módulo
mod_rpaf:wget https://github.com/gnif/mod_rpaf/archive/v0.6.0.tar.gz tar zxvf mod_rpaf-0.6.tar.gz cd mod_rpaf-0.6 /alidata/server/httpd/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c -
Anexe o seguinte conteúdo ao arquivo
/alidata/server/httpd/conf/httpd.conf. ParaRPAFproxy_ips, use os IPs do módulo mod_rpaf encontrados nos logs do Apache, e não os IPs do servidor proxy do WAF. Na maioria dos casos, há dois endereços IP listados.LoadModule rpaf_module modules/mod_rpaf-2.0.so RPAFenable On RPAFsethostname On RPAFproxy_ips 10.XX.XX.65 10.XX.XX.131 RPAFheader X-Forwarded-For -
Reinicie o Apache:
/alidata/server/httpd/bin/apachectl restart
Para obter detalhes sobre o módulo mod_remoteip do Apache, consulte a documentação de módulos do Apache.
Configurar servidores Tomcat
O Tomcat lê o IP do cliente no cabeçalho X-Forwarded-For por meio da classe AccessLogValve.
Abra o arquivo
tomcat/conf/server.xml.-
Atualize a entrada
AccessLogValvepara registrar%{X-FORWARDED-FOR}iem vez do host remoto padrão:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{X-FORWARDED-FOR}i %l %u %t %r %s %b %D %q %{User-Agent}i %T" resolveHosts="false"/>
Configurar contêineres Kubernetes
Quando o servidor de origem roda no Kubernetes, o controlador Ingress armazena o IP de origem do cliente em X-Original-Forwarded-For e os IPs de back-to-origin do WAF em X-Forwarded-For. Para restaurar o IP de origem em X-Forwarded-For, atualize a configuração do controlador Ingress.
-
Edite o ConfigMap
kube-system/nginx-configuration:kubectl -n kube-system edit cm nginx-configuration -
Adicione as seguintes chaves:
compute-full-forwarded-for: "true" forwarded-for-header: "X-Forwarded-For" use-forwarded-headers: "true" Salve o arquivo. As alterações entram em vigor imediatamente, sem necessidade de reinicialização.
Atualize sua aplicação para ler o IP de origem do cliente no cabeçalho
X-Original-Forwarded-Forem vez deX-Forwarded-For.