Presentación del Proxy Inverso
En este tutorial, explicaré cómo configurar un proxy inverso con Apache en Ubuntu (al adaptar los comandos de instalación de Apache, este tutorial se puede trasladar fácilmente a otras distribuciones).
Antes de entrar en la parte técnica, hagamos un balance de ¿qué es un proxy inverso?
Un proxy inverso es un servidor (web) que se coloca antes del servidor web de destino donde está alojado el servicio web (sitio web).
Cuando las computadoras consultan un servicio Web que utiliza un proxy inverso, no acceden directamente al servidor donde se encuentra la aplicación, la solicitud HTTP llega primero al proxy inverso, que luego realiza la solicitud al servidor de destino.
Es el mismo principio que un servidor proxy que encontramos en las empresas para conectarse a Internet.
Usar un proxy inverso tiene varias ventajas:
- Guardado de dirección IP (v4), los sitios sitio web1 y sitio web2 tendrán la misma dirección IP en Internet, la del proxy inverso.
- Aumentar el nivel de seguridad (Mod Security, Crowdsec, Fail2ban)
- Reduzca la carga en los servidores web con almacenamiento en caché y/o descarga SSL
- Reescribir contenido HTML
- Centralice la gestión de certificados SSL
- …
Para este tutorial utilicé una sola computadora con Ubuntu 22.04, para simular los servidores web donde están alojados los sitios web utilicé Docker.
Instalar Apache2 en Ubuntu
De forma predeterminada, Apache2 está disponible en los repositorios de Ubuntu. Para beneficiarme de la última versión de Apache a partir de una versión más reciente de Apache2, revisaré el repositorio ppa:ondrej/apache2.
El uso del repositorio ppa:ondrej/apache2 no es obligatorio.
Agregue el repositorio ppa:ondrej/apache2:
sudo add-apt-repository ppa:ondrej/apache2
Confirme la adición del depósito presionando la tecla Enter.
Se añade el depósito.
Actualizar lista de paquetes:
sudo apt update
Instalar Apache2:
sudo apt install apache2 -y
Espere mientras instala Apache2 en el servidor:
Apache2 está instalado.
Habilitar proxy inverso en Apache2
De forma predeterminada, Apache2 no se puede configurar como proxy inverso, porque Apache2 se utiliza principalmente como servidor web.
Para que Apache2 pueda usarse como Proxy Inverso, debes activar el módulo proxy_http que se encuentra en la carpeta: /etc/apache2/mods-available.
Para mostrar la lista de módulos Apache2 activos, puede verlos enumerando el contenido de la carpeta /etc/apache2/mods-enabled.
Para activar el mod proxy_http ingresa el siguiente comando:
sudo a2enmod proxy_http
Al habilitar el mod proxy_http, el mod proxy también se habilitó.
Para tener en cuenta los nuevos módulos, debe reiniciar Apache2.
sudo systemctl restart apache2
Si miramos nuevamente en la carpeta /etc/apache2/mods-enabled, podemos ver los dos módulos proxy y proxy_http.
Creando y configurando hosts virtuales
El funcionamiento de virtualhosts es idéntico ya sea que usemos Apache2 como servidor Web o como proxy Inverso, sólo que las instrucciones serán diferentes en el archivo de configuración.
Los archivos virtualhosts se crean primero en la carpeta /etc/apache2/sites-available.
Ir a la carpeta:
cd /etc/apache2/sites-available
Ahora crearemos un archivo para la configuración del sitio Website1:
sudo nano reverse-proxy-website1.conf
Aquí está el contenido del archivo:
La configuración debe adaptarse a su entorno.
Explicaciones de parámetros:
Configuración | Explicación |
---|---|
ServerName | Nombre de dominio asociado con virtualhost |
ProxyPreserveHost | On|Off le permite mantener el encabezado Host al transferir la solicitud al servidor de destino. Si utiliza hosts virtuales en el servidor web de destino, debe dejar este parámetro en Activado. |
ProxyRequests | Off Si se pasa esta directiva, esto permite que Apache2 actúe como Proxy para ir a Internet como Squid. Por razones de seguridad, debe estar desactivado; de lo contrario, es posible utilizar el servicio Apache2 como proxy para falsificar una dirección IP. |
ProxyPass | Le permite hacer coincidir la ruta en la URL con el servidor de destino. Aquí enviamos todas las solicitudes / al servidor web. http://127.0.0.1:20001/ |
ProxyPassReverse | Generalmente encontramos el mismo valor que ProxyPass, esto permite ajustar la URL en el encabezado HTTP |
Ahora que la configuración del virtualhost está completa, crearemos un enlace simbólico en la carpeta /etc/apache2/sites-enabled para activar la configuración.
sudo ln -s /etc/apache2/sites-available/reverse-proxy-website1.conf /etc/apache2/sites-enabled/
Antes de recargar la configuración, probaremos la configuración para asegurarnos de que no haya errores de bloqueo:
apachectl configtest
Si la sintaxis es correcta, puede volver a cargar la configuración:
sudo systemctl reload apache2
Ahora podremos probar la configuración, antes de hacer una prueba, asegúrese de que el dominio (url) apunte al proxy inverso y no al servidor web de destino. Una vez realizada esta verificación, al iniciar un navegador se accedió a la URL del servidor virtual.
Podemos asegurar el paso a través del proxy inverso Apache2 mirando los registros ubicados en /var/log/apache2/other_vhosts_access.log
sudo tail -f /var/log/apache2/other_vhosts_access.log
No voy a entrar en detalles, solo poner las capturas, pero voy a hacer lo mismo para el sitio Website2.
En los registros puedo validar el paso por el proxy inverso.
Para una mejor legibilidad de los registros, es posible separarlos en archivos diferentes para cada host virtual.
En la configuración del virtualhost, agregaremos los parámetros LogLevel, ErrorLog y CustomLog.
Vuelva a cargar la configuración para tener en cuenta los cambios:
sudo systemctl reload apache2.
En la carpeta /var/log/apache2, podemos ver los archivos:
Los registros de navegación ahora se guardan en el archivo dedicado al host virtual:
Ahora ya sabe cómo configurar Apache como proxy inverso para proteger sus servidores web.