Salta al contenuto

Come posso acquisire gli indirizzi IP dei client nei log del server web con Elastic Load Balancing?

7 minuti di lettura
0

Uso Elastic Load Balancing (ELB) per il mio server web e vedo l'indirizzo IP del mio bilanciatore del carico nei log di accesso al server web. Voglio invece acquisire gli indirizzi IP dei client.

Breve descrizione

I log di accesso al server web acquisiscono l'indirizzo IP del bilanciatore del carico perché quest'ultimo stabilisce la connessione alle istanze. Per acquisire gli indirizzi IP dei client nei log di accesso al server web, configura quanto segue:

  • Per gli Application Load Balancer e i Classic Load Balancer con listener HTTP/HTTPS, l'intestazione HTTP X-Forwarded-For acquisisce gli indirizzi IP dei client. È quindi possibile configurare i log di accesso al server web per registrare questi indirizzi IP.

    Nota: in alcuni casi, l'intestazione X-FORWARDED-FOR può essere assente o vuota. Le richieste di controllo dell'integrità avviate da Application Load Balancer, Classic Load Balancer e Network Load Balancer non includono l'intestazione X-FORWARDED-FOR. Inoltre, i Network Load Balancer e i Classic Load Balancer con listener TCP/SSL non aggiungono l'intestazione X-FORWARDED-FOR alle richieste in arrivo. Per gli Application Load Balancer, scegli la modalità di elaborazione Append per aggiungere in modo coerente l'intestazione X-FORWARDED-FOR.

  • Per i Classic Load Balancer con listener TCP/SSL, configura il supporto del protocollo proxy sul Classic Load Balancer e sull'applicazione di destinazione.

  • Per i Network Load Balancer, registra i tuoi obiettivi in base all'ID dell'istanza per acquisire gli indirizzi IP dei client senza una configurazione aggiuntiva del server web. Per istruzioni, consulta Attributi dei gruppi di destinazione.

  • Per i Network Load Balancer, quando è possibile registrare solo gli indirizzi IP come destinazioni, attiva il protocollo proxy versione 2 sul bilanciatore del carico. Per istruzioni, consulta Protocollo proxy.

Risoluzione

Application Load Balancer e Classic Load Balancer con listener HTTP/HTTPS (Apache)

Per aggiungere l'intestazione HTTP X-Forwarded-For e configurare i log di accesso al server web, completa i passaggi seguenti:

  1. Apri il file di configurazione di Apache usando un editor di testo. La posizione varia in base alla configurazione, ad esempio /etc/httpd/conf/httpd.conf per Amazon Linux e RHEL o /etc/apache2/apache2.conf per Ubuntu.

  2. Nella sezione LogFormat, aggiungi %{X-Forwarded-For}i, come mostra l'esempio seguente:

    ...    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. Salva le modifiche.

  4. Ricarica il servizio Apache. In base al sistema, esegui uno dei comandi seguenti:

    Sysvinit, sistemi basati su Debian (ad esempio Ubuntu) e SUSE (ad esempio SLES11)

    # /etc/init.d/apache2 reload

    Sysvinit e sistemi basati su RPM (ad esempio RHEL 6 e Amazon Linux), ad eccezione di SUSE

    # /etc/init.d/httpd reload

    Systemd, sistemi basati su Debian (ad esempio Ubuntu) e SUSE (ad esempio SLES12)

    # systemctl reload apache2

    Sistemi basati su RPM (ad esempio RHEL 7 e Amazon Linux 2), ad eccezione di SUSE

    # systemctl reload httpd
  5. Apri i log di accesso al server web Apache. La posizione varia in base alla configurazione.

  6. Verifica che gli indirizzi IP dei client siano ora registrati sotto l'intestazione X-Forwarded-For.

Application Load Balancer e Classic Load Balancer con listener HTTP/HTTPS (NGINX)

Per aggiungere l'intestazione HTTP X-Forwarded-For e configurare i log di accesso al server web, completa i passaggi seguenti:

  1. Apri il tuo file di configurazione NGINX utilizzando un editor di testo. La posizione è in genere /etc/nginx/nginx.conf.

  2. Nella sezione LogFormat, aggiungi $http\ _x\ _forwarded\ _for, come mostra l'esempio seguente:

    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. Salva le modifiche.

  4. Ricarica il servizio NGINX. Per Amazon Linux 2 o RHEL, esegui il comando seguente:

    systemctl reload nginx

    Nota: il comando per ricaricare il servizio NGINX è diverso sugli altri sistemi. I comandi per ricaricare NGINX sono simili ai comandi per ricaricare il servizio Apache nella sezione precedente.

  5. Apri i log di accesso al server web NGINX. La posizione varia in base alla configurazione.

  6. Verifica che gli indirizzi IP dei client siano ora registrati sotto l'intestazione X-Forwarded-For.

Classic Load Balancer con listener TCP/SSL (Apache)

Per configurare il supporto del protocollo proxy, completa i passaggi seguenti:

  1. Apri il file di configurazione di Apache usando un editor di testo. La posizione varia in base alla configurazione, ad esempio: /etc/httpd/conf/httpd.conf per Amazon Linux e RHEL o /etc/apache2/apache2.conf per Ubuntu.

  2. Assicurati che la tua configurazione di Apache carichi il modulo mod_remoteip (disponibile per Apache versione 2.4.31 e successive). Per ulteriori informazioni, consulta Apache Module mod\ _remoteip (Modulo Apache mod\ _remoteip) sul sito web di Apache. Questo modulo include la direttiva RemoteIPProxyProtocol. Per ulteriori informazioni, consulta RemoteIPProxyProtocol Directive (Direttiva RemoteIPProxyProtocol) sul sito web di Apache. Nel tuo file di configurazione, verifica la presenza di una riga simile a una delle seguenti:

    Amazon Linux o RHEL

    LoadModule remoteip_module modules/mod_remoteip.so

    Ubuntu

    LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
  3. Per confermare il caricamento del modulo mod\ _remoteip, esegui il comando seguente:

    $ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
  4. Esamina l'output e verifica che contenga una riga simile a:

    remoteip_module (shared)

    Importante: se l'output non contiene questa riga, il modulo non è incluso o caricato nella configurazione. Assicurati di attivare il modulo prima di procedere.

  5. Aggiungi la riga seguente al tuo file di configurazione di Apache per attivare il supporto del protocollo proxy:

    RemoteIPProxyProtocol On
  6. Modifica la sezione LogFormat del file di configurazione per acquisire l'indirizzo IP remoto (%a) e la porta remota (%{remote}p:):

    LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  7. Salva le modifiche.

  8. Ricarica il servizio Apache. In base al sistema, esegui uno dei comandi seguenti:

    Sysvinit, sistemi basati su Debian (ad esempio Ubuntu) e SUSE (ad esempio SLES11)

    # /etc/init.d/apache2 reload

    Sysvinit e sistemi basati su RPM (ad esempio RHEL 6 e Amazon Linux), ad eccezione di SUSE

    # /etc/init.d/httpd reload

    Systemd, sistemi basati su Debian (ad esempio Ubuntu) e SUSE (ad esempio SLES12)

    # systemctl reload apache2

    Systemd e sistemi basati su RPM (ad esempio RHEL 7 e Amazon Linux 2), ad eccezione di SUSE

    # systemctl reload httpd
  9. Apri i log di accesso al server web Apache. La posizione varia in base alla configurazione.

  10. Verifica che gli indirizzi IP dei client siano ora registrati sotto l'intestazione Protocollo proxy.

  11. Attiva il supporto per il protocollo proxy nell'applicazione di destinazione.

Classic Load Balancer con listener TCP/SSL (NGINX)

Per configurare il supporto del protocollo proxy, completa i passaggi seguenti:

  1. Apri il file di configurazione NGINX utilizzando un editor di testo. La posizione è in genere /etc/nginx/nginx.conf.

  2. Aggiorna la riga di ascolto della sezione server su proxy\ _protocol. Aggiorna la riga log_format della sezione http per impostare 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. Salva le modifiche.

  4. Ricarica il servizio NGINX. Per Amazon Linux 2 o RHEL, esegui il comando seguente:

    systemctl reload nginx

    Nota: il comando per ricaricare il servizio NGINX è diverso sugli altri sistemi. I comandi per ricaricare NGINX sono simili ai comandi per ricaricare il servizio Apache nella sezione precedente.

  5. Apri i log di accesso al server web NGINX. La posizione varia in base alla configurazione.

  6. Verifica che gli indirizzi IP dei client siano ora registrati sotto l'intestazione Protocollo proxy.

  7. Attiva il supporto per il protocollo proxy nell'applicazione di destinazione.

AWS UFFICIALEAggiornata 10 mesi fa