Comment capturer des adresses IP client dans les journaux du serveur Web derrière un équilibreur de charge ELB ?

Dernière mise à jour : 17/03/2021

J'utilise Elastic Load Balancing (ELB) pour mon serveur Web, 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 équilibreurs de charge Classic Load Balancer avec écouteurs TCP/SSL, activez la prise en charge du protocole proxy sur l'instance de 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 des instructions, consultez Attributs de groupe cible plutôt que les résolutions suivantes.
  • Pour les équilibreurs de charge Network Load Balancer, lorsque vous pouvez uniquement inscrire des adresses IP en tant que cibles, activez le protocole proxy version 2 sur l'équilibreur de charge. Pour obtenir des instructions, consultez Activer le protocole proxy plutôt que les 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 bien le module mod_remoteip (disponible pour Apache version 2.4.31 et 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 ligne ne figure pas dans la sortie, le 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.

Équilibreurs de charge classiques 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.    Modifiez la ligne listen de la section server pour activer 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 ?


Besoin d'aide pour une question technique ou de facturation ?