Una de las cosas que nadie te cuenta cuando pones en marcha Cloudflare en tus dominios, es que al actuar como Proxy, dejas de ver las IP de tus visitantes en los logs de Apache y solo pasas a ver las IP de Cloudflare, por lo que se hace complicado gestionar bloqueos en el Firewall y otras muchas cosas. La dirección IP original del visitante aparece en un encabezado HTTP adjunto llamado CF-Connecting-IP.
Hasta hace unos años, Cloudflare te ofrecía la posibilidad de instalar un módulo de Apache llamado mod_cloudflare, pero actualmente ya no funciona (no es soportado de manera oficial) y tenemos que utilizar un módulo que suele ver activo por defecto en las instalaciones de Apache: mod_remoteip. Si usabas mod_cloudflare, tienes que desactivarlo.
Si tienes tu Dominio con el DNS en Cloudflare y el Proxy Status de tus registros A y AAA tiene una nube naranja, tienes que configurar lo que te cuento a continuación:
Te voy a contar cómo lo puedes configurar en unos sencillos pasos para que funcione con Cloudflare y puedas ver de nuevo las IP reales de tus visitantes.
- ¡Ojo! Muchos plugins de seguridad que podemos instalar en WordPress, como Wordfence o Patchstack, lo que hacen es consultar directamente la cabecera CF-Connecting-IP para conocer la IP real de tus visitantes. Comprueba su correcta configuración en tu instalación si usas esos complementos. Lo que yo te cuento, sirve para arreglar el tema en el ámbito del servidor.
- ¡Ojo! Si tienes activo un Firewall en tu servidor, acuérdate de meter las IP de Cloudflare en una lista blanca para que no se produzcan bloqueos. Te puede interesar: Cómo evitar que CSF bloquee IPs de Cloudflare.
Todo esto que te voy a contar lo he probado en un servidor Rocky Linux 9 con una instalación LAMP. Sirve exactamente igual para Alma Linux o CentOS.
- Te puede interesar: Cómo bloquear Bots Maliciosos utilizando User Agents y Cloudflare o Cómo activar HTTP/2 en Apache (Rocky Linux).
1.-Compruebas que el módulo mod_remoteip está activo en Apache
sudo httpd -M | grep remoteip
El resultado te tienes que dar algo así: remoteip_module (shared)
¿No está activo? Puedes activarlo de dos maneras diferentes.
Lo activas añadiendo lo siguiente:
#Editamos el archivo de configuración de Apache
sudo vi /etc/httpd/conf/httpd.conf
#Ponemos la siguiente linea
LoadModule remoteip_module modules/mod_remoteip.so
También puedes navegar a /ect/httpd/conf.modules.d y editar:
sudo vi /ect/httpd/conf.modules.d/00-base.conf
Deberías de comprobar que la línea LoadModule remoteip_module modules/mod_remoteip.so no está comentada. Si está comentada con #, lo quitas y guardas.
2.-Configurar mod_remoteip
Ahora que ya hemos revisado que está activo el módulo, solo tenemos que crear un archivo .conf en el directorio conf.d (verifica que no han cambiado las IP de Cloudflare en https://www.cloudflare.com/ips/):
#Creamos el archivo
sudo vi /etc/httpd/conf.d/remoteip.conf
#Ponemos lo siguiente
# Configurar la cabecera que contiene la IP original del cliente proporcionada por Cloudflare (comprueba las IP en https://www.cloudflare.com/es-es/ips/ cada cierto tiempo)
RemoteIPHeader CF-Connecting-IP
# Definir los proxies de confianza (IPs de Cloudflare)
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
RemoteIPTrustedProxy 103.31.4.0/22
RemoteIPTrustedProxy 104.16.0.0/12
RemoteIPTrustedProxy 108.162.192.0/18
RemoteIPTrustedProxy 131.0.72.0/22
RemoteIPTrustedProxy 141.101.64.0/18
RemoteIPTrustedProxy 162.158.0.0/15
RemoteIPTrustedProxy 172.64.0.0/13
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 188.114.96.0/20
RemoteIPTrustedProxy 190.93.240.0/20
RemoteIPTrustedProxy 197.234.240.0/22
RemoteIPTrustedProxy 198.41.128.0/17
RemoteIPTrustedProxy 2400:cb00::/32
RemoteIPTrustedProxy 2405:8100::/32
RemoteIPTrustedProxy 2405:b500::/32
RemoteIPTrustedProxy 2606:4700::/32
RemoteIPTrustedProxy 2803:f800::/32
RemoteIPTrustedProxy 2c0f:f248::/32
RemoteIPTrustedProxy 2a06:98c0::/29
Guardamos y salimos del archivo.
¡Ojo! Si te fijas en las instrucciones de configuración que ofrece Cloudflare, también meten RemoteIPHeader CF-Connecting-IP en el archivo 000-default.conf (el archivo de configuración de apache2 en Debian, Ubuntu) además de en remoteip.conf. No hace falta poner esta configuración dos veces. Con que la pongas en el archivo remoteip.conf que hemos creado es suficiente. No tienes que meterlas en la configuración de Apache de cada uno de tus dominios. Mejor tenerlo todo configurado en un único archivo. Es más fácil de mantener en el futuro.
3.-Configurar el formato de los logs
El formato de los logs de Apache cambia un poco: Busca las líneas de LogFormat en httpd.conf y reemplaza %h con %a para que los logs reflejen la IP original del cliente:
#editamos los logs
sudo vi /etc/httpd/conf/httpd.conf
#Buscas lo siguiente y lo cambias (ya he cambiado la LogFormat "%h %l %u %t \"%r\" %>s %b" por %a en el ejemplo inferior
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%a %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
4.-Comprueba que la configuración es correcta y reinicias Apache
sudo apachectl configtest #si todo es correcto saldra: Syntax OK
sudo systemctl restart httpd
Puedes comprobar como han quedado los logs con el cambio después de la instalación de mod_remoteip en:
sudo tail -f /var/log/httpd/access_log
O donde tengas tus logs de acceso a Apache. Verás que aparecen las IP reales de tus visitantes y no las de Cloudflare.