PHP / Intermedio / 5 min
Restaurar la IP real del visitante tras Cloudflare
Recupera la IP real de tus visitantes en WordPress detras de Cloudflare, con validacion de rangos anti-spoofing.
Detrás de Cloudflare, WordPress registra la IP de Cloudflare en lugar de la del visitante: tus comentarios, logs y plugins de seguridad ven a todos como la misma dirección. Cloudflare envía la IP real en la cabecera CF-Connecting-IP. Este snippet la restaura en REMOTE_ADDR, pero solo si la petición viene de un rango real de Cloudflare, para que nadie pueda falsear su IP enviando la cabecera a mano.
Guía de Implementación Paso a Paso
- Accede a tu servidor por FTP o al editor de archivos de tu hosting.
- Abre el archivo
wp-config.phpen la raíz de WordPress. - Pega el código de abajo justo antes de la línea
/* That's all, stop editing! */. - Guarda los cambios y recarga el sitio.
- Comprueba en tus comentarios o logs que ahora aparece la IP real del visitante.
// Restaurar IP real del visitante detrás de Cloudflare (con validación anti-spoofing)
if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) {
// Rangos oficiales de Cloudflare (IPv4). Ver: cloudflare.com/ips
$cf_ranges = array(
'173.245.48.0/20', '103.21.244.0/22', '103.22.200.0/22',
'103.31.4.0/22', '141.101.64.0/18', '108.162.192.0/18',
'190.93.240.0/20', '188.114.96.0/20', '197.234.240.0/22',
'198.41.128.0/17', '162.158.0.0/15', '104.16.0.0/13',
'104.24.0.0/14', '172.64.0.0/13', '131.0.72.0/22',
);
$remote = $_SERVER['REMOTE_ADDR'];
$ip_long = ip2long( $remote );
$trusted = false;
foreach ( $cf_ranges as $range ) {
list( $subnet, $bits ) = explode( '/', $range );
$mask = -1 << ( 32 - (int) $bits );
if ( ( $ip_long & $mask ) === ( ip2long( $subnet ) & $mask ) ) {
$trusted = true;
break;
}
}
// Solo confiamos en la cabecera si viene de una IP de Cloudflare
if ( $trusted && filter_var( $_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP ) ) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}
}
La validación por rangos es lo que hace este snippet seguro: sin ella, cualquiera podría enviar una cabecera CF-Connecting-IP falsa para saltarse baneos por IP. Si Cloudflare añade rangos nuevos, actualiza la lista desde su página oficial de IPs.
