Dirección IP real para Apache, Amazon ELB, CloudFlare (X-Forwarded-For)  

Apache, como todos los servidores web, tiene un sistema de registro en el que almacena información sobre el acceso de los usuarios a nuestras páginas web, en esta información se incluye la dirección IP, una información muy útil para diferentes propósitos. Cn los servicios modernos para el equilibrio...
Publicado el 04/01/2018 a las 17:02

Apache, como todos los servidores web, tiene un sistema de registro en el que almacena información sobre el acceso de los usuarios a nuestras páginas web, en esta información se incluye la dirección IP, una información muy útil para diferentes propósitos.

Con los servicios modernos para el equilibrio del tráfico y la protección DDOS esta información no siempre es precisa y nuestros registros no informan las direcciones IP correctas. En este artículo veremos una técnica para resolver esta limitación de forma rápida y fácil.

Introducción

El servidor Apache en su configuración básica realiza una función muy simple, toma la dirección IP de la persona que hace la solicitud y la almacena en los archivos LOG, pero con los nuevos sistemas de defensa las cosas se han complicado y no es más el visitante que se conecta a nuestro servidor web.

Son una serie de servidores que filtran las solicitudes de los clientes y luego ejecutan a su vez el acceso directo a nuestro servidor (proxy), de esta manera terminamos almacenando las direcciones IP de los servidores proxy y no las direcciones IP de los navegadores.

Solución

Para resolver el problema nos encontramos con un módulo de Apache estándar llamado remoteip, al activar este módulo, configurar el archivo de configuración y modificar el comando de registro de Apache podemos restablecer el correcto funcionamiento de la dirección IP de origen incluso si usamos un servicio como el de Amazon Elastic Load Balancer o CloudFlare.

Creación de configuración: antes de iniciar el módulo, debemos crear un archivo en el directorio /etc/ apache2/mods-available/ llamado remoteip.conf. Puse lo que necesita, en realidad es posible ser más restrictivo, para obtener más información vaya a la documentación oficial del módulo.

<IfModule mod_remoteip.c>
    RemoteIPHeader X-Forwarded-For
</IfModule>

Una vez que se crea el archivo de configuración, verifique si los permisos son correctos. Con Ubuntu utilicé el comando (vi) precedido por sudo y no tuve que hacer ningún otro cambio.

Activación del módulo: el módulo de remoteip ya está instalado con la versión básica, por lo que no es necesario agregar ningún software, al menos en la versión 2.4 comprobé esto, no sé si en versiones anteriores las cosas son diferentes y si el módulo ya existía.

sudo a2enmod remoteip

Una vez que se activa el módulo, los archivos de carga y nuestro archivo de configuración se vincularán al directorio /etc/apache2/mods-enabled/ y se leerán en el próximo inicio de Apache.

Editar formato de registro: Apache puede escribir el registro de una manera personalizada respetando los comandos y las variables que se insertan en la directiva LogFormat, así que busque esta cadena en su configuración y cambie la variable %h con %a.

LogFormat ”%h %l %u %t \”%r\” %>s %b” common // Originale
LogFormat ”%a %l %u %t \”%r\” %>s %b” common // Stringa modificata

Normalmente, la directiva se encuentra en el archivo apache2.conf o en los archivos de configuración del host virtual en el directorio /etc/apache2/sites-available/.

Reinicie Apache: ahora que ha realizado todas las operaciones indicadas es el momento de reiniciar el servidor web y verificar los registros si se especifica la dirección IP correcta.

sudo service apache2 restart

Para cualquier consejo o problema que encuentre en el procedimiento, por favor escriba en los comentarios al final de este artículo y le responderé lo antes posible. Hasta la próxima.

Aviso sobre este articulo

El español no es el mi idioma nativo, traté de escribir con la esperanza de que no haya cometido demasiados errores. Quiero agradecer a Junior por haber corregido algunas cosas, espero que no te molestes si encuentras cualquier inexactitud, voy a mejorar con el tiempo y con los artículos futuros.

Comentarios
Graziano Adrian Reyes Ascencios
Graziano Adrian Reyes Ascencios
Gracias por este artículo, finalmente logré arreglar mi registro de Apache de forma permanente. ¿Cuál es la solución correcta para hacer lo mismo en la programación PHP?
Milagros Herrera Carrera
Milagros Herrera Carrera
Gracias por compartir este artículo, el mundo de la tecnología es tan amplio que empezaremos a conocerlo un poco mas por ti. Muchas gracias y éxitos