Cómo restablecer las IP originales del visitante
Información general
Cuando el tráfico de tu sitio web se enruta a través de la red de Cloudflare, actuamos como un proxy inverso. Esto permite a Cloudflare acelerar el tiempo de carga de página enrutando los paquetes de manera más eficiente y almacenando en caché los recursos estáticos (imágenes, JavaScript, CSS, etc.). Como resultado, al responder las solicitudes y registrarlas, tu servidor de origen devuelve una dirección IP de Cloudflare.
Por ejemplo, si instalas aplicaciones que dependen de la dirección IP entrante del visitante original, se registra por defecto una dirección IP de Cloudflare. La dirección IP original del visitante aparece en un encabezado HTTP añadido denominado CF-Connecting-IP. Siguiendo nuestras instrucciones del servidor web, puedes registrar la dirección IP original del visitante en tu servidor de origen. Si este encabezado HTTP no está disponible cuando las solicitudes llegan a tu servidor de origen, comprueba tu configuración de Reglas de transformación y Transformaciones administradas.
El siguiente diagrama muestra las diferentes formas en las que se gestionan las direcciones IP con y sin Cloudflare.
mod_remoteip
Información general
Cloudflare ya no actualiza ni admite mod_cloudflare. Sin embargo, si utilizas un servidor web Apache con un sistema operativo como Ubuntu Server 18.04 y Debian 9 Stretch, puedes utilizar mod_remoteip para registrar la dirección IP original de tu visitante.
Como este módulo lo ha creado un tercero, no podemos brindar asistencia técnica para problemas relacionados con el complemento.
Para instalar mod_remoteip en tu servidor web Apache debes hacer lo siguiente:
1. Activa mod_remoteip ejecutando el comando siguiente:
sudo a2enmod remoteip
2. Actualiza la configuración del sitio para incluir RemoteIPHeader CF-Connecting-IP, p. ej. /etc/apache2/sites-available/000-default.conf
ServerAdmin webmaster@localhostDocumentRoot /var/www/htmlServerName remoteip.andy.supportRemoteIPHeader CF-Connecting-IPErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
3. Actualiza la entrada LogFormat combinada en apache.conf
, sustituyendo %h por %a en /etc/apache2/apache2.conf.
Por ejemplo, si tu entrada LogFormat actual tuviera la forma siguiente,
LogFormat "%h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
actualiza LogFormat como se muestra a continuación:
LogFormat "%a %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" combined
4. Define las direcciones proxy de confianza creando /etc/apache2/conf-available/remoteip.conf
especificando el siguiente código y
direcciones IP de Cloudflare:
RemoteIPHeader CF-Connecting-IPRemoteIPTrustedProxy 192.0.2.1 (dirección IP de ejemplo)RemoteIPTrustedProxy 192.0.2.2 (dirección IP de ejemplo)(repite este paso para todas las direcciones IP de Cloudflare que aparecen en [https://www.cloudflare.com/ips/](https://www.cloudflare.com/ips/))
5. Activa la configuración de Apache:
sudo a2enconf remoteipActivar conf remoteip.Para activar la nueva configuración, debes ejecutar:service apache2 reload
6. Prueba la configuración de Apache:
sudo apache2ctl configtestSyntax OK
7. Reinicia Apache:
sudo systemctl restart apache2
mod_cloudflare
Hay dos métodos para instalar mod_cloudflare: descargando la extensión de Apache de Github o añadiendo código a tu servidor web de origen.
Descarga de paquetes o scripts de Github
Si utilizas un servidor web Apache, puedes descargar mod_cloudflare de Github.
Adición de código a tu servidor web de origen
Si no puedes instalar mod_cloudflare, o si no se encuentra disponible un complemento de Cloudflare para tu plataforma del sistema de gestión de contenido para restaurar la dirección IP original de los visitantes, añade este código a tu servidor web de origen en la etiqueta o antes en cualquier página que necesite las direcciones IP originales de los visitantes:
<?php if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];?>
Este comando hará que la dirección IP solo esté disponible para los scripts que la necesiten. No almacena la dirección IP en tus registros de servidor vigentes.
Apache
Para eliminar mod_cloudflare, deberías marcar como comentario la línea de configuración de Apache que carga mod_cloudflare.
Esto varía en función de tu distribución Linux, pero en la mayoría de los casos, si buscas en /etc/apache2
, deberías poder buscar y encontrar la línea.
LoadModule cloudflare_module
Marca como comentario o elimina esta línea y luego reinicia apache. mod_cloudflare debería desaparecer.
Si estás ejecutando Ubuntu o Debian, deberías ver
file/etc/apache2/mods-enabled/cloudflare.load
Elimina este archivo para quitar mod_cloudflare y luego reinicia Apache.
Nginx
Mod_cloudflare se instala modificando
el archivo de configuración de nginx nginx.conf
con ngx_http_realip_module
.
Para eliminar mod_cloudflare debes marcar como comentario o eliminar esta línea y luego reiniciar nginx. mod_cloudflare debería desaparecer_._
Instrucciones del servidor web
Consulta a continuación las instrucciones sobre cómo configurar tu servidor web para que registre las direcciones IP originales de los visitantes en función del tipo de servidor web:
- Verifica que esté instalado:
- Red Hat/Fedora
sudo yum install httpd-devel libtool git
- Debian/Ubuntu
sudo apt-get install apache2-dev libtool git
- Red Hat/Fedora
- Clona lo siguiente para la compilación más reciente de mod_cloudflare:
- Red Hat/Fedora/Debian/Ubuntu:
git clone https://github.com/cloudflare/mod_cloudflare.git; cd mod_cloudflare
- Red Hat/Fedora/Debian/Ubuntu:
- Utiliza la herramienta de extensión de Apache para convertir el archivo .c en un módulo:
- Red Hat/Fedora/Debain/Ubuntu:
apxs -a -i -c mod_cloudflare.c
- Red Hat/Fedora/Debain/Ubuntu:
- Reinicia y verifica que el módulo esté activo:
- Red Hat/Fedora
service httpd restart; httpd -M|grep cloudflare
- Debian/Ubuntu:
sudo apachectl restart; apache2ctl -M|grep cloudflare
- Red Hat/Fedora
- Si el servidor web está detrás de un equilibrador de carga, añade la siguiente línea a tu configuración de Apache (por lo general, httpd.conf) y reemplaza 123.123.123.123 por la dirección IP de tu equilibrador de carga:
IfModule cloudflare_moduleCloudFlareRemoteIPHeader X-Forwarded-ForCloudFlareRemoteIPTrustedProxy **[inserta la dirección IP de tu equilibrador de carga]**DenyAllButCloudFlare/IfModule
Utiliza el módulo NGINX ngx_http_realip_module
y los siguientes parámetros de configuración:
set_real_ip_from 192.0.2.1 (dirección IP de ejemplo)(repite este paso para todas las direcciones IP de Cloudflare especificadas en [https://www.cloudflare.com/ips/](https://www.cloudflare.com/ips/))
# utiliza cualquiera de los dos
real_ip_header CF-Connecting-IP;#real_ip_header X-Forwarded-For;
Esta lista de prefijos debe actualizarse periódicamente. Publicamos la lista completa en Direcciones IP de Cloudflare.
Consulta también: Cloudflare y NGINX.
- Ejecuta el siguiente script para instalar mod_cloudflare como parte de EasyApache:
bash <(curl -s https://raw.githubusercontent.com/cloudflare/mod_cloudflare/master/EasyApache/installer.sh)
- Tras la instalación, deberás volver a compilar tu Apache con el nuevo complemento de mod_cloudflare.
Al usar Railgun (u otro software de proxy inverso, como Varnish) las solicitudes del usuario procederán del servidor Railgun y no de Cloudflare. Puesto que las solicitudes no proceden directamente de Cloudflare, los mod añadidos no restaurarán por defecto las direcciones IP de los visitantes.
- Para solucionarlo, abre tu configuración de Apache. Normalmente se encuentra en
/etc/apache2/apache2.conf
,/etc/httpd/httpd.conf
,/usr/local/apache/conf/httpd.conf
o en otra ubicación según la configuración. Si no estás seguro, pregunta a tu proveedor de alojamiento. - Al final, añade:
CloudflareRemoteIPTrustedProxy railgun_address
Por lo tanto, si tu servidor Railgun está ubicado en 127.0.0.1, tendrá la forma siguiente:CloudflareRemoteIPTrustedProxy 127.0.0.1
- Si tienes más de un servidor para añadir a la lista de proxies de confianza, puedes añadirlos al final:CloudflareRemoteIPTrustedProxy 127.0.0.1 127.0.0.2
Para que Lighttpd reescriba de manera automática la dirección lP del servidor para los registros de acceso y tu aplicación, puedes aplicar una de las dos soluciones que se muestran a continuación.
- Abre tu archivo lighttpd.conf y añade mod_extforward a la lista server.modules. Debe ir después de mod_accesslog para mostrar la dirección IP real en los registros de acceso
- Añade el siguiente fragmento de código en cualquier lugar del archivo lighttpd.conf después de la lista de módulos del servidor y luego reinicia Lighttpd
$HTTP["remoteip"] == "192.2.0.1 (dirección IP de ejemplo)"{extforward.forwarder = ( "all" => "trust" )extforward.headers = ("CF-Connecting-IP")}
(repite este paso para todas las direcciones IP de Cloudflare que aparecen en [https://www.cloudflare.com/ips/](https://www.cloudflare.com/ips/))
- Ve a tu consola de administración web LiteSpeed.
- Activa la opción “Use Client IP in Header in Configuration”.
- Una vez activada, tus registros de acceso mostrarán las direcciones IP correctas, e incluso la variable
$_SERVER['REMOTE_ADDR']
de PHP contendrá la dirección IP real del cliente, en lugar de una dirección IP de Cloudflare, que en sí misma resolverá la mayoría de los problemas que puedes encontrar al activar Cloudflare en los sitios web activados por PHP (como las instalaciones de WordPress o vBulletin).
Para IIS 7 - 8:
Sigue las instrucciones que se encuentran aquí.
Para IIS 8.5 - 10:
A partir de IIS 8.5, el registro personalizado es una opción integrada. Consulta IIS Enhanced Logging (Registro mejorado IIS)
En IIS Manager, haz doble clic en Logging (Registro) en el menú Actions (Acciones) del sitio en el que estés trabajando.
Una vez que se inicie, selecciona el formato W3C y luego haz clic en Select Fields(Seleccionar campos) junto al menú desplegable en la subsección Log File (Archivo de registro).
Haz clic en Add Field (Añadir campo) y añade el encabezado CF-Connecting-IP.
Haz clic en Aceptar. Deberías ver tu nueva entrada reflejada en Campos personalizados. Haz clic en Aplicar cuando estés de nuevo en la ventana Registro.
Si con esto se soluciona, el archivo de registro ahora tendrá un guión bajo:También debes ver el cambio en los campos:
Si el cambio no se refleja de inmediato, reinicia el sitio, luego W3SVC, y por último la instancia completa.Cuando se utiliza el registro mejorado en IIS 8.5+, no se restablece la dirección IP original del visitante a nivel de aplicación.
Para que Tomcat7 restaure automáticamente la dirección IP original del visitante en tus registros de acceso y en tu aplicación, tendrás que añadir %{CF-Connecting-IP}i
a tu esquema de registro.
A modo de ejemplo, puedes añadir el siguiente fragmento de código a tu archivo server.xml
.
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%{CF-Connecting-IP}i - %h %u %t - "%r" - %s - %b - %{CF-RAY}i"/>
Lo que hará que tus registros se visualicen de la siguiente manera:
Visitor IP - Cloudflare IP - [04/Dec/2014:23:18:15 -0500] - "GET / HTTP/1.1" - 200 - 1895 - 193d704b85200296-SJC
Consulta este tutorial de un tercero para ver cómo restaurar la dirección IP original del visitante con Magento y Cloudflare.
De igual modo, Cloudflare no ha escrito esta extensión de Magento, pero a algunos de nuestros clientes les ha resultado útil.
Como este complemento es de un tercero, no podemos brindar asistencia técnica para los problemas relacionados con el complemento.
Para activar la compatibilidad correcta de las direcciones IP al ejecutar la instalación de Invision Power Board 3 en Cloudflare, sigue estas instrucciones:
Inicia sesión en la ACP de la instalación de IPB.
- Haz clic en System.
- En Overview (Descripción), haz clic en Security (Seguridad).
- En Security Center (Centro de seguridad), haz clic en Security Settings (Configuraciones de seguridad).Comprueba que ¿Confías en las direcciones IP que proporcionan los servidores proxy? está en verde.
Descripción de IPB4 de Trust IP addresses provided by proxies? (¿Confías en las direcciones IP que proporcionan los servidores proxy?)
Si tu entorno de red implica que las solicitudes se gestionan a través de un servidor proxy (como una intranet en una oficina o universidad, o en un clúster de servidores con equilibrio de carga), es posible que necesites activar esta configuración para que se utilice la dirección IP correcta. Sin embargo, cuando está activada, un usuario malicioso puede abusar del sistema para proporcionar una dirección IP falsa. En la mayoría de los entornos, esta configuración debe estar desactivada.
La información para restaurar la dirección IP original de los visitantes con Simple Machines (SMF) se puede encontrar en los foros Simple Machines.
Si utilizas un servidor Apache, recomendamos instalar mod_cloudflare para restaurar la dirección IP del visitante en tus registros.
Si no tienes acceso a tu servidor para instalar un mod, puedes modificar el núcleo.
Las versiones más recientes de MyBB incluyen una opción para analizar la dirección IP del usuario.
Admin CP > Configuration > Server and Optimization Options > Scrutinize User's IP address? > Yes > Yes
Como alternativa, puedes instalar el complemento de gestión de Cloudflare disponible para MyBB 1.6.
MyBB 1.6.0, 1.6.1, 1.6.2 o 1.6.3
- Ve a
./inc/functions.php
. - Ve a la línea 2790.
- Reemplaza:
if(isset($_SERVER['REMOTE_ADDR']))
con:if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))
- Luego, reemplaza:
$ip = $_SERVER['REMOTE_ADDR'];
con:$ip = $_SERVER['HTTP_CF_CONNECTING_IP'];
Un miembro del equipo de Vanilla ha escrito un complemento de Cloudflare para Vanilla para restaurar la dirección IP original de los visitantes a los archivos de registro para los sitios autoalojados.
Como este complemento es de un tercero, no podemos brindar asistencia técnica para los problemas relacionados con el complemento.
- Abre
includes/GlobalFunctions.php
. Aproximadamente en la línea 370, cambia lo siguiente:$forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})";
a$forward = "\t(proxied via {$_SERVER['HTTP_CF_CONNECTING_IP']}{$forward})";
- Abre
includes/ProxyTools.php
. Aproximadamente en la línea 79, busca:if ( isset( $_SERVER['REMOTE_ADDR'] ) ){
y reemplázalo por:if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ){
El segundo paso solo se aplica a las versiones MediaWiki 1.18.0 y anteriores. Las versiones más nuevas de MediaWiki han reescrito por completo ProxyTools.php y el siguiente código ya no aparece. - Aproximadamente en la línea 80, busca:
$ipchain = array( IP::canonicalize($_SERVER['REMOTE_ADDR']) );
Guarda y carga en tu servidor web de origen.
Para las versiones en torno a la 1.27.1:
- Ves a la línea 1232 en
GlobalFunctions.php
, cambiaREMOTE_ADDR
aHTTP_CF_CONNECTING_IP
. - A continuación, ves a
WebRequest.php
, en las líneas 1151 a 1159, cambiaREMOTE_ADDR
aHTTP_CF_CONNECTING_IP
.
Un usuario de Xenforo ha creado un complemento para Cloudflare.
Como este complemento es de un tercero, no podemos brindar asistencia técnica para los problemas relacionados con el complemento.
- Abre
library/config.php
. - Al final, añade:
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];}
- Carga y sobrescribe.
Un tercero ha creado un módulo para Cloudflare y PunBB que restaurará la dirección IP original del visitante.
Como este complemento es de un tercero, no podemos brindar asistencia técnica para los problemas relacionados con el complemento.
- Descarga
cherokee-admin
en tu servidor. - Ve a la interfaz de administración de Cherokee en tu navegador web.
- Selecciona el servidor virtual para el dominio al que presta servicio Cloudflare.
- En la pestaña Logging (Registro) para el servidor virtual seleccionado, activa Accept Forwarded IPs (Aceptar IP enviadas).
- En el recuadro Accept from Hosts (Aceptar de los hosts), especifica las direcciones IP de Cloudflare.
Puedes corregir la dirección IP cambiando el campo PHP IP Server Param
en la configuración del servidor Livezilla a HTTP_CF_CONNECTING_IP
.
Para restablecer la dirección IP de los visitantes a DataLife Engine:
- Abre:/engine/inc/include/functions.inc.phpBusca:
$db_ip_split = explode( ".", $_SERVER['REMOTE_ADDR'] );
Cambia a:$db_ip_split = explode(".", $_SERVER['HTTP_CF_CONNECTING_IP'] );
- Busca:
$ip_split = explode( ".", $_SERVER['REMOTE_ADDR'] );
Cambia a:$ip_split = explode(".", $_SERVER['HTTP_CF_CONNECTING_IP'] );
- Abre:/engine/modules/addcomments.phpBusca:
$_SERVER['REMOTE_ADDR'],
Cambia a:$_SERVER['HTTP_CF_CONNECTING_IP'],
- Busca:
$db_ip_split = explode( ".", $_SERVER['REMOTE_ADDR'] );
Cambia a:$db_ip_split = explode( ".", $_SERVER['HTTP_CF_CONNECTING_IP'] );
Un desarrollador externo ha creado una extensión de Cloudflare para TYPO3 que restablecerá la dirección IP original de los visitantes en tus registros. La extensión también te permitirá limpiar tu caché de Cloudflare.
Como este complemento es de un tercero, no podemos brindar asistencia técnica para los problemas relacionados con el complemento.
Si utilizas el panel de control de alojamiento de VestaCP, tanto Nginx como Apache se ejecutan en tu servidor. Las solicitudes se redirigen mediante proxy a través de Nginx antes de dirigirse a Apache.
Debido a este proxy Nginx, en realidad necesitas las instrucciones para configurar Nginx para restituir la verdadera dirección IP de los visitantes. Mod_remoteip para Apache no es necesario a menos que desactives el servidor Nginx para algunas solicitudes. Añadir mod_remoteip a Apache no estará en conflicto con la configuración del servidor Nginx.
Un desarrollador externo ha creado un módulo para restablecer la dirección IP de los visitantes denominado node_cloudflare.
Restauración de la IP original del visitante con HAProxy
Para extraer la dirección IP original del cliente en el encabezado X_FORWARDD_FOR, debes utilizar la siguiente configuración en HAProxy:
- Crea un archivo de texto CF
_ips.lst
que contenga todos los rangos de direcciones IP de https://www.cloudflare.com/en-gb/ips/. - Asegúrate de desactivar la opción
forwardfor
en HAProxy.
Configuración de HAProxy:
acl from_cf src -f /path/to/CF_ips.lst
acl cf_ip_hdr req.hdr(CF-Connecting-IP) -m found
http-request set-header X-Forwarded-For %[req.hdr(CF-Connecting-IP)] if from_cf cf_ip_hdr