Configurar mod_remoteip en Apache para CDN/Proxies (CloudFlare, CloudFront)


#1

Introducción

Cuando un sitio web está detrás de un proxy inverso o CDN como CloudFlare o CloudFront, Apache recibe las conexiones desde las IPs del proxy, no del cliente real. Esto causa varios problemas:

  • Los logs de Apache muestran las IPs del CDN en lugar de las IPs de los visitantes reales
  • Las restricciones por IP (como limit_post_to_ips) no funcionan correctamente
  • Las aplicaciones web no pueden obtener la IP real del cliente

Solución: mod_remoteip

El módulo mod_remoteip de Apache permite extraer la IP real del cliente desde las cabeceras HTTP que envía el proxy/CDN (como X-Forwarded-For o CF-Connecting-IP).

Core-Admin proporciona una forma sencilla de activar y configurar este módulo.

Listar servicios soportados

Para ver qué servicios de proxy/CDN están soportados:

>> crad-ips-ranges.pyc -l

Salida:
Name Description


CloudFlare CloudFlare IP ranges
AWS Aws IP ranges
CloudFront Aws Cloud front IP ranges

Activar mod_remoteip

Para activar mod_remoteip con un servicio específico, utiliza:

>> crad-webhosting-mgr.pyc --enable-remote-ip-header=

Ejemplo con CloudFlare

>> crad-webhosting-mgr.pyc --enable-remote-ip-header=CloudFlare

Salida:

INFO: Enabling mod_remoteip for service: CloudFlare
INFO: Enabling Apache mod_remoteip module…
INFO: mod_remoteip enabled successfully
INFO: Generating remoteip configuration for CloudFlare…
INFO: Writing configuration to /etc/apache2/conf-enabled/remoteip.conf…
INFO: Configuration written successfully
INFO: Restarting Apache2…
INFO: Apache2 restarted successfully
INFO: Operation completed: mod_remoteip enabled and configured for CloudFlare

Ejemplo con CloudFront

>> crad-webhosting-mgr.pyc --enable-remote-ip-header=CloudFront

¿Qué hace este comando?

El comando realiza automáticamente los siguientes pasos:

  1. Activa el módulo mod_remoteip en Apache (a2enmod remoteip)
  2. Descarga los rangos de IPs actuales del servicio seleccionado
  3. Genera la configuración en /etc/apache2/conf-enabled/remoteip.conf con:
    • La cabecera HTTP correcta para cada servicio (ej: CF-Connecting-IP para CloudFlare)
    • Los rangos de IPs de confianza del proxy/CDN
  4. Reinicia Apache para aplicar los cambios

Configuración generada

El archivo /etc/apache2/conf-enabled/remoteip.conf generado tiene este formato:

# Core-Admin generated remoteip configuration for CloudFlare

RemoteIPHeader CF-Connecting-IP
RemoteIPTrustedProxy 173.245.48.0/20
RemoteIPTrustedProxy 103.21.244.0/22
RemoteIPTrustedProxy 103.22.200.0/22
… (más rangos de IPs)

Beneficios

Una vez activado:

  • Logs correctos: Los access logs de Apache mostrarán la IP real del visitante
  • Restricciones por IP funcionales: Las opciones como limit_post_to_ips y limit_web_to_ips funcionarán correctamente
  • Aplicaciones web: PHP y otras aplicaciones recibirán la IP correcta en REMOTE_ADDR
  • Seguridad mejorada: Podrás bloquear o permitir acceso basándote en las IPs reales de los clientes

Notas importantes

  • Ejecuta este comando solo si tu sitio está detrás del CDN/proxy correspondiente
  • Si cambias de proveedor de CDN, vuelve a ejecutar el comando con el nuevo servicio
  • Los rangos de IPs se obtienen en tiempo real desde los proveedores, por lo que siempre estarán actualizados