Comment récupérer l'adresse IP client des requêtes de mes utilisateurs ?

Modifié le  Jeu, 28 Oct., 2021 à 4:12 H

Fasterize sert vos pages web et donc toutes les requêtes à votre origine proviendront des adresses IP de la plateforme Fasterize.



En utilisant un service fonctionnant de type proxy comme Fasterize, les logs des serveurs d'origine afficheront les IPs des machines de Fasterize au lieu des IP Client. Cela rend donc les IP Client anonymes, ce qui empêche la prévention d'activité abusive pour une IP en particulier.


 

X-Forwarded-For et True-Client-IP


Pour obtenir l'adresse IP des utilisateurs sur vos serveurs d'origine, nous avons ajouté deux entêtes HTTP aux requêtes vers votre serveur : X-Forwarded-For ou True-Client-IP.

L'entête X-Forwarded-For est une liste d'adresses IP ayant transféré la requête. La première adresse IP est l'adresse IP du navigateur.


X-Forwarded-For: client, proxy1, proxy2

True-Client-IP: client



Tester la compatibilité de votre serveur


Il est possible d'émuler le branchement de Fasterize en utilisant l'extension chrome ModHeader pour insérer l'entête X-Forwarded-For qui serait envoyé dans les entêtes des requêtes vers votre serveur.


Par exemple, vous pouvez ajouter l'entête suivant X-Forwarded-For: 109.190.109.118 via l'extension et commander un produit sur votre site. Ensuite, il vous suffit de regarder dans les logs de votre serveur et dans le backoffice si l'adresse IP 109.190.109.118 est bien récupérée.

Implémentation sur votre serveur


Voici quelques astuces pour configurer correctement votre serveur web pour récupérer la valeur de l'entête X-Forwarded-For :

  • Apache : nous vous conseillons l'utilisation du module RemoteIP.


Vous pouvez compiler et installer le module avec

apxs -i -a -c mod_remoteip.c


Ensuite, rajouter cette ligne dans votre vhost Apache

RemoteIPHeader True-Client-IP

  • Nginx : nous vous conseillons l'utilisation de RealIP
  • Varnish : la logique du vcl_recv  doit contenir :


if (req.http.x-forwarded-for) {

    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;

} else {

    set req.http.X-Forwarded-For = client.ip;

}



Mise à jour des logs serveurs


Si vous ne souhaitez pas rajouter un module pour Apache ou Nginx, vous pouvez seulement rajouter l'adresse IP cliente dans les logs.


Pour Apache, ouvrez le fichier /etc/httpd/conf/httpd.conf, remplacer la ligne de CustomLog par :

LogFormat "%{True-Client-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy

SetEnvIf True-Client-IP "^.*\..*\..*\..*" forwarded

CustomLog "/usr/local/apache/domlogs/mydomain.com" combined env=!forwarded

CustomLog "/usr/local/apache/domlogs/mydomain.com" proxy env=forwarded


Apache va alors choisir le bon format de logs selon la détection de l'entête True-Client-IP.


Implémentation sur votre CMS


Si vous ne pouvez pas modifier le code de votre serveur, vous pouvez modifier votre CMS pour gérer les proxys :

  • WordPress: utilisez le plugin Proxy Real IP ou Real IP.
  • Magento 1 et 2: Vous devez ajouter la section suivante sur votre local.xml pour correctement interpréter les entêtes True-Client-IP ou X-Forwarded-For dans la balise <global> :


<remote_addr_headers>

<!-- list headers that contain real client IP if webserver is behind a reverse proxy --> <header1>HTTP_TRUE_CLIENT_IP</header1>

<header2>HTTP_X_FORWARDED_FOR</header2>

</remote_addr_headers>


  • PHP: si votre site web ou application est écrite en PHP, la vraie adresse IP des utilisateurs peut être récupérée en utilisant la variable serveur $_SERVER['HTTP_X_FORWARDED_FOR'].
  • HA Proxy: si vous utilisez HA proxy, étant donnée que HA Proxy se positionne entre Fasterize et votre serveur web, il faudra ajouter la ligne capture request header True-Client-IP len, qui récupère l’IP du client qui correspond au champ captured_request_headers du « http log format » par défaut dans la log HA Proxy ( https://www.haproxy.com/documentation/hapee/latest/onepage/#8.2.3 )
    A noter que: « option forwardor » sert seulement à transmettre l’IP du client au serveur web (pour la récupérer dans les logs apache par exemple) 


Blocage IP via .htaccess


Si vous utilisez actuellement un blocage par adresses IP pour un dossier de votre site, il vous suffit de faire la mise à jour suivante :

Order Deny,Allow

Deny from all

Allow from 172.135.135.234

Allow from 172.135.135.235


vers :

Order Deny,Allow

Deny from all

SetEnvIf X-Forwarded-For "^172\.135\.1135\.234" AllowAccess_1

SetEnvIf X-Forwarded-For "^172\.135\.1135\.235" AllowAccess_2

Allow from env=AllowAccess_1

Allow from env=AllowAccess_2


Scénarios utilisant les adresses IP


Voici quelques scénarios pour lesquels vous avez besoin d'utiliser l'adresse IP des utilisateurs sur vos serveurs:

  • Servir du contenu différent en fonction de la localisation des utilisateurs, déterminée par l'adresse IP.
  • Vérifier si les requêtes de session utilisateur proviennent de la même machine. Cette pratique est courante pour les sites web tels que les forums et messageries.
  • Prévenir des abus en bloquant les requêtes quand elles sont nombreuses à provenir d'une même adresse IP.
  • Détecter les fraudes.
  • Analyser les comportements utilisateurs.
  • ...


Si votre site web est concerné par une des situations ci dessus, nous vous recommandons vivement de changer votre serveur d'origine pour exploiter l'en-tête X-Forwarded-For ou True-Client-IP.


Même si votre serveur n'utilise pas actuellement l'adresse IP des utilisateurs, il est possible que la situation change à l'avenir. Pour cette raison, nous vous recommandons de faire ces changements dans tous les cas. Vous n'encourrez aucun risque à faire ces modifications même si vous n'utilisez pas l'adresse IP des utilisateurs à ce jour.

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

C'est super !

Merci pour votre commentaire

Désolé ! Nous n'avons pas pu vous être utile

Merci pour votre commentaire

Dites-nous comment nous pouvons améliorer cet article !

Sélectionner au moins l'une des raisons
La vérification CAPTCHA est requise.

Commentaires envoyés

Nous apprécions vos efforts et nous allons corriger l'article