Ir para o conteúdo

Como faço para capturar endereços IP de clientes em logs do servidor web com o Elastic Load Balancing?

7 minuto de leitura
0

Uso o Elastic Load Balancing (ELB) para meu servidor web e vejo o endereço IP do balanceador de carga nos logs de acesso ao servidor web. Em vez disso, quero 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 Application Load Balancers e Classic Load Balancers com receptores HTTP/HTTPS, adicione o cabeçalho HTTP X-Forwarded-For para capturar os endereços IP do cliente. Em seguida, você pode configurar os logs de acesso ao servidor web para registrar esses endereços IP.

    Observação: Em certos casos, o cabeçalho X-FORWARDED-FOR pode estar ausente ou vazio. As solicitações de verificação de integridade iniciadas por Application Load Balancers, Classic Load Balancers e Network Load Balancers não incluem o cabeçalho X-FORWARDED-FOR. Além disso, Network Load Balancers e Classic Load Balancers com receptores TCP/SSL não acrescentam o cabeçalho X-FORWARDED-FOR às solicitações recebidas. Para Application Load Balancers, escolha o modo de processamento Append para adicionar consistentemente o cabeçalho X-FORWARDED-FOR.

  • Para os Classic Load Balancers com receptores TCP/SSL, configure o suporte ao protocolo de proxy no Classic Load Balancer e na aplicação de destino.

  • 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.

  • 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 o Protocolo de proxy.

Resolução

Application Load Balancers e Classic Load Balancers com receptores HTTP/HTTPS (Apache)

Para adicionar o cabeçalho HTTP X-Forwarded-For e configurar seus logs de acesso ao servidor web, conclua as seguintes etapas:

  1. Use um editor de texto para abrir o arquivo de configuração do Apache. A localização varia de acordo com a sua 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, como mostra o exemplo a seguir:

    ...    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. Com base no seu sistema, execute um dos comandos a seguir:

    Sysvinit, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES11)

    # /etc/init.d/apache2 reload

    Sysvinit, sistemas baseados em RPM (como RHEL 6 e Amazon Linux), exceto SUSE

    # /etc/init.d/httpd reload

    Systemd, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES12)

    # systemctl reload apache2

    Sistemas baseados em RPM (como RHEL 7 e Amazon Linux 2), exceto SUSE

    # systemctl reload httpd
  5. Abra os logs de acesso ao servidor web do Apache. A localização varia de acordo com a sua 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)

Para adicionar o cabeçalho HTTP X-Forwarded-For e configurar seus logs de acesso ao servidor web, conclua as seguintes etapas:

  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, conforme mostra o exemplo a seguir:

    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. Para Amazon Linux 2 ou RHEL, execute o seguinte 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 sua configuração.

  6. 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)

Para configurar o suporte ao protocolo de proxy, conclua as seguintes etapas:

  1. Use um editor de texto para abrir o arquivo de configuração do Apache. 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. 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). Para obter mais informações, consulte Apache Module mod_remoteip no site do Apache. Esse módulo inclui a diretriz RemoteIPProxyProtocol. Para obter mais informações, consulte RemoteIPProxyProtocol Directive no site do Apache. No arquivo de configuração, verifique se há uma linha semelhante a uma das seguintes:

    Amazon Linux ou RHEL

    LoadModule remoteip_module modules/mod_remoteip.so

    Ubuntu

    LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
  3. Para confirmar se o módulo mod_remoteip carrega, execute o seguinte comando:

    $ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
  4. Revise a saída e verifique se há uma linha semelhante ao seguinte:

    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.

  5. Para ativar o suporte ao protocolo de proxy, adicione a seguinte linha ao arquivo de configuração do Apache:

    RemoteIPProxyProtocol On
  6. Edite a seção LogFormat do arquivo de configuração para capturar o endereço IP remoto (%a) e a porta remota (%{remote}p:):

    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. Com base no seu sistema, execute um dos comandos a seguir:

    Sysvinit, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES11)

    # /etc/init.d/apache2 reload

    Sysvinit, sistemas baseados em RPM (como RHEL 6 e Amazon Linux), exceto SUSE

    # /etc/init.d/httpd reload

    Systemd, sistemas baseados em Debian (como Ubuntu) e SUSE (como SLES12)

    # systemctl reload apache2

    Systemd, sistemas baseados em RPM (como RHEL 7 e Amazon Linux 2), exceto SUSE

    # systemctl reload httpd
  9. Abra os logs de acesso ao servidor web do Apache. A localização varia de acordo com a sua configuração.

  10. Verifique se os endereços IP do cliente estão registrados no cabeçalho Protocolo de proxy.

  11. Ative o suporte ao protocolo de proxy na aplicação de destino.

Classic Load Balancers com receptores TCP/SSL (NGINX)

Para configurar o suporte ao protocolo de proxy, conclua as seguintes etapas:

  1. Abra o arquivo de configuração do NGINX usando um editor de texto. A localização normalmente é /etc/nginx/nginx.conf.

  2. Atualize a linha listen da seção server para proxy_protocol. Atualize 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. Para Amazon Linux 2 ou RHEL, execute o seguinte 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 os logs de acesso ao servidor web do NGINX. A localização varia de acordo com a sua configuração.

  6. Verifique se os endereços IP do cliente estão registrados no cabeçalho Protocolo de proxy.

  7. Ative o suporte ao protocolo de proxy na aplicação de destino.