Dans ce tutoriel, je vais vous expliquer comment avoir l’adresse IP réelle des visiteurs en utilisant les services CloudFlare et un serveur web Nginx.
Ce que je vais vous expliquer dans ce tutoriel est valable quand Nginx est utilisé comme serveur Web frontale ou en tant que reverse proxy.
Par défaut, quand on utilise CloudFlare en mode Proxy, l’adresse IP vue par le serveur Web est l’adresse du serveur CloudFlare qui a été utilisé et donc niveau des logs Nginx, on se retrouve avec les IPs des serveurs CloudFlare.
Cette situation est gênante quand :
- On exploite les logs pour générer des statistiques
- On utilise une solution de protection comme Crowdsec ou Fail2ban, car on bloque le serveur CloudFlare et non « l’attaquant ».
Récupérer l’adresse IP réelle du visiteur
Pour récupérer l’adresse IP du visiteur, nous allons modifier le fichier de configuration /etc/nginx/nginx.conf
.
Commencer par sauvegarder le fichier /etc/nginx/nginx.conf
:
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak001
Maintenant on va créer dans le dossier /etc/nginx un fichier nommer CloudfFare qui contenir les paramètres :
Créer le fichier :
sudo touch /etc/nginx/cloudflare
Éditer le fichier :
sudo nano /etc/nginx/cloudflare
Coller le contenu ci-dessous, qui va permettre de modifier l’IP de CloudFlare par l’IP du visiteur :
#Cloudflare ip addresses
# - IPv4
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 104.16.0.0/12;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
# - IPv6
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;
Maintenant ouvrir le fichier /etc/nginx/nginx.conf
pour indiquer d’inclure le fichier cloudflare
.
sudo nano /etc/nginx/nginx.conf
Dans la section http{ ... }
ajouter :
# Cloudflare Real IP visitors
include /etc/nginx/cloudflare;
Vérifier la configuration de Nginx :
sudo nginx -t
S’il n’y a pas d’erreur redémarrer Nginx pour la prise en compte :
sudo systemctl restart nginx
Vérifier maintenant les logs (access), l’ip réel du visiteur doit être capturée.
Pour récupérer les adresses IP de Cloudflare, elles sont disponibles ici :
- IPv4 : https://www.cloudflare.com/ips-v4
- IPv6 : https://www.cloudflare.com/ips-v6