Como faço para capturar endereços IP do cliente nos logs do servidor web por trás de um ELB?
Estou usando o Elastic Load Balancing (ELB) para meu servidor web e posso ver o endereço IP do balanceador de carga nos logs de acesso ao servidor web. Como faço para capturar endereços IP do cliente?
Descrição breve
Os logs de acesso ao servidor web capturam o endereço IP do balanceador de carga porque o balanceador de carga estabelece a conexão com as instâncias. Para capturar os endereços IP dos clientes nos logs de acesso ao servidor web, configure o seguinte:
- Para os Application Load Balancers e Classic Load Balancers com receptores HTTP/HTTPS, o cabeçalho HTTP X-Forwarded-For captura os endereços IP do cliente. Em seguida, você pode configurar os logs de acesso ao servidor web para registrar esses endereços IP.
- Para os Classic Load Balancers com receptores TCP/SSL, ative o suporte ao protocolo de proxy no Classic Load Balancer e na aplicação de destino. Certifique-se de configurar o suporte ao protocolo de proxy no balanceador de carga e na aplicação.
- Para os Network Load Balancers, registre seus destinos por ID de instância para capturar endereços IP do cliente sem configuração adicional do servidor web. Para obter instruções, consulte Atributos do grupo de destino em vez das resoluções a seguir.
- Para os Network Load Balancers, quando somente é possível registrar endereços IP como destinos, ative o protocolo de proxy versão 2 no balanceador de carga. Para obter instruções, consulte Habilitar o protocolo de proxy em vez das resoluções a seguir.
Resolução
Application Load Balancers e Classic Load Balancers com receptores HTTP/HTTPS (Apache)
1. Abra o arquivo de configuração do Apache usando um editor de texto. A localização varia de acordo com a configuração, como /etc/httpd/conf/httpd.conf para Amazon Linux e RHEL**,** ou /etc/apache2/apache2.conf para Ubuntu.
2. Na seção LogFormat, adicione %{X-Forwarded-For}i, semelhante ao seguinte:
... LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common ...
3. Salve as alterações.
4. Recarregue o serviço do Apache.
Para Sysvinit, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES11), execute este comando:
# /etc/init.d/apache2 reload
Para Sysvinit, sistemas baseados em RPM (como RHEL 6 e Amazon Linux), exceto SUSE, execute este comando:
# /etc/init.d/httpd reload
Para Systemd, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES12), execute este comando:
# systemctl reload apache2
Para Systemd, sistemas baseados em RPM (como RHEL 7 e Amazon Linux 2), exceto SUSE, execute este comando:
# systemctl reload httpd
5. Abra os logs de acesso ao servidor web do Apache. A localização varia de acordo com a configuração.
6. Verifique se os endereços IP do cliente estão registrados no cabeçalho X-Forwarded-For.
Application Load Balancers e Classic Load Balancers com receptores HTTP/HTTPS (NGINX)
1. Abra o arquivo de configuração do NGINX usando um editor de texto. A localização normalmente é /etc/nginx/nginx.conf.
2. Na seção LogFormat, adicione $http_x_forwarded_for, semelhante ao seguinte:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; ... }
3. Salve as alterações.
4. Recarregue o serviço do NGINX.
Por exemplo, no Amazon Linux 2 ou RHEL, execute este comando:
systemctl reload nginx
Observação: o comando para recarregar o serviço do NGINX é diferente em outros sistemas. Os comandos para recarregar o NGINX são semelhantes aos comandos para recarregar o serviço do Apache na seção anterior.
5. Abra seus logs de acesso ao servidor web do NGINX. A localização varia de acordo com a configuração.
- Verifique se os endereços IP do cliente estão registrados no cabeçalho X-Forwarded-For.
Classic Load Balancers com receptores TCP/SSL (Apache)
1. Abra o arquivo de configuração do Apache usando um editor de texto. A localização varia de acordo com a configuração, como /etc/httpd/conf/httpd.conf para Amazon Linux e RHEL ou /etc/apache2/apache2.conf para Ubuntu.
- Certifique-se de que a configuração do Apache carregue o módulo mod_remoteip (disponível para o Apache versão 2.4.31 e mais recentes). Esse módulo inclui a diretriz RemoteIPProxyProtocol. No arquivo de configuração, verifique se há uma linha semelhante à seguinte:
Amazon Linux ou RHEL:
LoadModule remoteip_module modules/mod_remoteip.so
Ubuntu:
LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
- Confirme se o módulo mod_remoteip é carregado:
$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
- Revise a saída e verifique se há uma linha semelhante a:
remoteip_module (shared)
Importante: se a saída não contiver essa linha, o módulo não será incluído ou carregado na sua configuração. Certifique-se de ativar o módulo antes de continuar.
- Adicione a seguinte linha ao arquivo de configuração do Apache para ativar o suporte ao protocolo de proxy:
RemoteIPProxyProtocol On
- Edite a seção LogFormat do arquivo de configuração para capturar o endereço IP remoto (%a) e a porta remota ( %{remote}p:), semelhante ao seguinte:
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
7. Salve as alterações.
8. Recarregue o serviço do Apache.
Para Sysvinit, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES11), execute este comando:
# /etc/init.d/apache2 reload
Para Sysvinit, sistemas baseados em RPM (como RHEL 6 e Amazon Linux), exceto SUSE, execute este comando:
# /etc/init.d/httpd reload
Para Systemd, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES12), execute este comando:
# systemctl reload apache2
Para Systemd, sistemas baseados em RPM (como RHEL 7 e Amazon Linux 2), exceto SUSE, execute este comando:
# systemctl reload httpd
-
Abra os logs de acesso ao servidor web do Apache. A localização varia de acordo com a configuração.
-
Verifique se os endereços IP do cliente estão registrados no cabeçalho Protocolo de proxy.
-
Ative o suporte ao protocolo de proxy na aplicação de destino.
Classic Load Balancers com receptores TCP/SSL (NGINX)
-
Abra o arquivo de configuração do NGINX usando um editor de texto. A localização normalmente é /etc/nginx/nginx.conf.
-
Altere a linha de escuta da seção do servidor para *OBSERVAÇÃO: ESTE É UM CONTEÚDO DE ESPAÇO RESERVADO QUE SERÁ SUBSTITUÍDO APÓS A EDIÇÃO*
###Long Sentences XX ###Wrong/Misspelled Service Name ###Link broken or incorrect title link ###Sensitive Terms Terms ###Changes **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** **WAS:** **IS:** **REASON:** proxy_protocol
Certifique-se de alterar a linha log_format da seção http para definir o proxy_protocol_addr:
http { ... log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$proxy_protocol_addr"'; access_log /var/log/nginx/access.log main; ... } server { ... listen 80 default_server proxy_protocol; ... } ... }
3. Salve as alterações.
4. Recarregue o serviço do NGINX.
Por exemplo, no Amazon Linux 2 ou RHEL, execute este comando:
systemctl reload nginx
Observação: o comando para recarregar o serviço do NGINX é diferente em outros sistemas. Os comandos para recarregar o NGINX são semelhantes aos comandos para recarregar o serviço do Apache na seção anterior.
-
Abra os logs de acesso ao servidor web do NGINX. A localização varia de acordo com a configuração.
-
Verifique se os endereços IP do cliente estão registrados no cabeçalho Protocolo de proxy.
-
Ative o suporte ao protocolo de proxy na aplicação de destino.
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há 2 anos