Passer au contenu

Comment capturer les adresses IP des clients dans les journaux de serveurs Web avec Elastic Load Balancing ?

Lecture de 7 minute(s)
0

J'utilise Elastic Load Balancing (ELB) pour mon serveur Web et l'adresse IP de mon équilibreur de charge apparaît dans les journaux d'accès au serveur Web. Je souhaite plutôt capturer les adresses IP des clients.

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 avec vos instances. Pour capturer les adresses IP des clients dans les journaux d'accès à votre serveur Web, configurez les paramètres suivants :

  • Pour les Application Load Balancers et les Classic Load Balancers dotés d'écouteurs HTTP/HTTPS, ajoutez l'en-tête HTTP X-Forwarded-For pour capturer les adresses IP des clients. Vous pouvez ensuite configurer les journaux d'accès de votre serveur Web pour enregistrer ces adresses IP.

    Remarque : dans certains cas, l'en-tête X-FORWARDED-FOR peut être absent ou vide. Les demandes de surveillance de l'état initiées par les Application Load Balancers, les Classic Load Balancers et les Network Load Balancers n'incluent pas l'en-tête X-FORWARDED-FOR. De plus, les Network Load Balancers et les Classic Load Balancers dotés d'écouteurs TCP/SSL n'ajoutent pas l'en-tête X-FORWARDED-FOR aux requêtes entrantes. Pour les Application Load Balancers, choisissez le mode de traitement Ajouter pour ajouter systématiquement l'en-tête X-FORWARDED-FOR.

  • Pour les Classic Load Balancers dotés d'écouteurs TCP/SSL, configurez la prise en charge du protocole proxy sur le Classic Load Balancer et l'application cible.

  • Pour les Network Load Balancers, enregistrez vos cibles par ID d'instance afin de capturer les adresses IP des clients sans configuration de serveur Web supplémentaire. Pour obtenir des instructions, consultez la section Attributs du groupe cible.

  • Pour les Network Load Balancers, lorsque vous ne pouvez enregistrer que des adresses IP en tant que cibles, activez le protocole proxy version 2 sur l'équilibreur de charge. Pour obtenir des instructions, consultez la section Protocole proxy.

Résolution

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

Pour ajouter l'en-tête HTTP X-Forwarded-For et configurer les journaux d'accès de votre serveur Web, procédez comme suit :

  1. Utilisez un éditeur de texte pour ouvrir votre fichier de configuration Apache. L'emplacement varie en fonction de votre 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}, comme l’illustre l'exemple suivant :

    ...    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. En fonction de votre système d’exploitation, exécutez l’une des commandes suivantes :

    Sysvinit, systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES11)

    # /etc/init.d/apache2 reload

    Sysvinit, systèmes basés sur RPM (tels que RHEL 6 et Amazon Linux), à l’exception de SUSE

    # /etc/init.d/httpd reload

    Systemd, systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES12)

    # systemctl reload apache2

    Systèmes basés sur RPM (tels que RHEL 7 et Amazon Linux 2), à l'exception de SUSE

    # systemctl reload httpd
  5. Ouvrez les journaux d'accès de votre serveur Web Apache. L'emplacement varie en fonction de votre configuration.

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

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

Pour ajouter l'en-tête HTTP X-Forwarded-For et configurer les journaux d'accès de votre serveur Web, procédez comme suit :

  1. Utilisez un éditeur de texte pour ouvrir votre fichier de configuration NGINX. L'emplacement est généralement /etc/nginx/nginx.conf.

  2. Dans la section LogFormat, ajoutez $http_x_forwarded_for, comme l’illustre l'exemple suivant :

    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. Pour Amazon Linux 2 ou RHEL, exécutez la commande suivante :

    systemctl reload nginx

    Remarque : la commande permettant de recharger le service NGINX est différente sur les autres systèmes. Les commandes permettant de recharger NGINX sont similaires à celles qui permettent de recharger le service Apache dans la section précédente.

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

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

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

Pour configurer la prise en charge du protocole proxy, procédez comme suit :

  1. Utilisez un éditeur de texte pour ouvrir votre fichier de configuration Apache. L'emplacement varie en fonction de votre configuration, par exemple ; /etc/httpd/conf/httpd.conf pour Amazon Linux et RHEL ou /etc/apache2/apache2.conf pour Ubuntu.

  2. Assurez-vous que la configuration Apache charge le module mod_remoteip (disponible pour Apache version 2.4.31 et versions ultérieures). Pour plus d'informations, consultez le module Apache mod_remoteip sur le site Web d'Apache. Ce module inclut la directive RemoteIPProxyProtocol. Pour plus d'informations, consultez la page Directive RemoteIPProxyProtocol sur le site Web d'Apache. Dans votre fichier de configuration, recherchez une ligne similaire à l'une des suivantes :

    Amazon Linux ou RHEL

    LoadModule remoteip_module modules/mod_remoteip.so

    Ubuntu

    LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
  3. Pour vérifier que le module mod_remoteip se charge, exécutez la commande suivante :

    $ sudo apachectl -t -D DUMP_MODULES | grep -i remoteip
  4. Passez en revue la sortie et vérifiez qu'elle contient une ligne similaire à la suivante :

    remoteip_module (shared)

    Important : si la sortie ne contient pas cette ligne, cela signifie que le module n'est ni inclus ni chargé dans votre configuration. Assurez-vous d'activer le module avant de continuer.

  5. Pour activer la prise en charge du protocole proxy, ajoutez la ligne suivante à votre fichier de configuration Apache :

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

    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. En fonction de votre système d’exploitation, exécutez l’une des commandes suivantes :

    Sysvinit, les systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES11)

    # /etc/init.d/apache2 reload

    Sysvinit, systèmes basés sur RPM (tels que RHEL 6 et Amazon Linux), à l’exception de SUSE

    # /etc/init.d/httpd reload

    Systemd, systèmes basés sur Debian (tels qu'Ubuntu) et SUSE (tels que SLES12)

    # systemctl reload apache2

    Systemd, systèmes basés sur RPM (tels que RHEL 7 et Amazon Linux 2), à l'exception de SUSE

    # systemctl reload httpd
  9. Ouvrez les journaux d'accès au serveur Web Apache. L'emplacement varie en fonction de votre configuration.

  10. Vérifiez que les adresses IP des clients sont désormais enregistrées sous l'en-tête Protocole proxy.

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

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

Pour configurer la prise en charge du protocole proxy, procédez comme suit :

  1. Utilisez un éditeur de texte pour ouvrir le fichier de configuration NGINX. L'emplacement est généralement /etc/nginx/nginx.conf.

  2. Mettez à jour la ligne d’écoute de la section serveur sur proxy_protocol. Mettez à jour la ligne log_format de la section http pour définir le paramètre 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. Pour Amazon Linux 2 ou RHEL, exécutez la commande suivante :

    systemctl reload nginx

    Remarque : la commande permettant de recharger le service NGINX est différente sur les autres systèmes. Les commandes permettant de recharger NGINX sont similaires à celles qui permettent de recharger le service Apache dans la section précédente.

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

  6. Vérifiez que les adresses IP des clients sont désormais enregistrées sous l'en-tête Protocole proxy.

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

AWS OFFICIELA mis à jour il y a 8 mois