Obtener la IP original de los clientes cuando usas Cloudflare

Ya hemos hablado largo y tendido sobre Cloudflare, una capa extra de seguridad y de cachรฉ para tus pรกginas web.

Eso si, si deseas obtener, por tema de registro o para alguna aplicaciรณn web, la IP de un cliente, verรกs que hay un problema. Al venir todas las peticiones de los servidores de Cloudflare, no sabes la IP real de un cliente. Aquรญ os comentamos cรณmo resolverlo.

En esta pรกgina de Cloudflare viene la soluciรณn para cada servidor web o proxy. Por ejemplo en Apache debemos instalar el mรณdulo mod_cloudflare.

En Nginx podemos usar otro mรณdulo que se llama http_real_ip. Este mรณdulo no se carga por defecto, hay que instalarlo o compilarlo con la opciรณnย --with-http_realip_moduleย . Si ese es tu caso estรกs de enhorabuena. Sรณlo tienes que poner en tu configuraciรณn de nginx:

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;
set_real_ip_from 199.27.128.0/21;
set_real_ip_from 2400:cb00::/32;
set_real_ip_from 2606:4700::/32;
set_real_ip_from 2803:f800::/32;
set_real_ip_from 2405:b500::/32;
set_real_ip_from 2405:8100::/32;
set_real_ip_from 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;

# use any of the following two
real_ip_header CF-Connecting-IP;
#real_ip_header X-Forwarded-For;

Despuรฉs sรณlo tienes que probar la configuraciรณn de nginx y reiniciar si todo estรก bien. Deberรญas ver las IPs originales.

Si no tienes es mรณdulo en nginx, y no te apetece recompilar, puedes hacer un truco. En la configuraciรณn de nginx puedes poner algo como:

location ~ \.php$ {

fastcgi_param REMOTE_ADDR $http_x_real_ip;

#…other rules

}

Esto usarรก ese parรกmetro de http_x_real_ip para coger la ip real que Cloudflare pone en las cabeceras. Pero sรณlo valdrรก para aplicaciones que pasen por fastcgi. Por ejemplo el propio nginx no sabrรก la ip real si no le ponemos un parรกmetro (ver las siguientes lรญneas).

Tambiรฉn puedes usar esta opciรณn para redirigir segรบn la IP real, por ejemplo con:

if ($http_x_real_ip != xxxx.xxxx.xxxx.xxxx) {

ย  ย  ย  ย  ย return 403; ย  ย  ย  ย ย }

Y, si no quieres ponerlo en nginx puedes buscar las cabeceras desde Php con:

if (isset($_SERVER["HTTP_CF_CONNECTING_IP"])) {
  $_SERVER['REMOTE_ADDR'] = $_SERVER["HTTP_CF_CONNECTING_IP"];
}

ยฟCรณmo comprobar que funciona?

Ademรกs de en los logs (que puede ser un follรณn mirarlo), puedes poner un phpInfo en tu servidor (quรญtalo luego). Hay un apartado donde puedes ver el SERVER [“Remote Address”] y las cabeceras que pasa Cloudflare en SERVER [“http_x_real_ip”] yย SERVER [“http_x_forwarded_for”]. Cuando funciona, el campo Remote Address debe ser una de las cabeceras de Cloudflare (http_x_real_ip o la otra segรบn cual uses).

 

1 comentario en ยซObtener la IP original de los clientes cuando usas Cloudflareยป

Deja un comentario

Resumen de nuestra Polรญtica de Privacidad

  • Responsable:ย SmythSys IT Consulting SLNE.
  • Finalidad:ย Gestionar y moderar los comentarios.
  • Legitimaciรณn:ย Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios:ย Tus datos se alojan en los servidores de OVH.
  • Derechos:ย Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la direcciรณn del responsable (en nuestra polรญtica de privacidad).

Time limit is exhausted. Please reload CAPTCHA.