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:
- Activa el módulo mod_remoteip en Apache (a2enmod remoteip)
- Descarga los rangos de IPs actuales del servicio seleccionado
- 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
- 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