Come posso acquisire gli indirizzi IP dei client nei log del server Web dietro un ELB?

7 minuti di lettura
0

Sto usando Elastic Load Balancing (ELB) per il mio server Web e posso vedere l'indirizzo IP del mio sistema di bilanciamento del carico nei log di accesso al server Web. Come posso invece acquisire gli indirizzi IP dei client?

Breve descrizione

I log di accesso al server Web acquisiscono l'indirizzo IP del load balancer perché il load balancer stabilisce la connessione alle istanze. Per acquisire gli indirizzi IP dei client nei registri 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.
  • Per i sistemi Classic Load Balancer con listener TCP/SSL, attiva il supporto Proxy Protocol sul Classic Load Balancer e sull'applicazione di destinazione. Assicurati di configurare il supporto Proxy Protocol sia sul load balancer che sull'applicazione.
  • Per i Network Load Balancer, registra i tuoi obiettivi in base all'ID di istanza per acquisire gli indirizzi IP dei client senza una configurazione aggiuntiva del server Web. Per istruzioni, consulta Attributi del gruppo Target anziché le seguenti risoluzioni.
  • Per i Network Load Balancer, quando è possibile registrare solo gli indirizzi IP come destinazioni, attiva il protocollo proxy versione 2 sul load balancer. Per istruzioni, consulta Abilitare il protocollo proxy anziché le seguenti risoluzioni.

Risoluzione

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

  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**, in modo simile al 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
    ...
  1. Salva le modifiche.

  2. Ricarica il servizio Apache.

Per Sysvinit, i sistemi basati su Debian (come Ubuntu) e SUSE (come SLES11), esegui questo comando:

# /etc/init.d/apache2 reload

Per Sysvinit, i sistemi basati su RPM (come RHEL 6 e Amazon Linux), ad eccezione di SUSE, esegui questo comando:

# /etc/init.d/httpd reload

Per Systemd, sistemi basati su Debian (come Ubuntu) e SUSE (come SLES12), esegui questo comando:

# systemctl reload apache2

Per Systemd, sistemi basati su RPM (come RHEL 7 e Amazon Linux 2), ad eccezione di SUSE, esegui questo comando:

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

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

Bilanciatori del carico delle applicazioni e sistemi di bilanciamento del carico classici con listener HTTP/HTTPS (NGINX)

  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, in modo simile al 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;
    ...
}
  1. Salva le modifiche.

  2. Ricarica il servizio NGINX.

Ad esempio, su Amazon Linux 2 o RHEL, esegui questo comando:

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.

  1. Apri i registri di accesso al server Web NGINX. La posizione varia in base alla configurazione.

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

Bilanciatori di carico classici con listener TCP/SSL (Apache)

  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). Questo modulo include la direttiva RemoteIPProxyProtocol. Nel tuo file di configurazione, verifica la presenza di una riga simile alla seguente:

Amazon Linux o RHEL:

LoadModule remoteip_module modules/mod_remoteip.so

Ubuntu:

LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
  1. Conferma che il modulo mod_remoteip viene caricato:
$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
  1. 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.

  1. Aggiungi la riga seguente al tuo file di configurazione di Apache per attivare il supporto del Proxy Protocol:
RemoteIPProxyProtocol On
  1. Modifica la sezione LogFormat del file di configurazione per acquisire l'indirizzo IP remoto (%a) e la porta remota (% {remote} p:), in modo simile alla seguente:
LogFormat "%h %p %a %{remote}p %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
  1. Salva le modifiche.

  2. Ricarica il servizio Apache.

Per Sysvinit, i sistemi basati su Debian (come Ubuntu) e SUSE (come SLES11), esegui questo comando:

# /etc/init.d/apache2 reload

Per Sysvinit, i sistemi basati su RPM (come RHEL 6 e Amazon Linux), ad eccezione di SUSE, esegui questo comando:

# /etc/init.d/httpd reload

Per Systemd, sistemi basati su Debian (come Ubuntu) e SUSE (come SLES12), esegui questo comando:

# systemctl reload apache2

Per Systemd, sistemi basati su RPM (come RHEL 7 e Amazon Linux 2), ad eccezione di SUSE, esegui questo comando:

# systemctl reload httpd
  1. Apri i registri di accesso al server Web Apache. La posizione varia in base alla configurazione.

  2. Verifica che gli indirizzi IP dei client siano ora registrati sotto l'intestazione Proxy Protocol.

  3. Attiva il supporto per Proxy Protocol nell'applicazione di destinazione.

Bilanciatori di carico classici con listener TCP/SSL (NGINX)

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

  2. Cambia la riga di ascolto della sezione server in*NOTA: SI TRATTA DI UN CONTENUTO SEGNAPOSTO CHE VERRÀ SOSTITUITO DOPO LA MODIFICA\ *

###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

Assicurati di modificare la riga log_format della sezione http per impostare il 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;
        ...
        }
...
}
  1. Salva le modifiche.

  2. Ricarica il servizio NGINX.

Ad esempio, su Amazon Linux 2 o RHEL, esegui questo comando:

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.

  1. Aprire i log di accesso al server Web NGINX. La posizione varia in base alla configurazione.

  2. Verifica che gli indirizzi IP dei client siano ora registrati sotto l'intestazione Proxy Protocol.

  3. Attiva il supporto per Proxy Protocol nell'applicazione di destinazione.


AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa