Comment capturer des adresses IP client dans les journaux du serveur web derrière un Elastic Load Balancing (ELB) ?

Dernière mise à jour : 04-08-2022

J'utilise Elastic Load Balancing (ELB) pour mon serveur xeb, et je vois l'adresse IP de mon équilibreur de charge dans les journaux d'accès du serveur web. Comment capturer plutôt des adresses IP client ?

Brève description

Les journaux d'accès de votre serveur Web capturent l'adresse IP de votre équilibreur de charge, car celui-ci établit la connexion à vos instances. Pour capturer des adresses IP client dans les journaux d'accès de votre serveur Web, configurez ce qui suit :

  • Pour les équilibreurs de charge Application Load Balancer et Classic Load Balancer avec écouteurs HTTP/HTTPS, l'en-tête HTTP X-Forwarded-For capture les adresses IP client. Vous pouvez ensuite configurer les journaux d'accès de votre serveur web pour enregistrer ces adresses IP.
  • Pour les Classic Load Balancers avec écouteurs TCP/SSL, activez la prise en charge du protocole proxy sur le Classic Load Balancer et l'application cible. Veillez à configurer la prise en charge du protocole proxy sur l'équilibreur de charge et sur l'application.
  • Pour les équilibreurs de charge Network Load Balancer, inscrivez vos cibles par ID d'instance afin de capturer les adresses IP client sans configuration supplémentaire du serveur Web. Pour obtenir accéder aux instructions, reportez-vous à Attributs de groupe cible plutôt qu'aux résolutions suivantes.
  • Pour les Network Load Balancers , lorsque vous pouvez uniquement enregistrer des adresses IP en tant que cibles, activez le protocole proxy version 2 sur l'équilibreur de charge. Pour obtenir connaître les instructions, reportez-vous à Activer le protocole proxy plutôt qu'aux résolutions suivantes.

Résolution

Équilibreurs de charge Application Load Balancer et Classic Load Balancer avec écouteurs HTTP/HTTPS (Apache)

1.    Ouvrez votre fichier de configuration Apache à l'aide d'un éditeur de texte. L'emplacement varie en fonction de la configuration, par exemple /etc/httpd/conf/httpd.conf pour Amazon Linux et RHEL, ou /etc/apache2/apache2.conf pour Ubuntu.

2.    Dans la section LogFormat, ajoutez %{X-Forwarded-For}i, comme suit :

...
    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.    Enregistrez vos modifications.

4.    Rechargez le service Apache.

Pour Sysvinit, les systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES11), exécutez la commande suivante :

# /etc/init.d/apache2 reload

Pour Sysvinit, les systèmes basés sur RPM (tels que RHEL 6 et Amazon Linux) à l'exception de SUSE, exécutez la commande suivante :

# /etc/init.d/httpd reload

Pour Systemd, les systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES12), exécutez la commande suivante :

# systemctl reload apache2

Pour Systemd, les systèmes basés sur RPM (tels que RHEL 7 et Amazon Linux 2) à l'exception de SUSE, exécutez la commande suivante :

# systemctl reload httpd

5.    Ouvrez les journaux d'accès du serveur Web Apache. L'emplacement varie en fonction de la configuration.

6.    Vérifiez que les adresses IP client sont maintenant enregistrées sous l'en-tête X-Forwarded-For.

Application Load Balancers et Classic Load Balancers avec écouteurs HTTP/HTTPS (NGINX)

1.    Ouvrez votre fichier de configuration NGINX à l'aide d'un éditeur de texte. Généralement, l'emplacement est /etc/nginx/nginx.conf.

2.    Dans la section LogFormat, ajoutez$http_x_forwarded_forcomme suit :

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.    Enregistrez vos modifications.

4.    Rechargez le service NGINX.

Par exemple, sur Amazon Linux 2 ou RHEL, exécutez la commande suivante :

systemctl reload nginx

Remarque : la commande de rechargement du service NGINX varie d'un système à l'autre. Les commandes permettant de recharger NGINX sont semblables à celles utilisées pour recharger le service Apache dans la section précédente.

5.    Ouvrez les journaux d'accès du serveur Web NGINX. L'emplacement varie en fonction de la configuration.

6.    Vérifiez que les adresses IP client sont maintenant enregistrées sous l'en-tête X-Forwarded-For.

Équilibreurs de charge classiques avec écouteurs TCP/SSL (Apache)

1.    Ouvrez votre fichier de configuration Apache à l'aide d'un éditeur de texte. L'emplacement varie en fonction de la configuration, par exemple /etc/httpd/conf/httpd.conf pour Amazon Linux et RHEL, ou /etc/apache2/apache2.conf pour Ubuntu.

2.    Vérifiez que votre configuration Apache charge le module mod_remoteip (disponible pour Apache version 2.4.31 et versions ultérieures). Ce module inclut la directive RemoteIPProxyProtocol. Dans votre fichier de configuration, recherchez une ligne semblable à la suivante :

Amazon Linux ou RHEL :

LoadModule remoteip_module modules/mod_remoteip.so

Ubuntu :

LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so

3.    Confirmez que le module mod_remoteip se charge :

$ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip

4.    Examinez la sortie et vérifiez qu'elle contient bien une ligne semblable à :

remoteip_module (shared)

Important : si cette sortie ne contient pas cette ligne, cela implique que module n'est pas inclus ou chargé dans votre configuration. Veillez à activer le module avant de continuer.

5.    Ajoutez la ligne suivante dans votre fichier de configuration Apache pour activer la prise en charge du protocole proxy :

RemoteIPProxyProtocol On

6.    Modifiez la section LogFormat du fichier de configuration pour capturer l'adresse IP distante (%a) et le port distant (%{remote}p:) comme suit :

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

7.    Enregistrez vos modifications.

8.    Rechargez le service Apache.

Pour Sysvinit, les systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES11), exécutez la commande suivante :

# /etc/init.d/apache2 reload

Pour Sysvinit, les systèmes basés sur RPM (tels que RHEL 6 et Amazon Linux) à l'exception de SUSE, exécutez la commande suivante :

# /etc/init.d/httpd reload

Pour Systemd, les systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES12), exécutez la commande suivante :

# systemctl reload apache2

Pour Systemd, les systèmes basés sur RPM (tels que RHEL 7 et Amazon Linux 2) à l'exception de SUSE, exécutez la commande suivante :

# systemctl reload httpd

9.    Ouvrez les journaux d'accès du serveur Web Apache. L'emplacement varie en fonction de la configuration.

10.    Vérifiez que les adresses IP client sont maintenant enregistrées sous l'en-tête du protocole proxy.

11.    Activez la prise en charge du protocole proxy dans votre application cible.

Classic Load Balancers avec écouteurs TCP/SSL (NGINX)

1.    Ouvrez le fichier de configuration NGINX à l'aide d'un éditeur de texte. Généralement, l'emplacement est /etc/nginx/nginx.conf.

2.    Remplacez la ligne listen de la section server par en *NOTE: THIS IS PLACEHOLDER CONTENT THAT WILL BE REPLACED AFTER EDITING*

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

Veillez à modifier la ligne log_format de la section http pour définir 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.    Enregistrez vos modifications.

4.    Rechargez le service NGINX.

Par exemple, sur Amazon Linux 2 ou RHEL, exécutez la commande suivante :

systemctl reload nginx

Remarque : la commande de rechargement du service NGINX varie d'un système à l'autre. Les commandes permettant de recharger NGINX sont semblables à celles utilisées pour recharger le service Apache dans la section précédente.

5.    Ouvrez les journaux d'accès du serveur Web NGINX. L'emplacement varie en fonction de la configuration.

6.    Vérifiez que les adresses IP client sont maintenant enregistrées sous l'en-tête du protocole proxy.

7.    Activez la prise en charge du protocole proxy dans votre application cible.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?