jueves, 12 de julio de 2018

Qué es un 'Reverse Proxy'



¿Qué diferencia hay entre un proxy y un reverse proxy? ¿Para qué sirve exactamente un reverse proxy? ¿Cuáles son los nombres de los reverse proxy más usados a día de hoy?



Antes de explicar qué es un 'Reverse Proxy', debemos tener claro qué es un proxy 'a secas', es decir, un proxy de reenvío (en inglés forward proxy). Un proxy [de reenvío] es un servidor ubicado entre un PC (o una red de PCs - LAN) e internet. Su función es filtrar las conexiones que ese PC envía hacia una página web antes de que estas lleguen a dicha página web. En entornos empresariales, este sistema es usado, por ejemplo, para bloquear determinado contenido a los trabajadores de la empresa. Los usuarios domésticos, a su vez, suelen usar proxies [de reenvío] para cambiar la IP con la que salen a internet - para evitar bloqueos regionales, evitar baneos en ciertas páginas web, etc.

NOTA: los trabajadores de una empresa también pueden usar proxies [de reenvío] para saltarse las restricciones impuestas por el proxy de su empresa, pero eso ya es otro tema...

Un Reverse Proxy (en español proxy inverso), por su parte, es un servidor ubicado entre internet y los servidores web de una empresa. Es, digamos, el punto de entrada de las peticiones dirigidas hacia las webs de una empresa antes de que estas lleguen propiamente a la web en cuestión.

Digamos que un usuario - ubicado en cualquier parte del mundo - quiere visitar una página web y esta está situada en un servidor ubicado detrás de un reverse proxy. ¿Qué camino siguen las peticiones? El usuario mandará una petición HTTP desde el navegador de su PC hacia el dominio de la web que quiere visitar diciendo "muéstrame la web". En el caso que nos ocupa, el registro DNS de ese dominio apuntará a un reverse proxy en vez de al servidor web final (NOTA: ambos servidores estarán protegidos detrás de un firewall). Este reverse proxy, a su vez, enrutará todas las solicitudes enviadas hacia ese dominio hacia el servidor web final.

Para rizar el rizo, comentar que es una situación normal en el día a día que un PC que sale a internet a través de un forward proxy quiera visitar una web ubicada detrás de un reverse proxy, en cuyo caso el esquema sería el siguiente, desde el Client hasta el Worker:




¿Para qué usar un Reverse Proxy?



Apuntar los dominios de las páginas web hacia un reverse proxy ofrece ciertas ventajas frente a apuntar los dominios web directamente a los servidores web. Las ventajas más notorias son:

Anonimización: si alguien escanea un dominio que apunta a un reverse proxy, obtendrá como respuesta el sistema operativo del reverse proxy y no el del servidor web, así como las versiones de los servicios corriendo en el reverse proxy y no en el servidor web final. Por ejemplo, podemos tener un reverse proxy con Linux que enrute peticiones a máquinas Windows. Si escaneamos un dominio que apunte a ese reverse proxy, el usuario que lo haga no sabrá que el servidor web real corre bajo Windows porque las respuestas del scanner de turno indicarán que es un sistema Linux.

Protección: enlazando con la característica anterior, si un hacker lanza un escaneo hacia un dominio y ve que la máquina donde se aloja ese dominio es Linux - cuando en realidad es Windows - raramente se le ocurrirá lanzar un ataque hacia ese dominio con un exploit orientado a Windows. Con esto, las páginas web cuyos dominios apunten al reverse proxy estarán más protegidas frente a ataques orientados a vulnerabilidades de un sistema específico.

Alta disponibilidad: si sólo usamos un servidor de aplicación y por lo que sea, este queda inservible, el servicio web quedará inmediatamente offline. Si usamos varios servidores de aplicación y uno falla, podemos usar lo que se denomina "balanceo de carga" dentro del reverse proxy, es decir, crear una lista de servidores de aplicación y si uno falla, hacer que el reverse proxy envíe las peticiones a otro de los servidores de la lista que esté activo. De este modo, el servicio web no quedará interrumpido en ningún momento (siempre que no caigan todos los servidores de aplicación de la lista al mismo tiempo).

Caché: para acelerar la conexión hacia una página web, podemos usar la opción de caché de un reverse proxy para hacer que este almacene contenido estático de una página web (imágenes, css, javascript, etc.) de forma temporal y lo sirva él mismo sin necesidad de realizar ninguna conexión hacia los servidores de aplicación. Así se puede mejorar la velocidad de acceso a una página web considerablemente.

Compresión: para servir más rápido el contenido de una página web hacia sus visitantes, se puede comprimir el contenido de dicha web mediante el protocolo gzip de modo que el envío de las respuestas HTTP hacia el navegador del usuario sea menos pesado y, por lo tanto, más rápido.

Descarga SSL: un reverse proxy puede absorver él todas las peticiones HTTPS y realizar él el handshake con el navegador del usuario. Las peticiones se convierten entonces a HTTP y se envían al servidor web. El proceso de convertir peticiones HTTPS a HTTP se llama SSL Termination. Enviando peticiones HTTP al servidor web (en vez de enviar peticiones HTTPS) evitamos que este tenga que realizar él el handshake SSL, lo cual libera recursos de la máquina que pueden ser usados para, por ejemplo, generar contenido PHP más rápidamente (recordemos que el handshake SSL consume un 20% aprox. de CPU).

Administración centralizada de certificados: un reverse proxy nos permite colocar todos los certificados SSL que usemos en nuestras páginas web en un único punto. De esta forma, cuando los certificados vayan a caducar, solo tendremos que renovarlos en un único servidor en vez de tener que ir máquina por máquina subiendo los nuevos archivos.

Liberación de IPs públicas: si cada servidor web tiene asignada una IP pública y tenemos muchos servidores web publicados en internet, el número de IPs públicas usadas se dispara. Si usamos un reverse proxy como sistema de entrada a las páginas web de una empresa, podemos reducir el número de IPs públicas usadas a una sola IP, reduciendo con ello costes, documentación adicional, etc.

Además, un reverse proxy se puede usar para hacer redirects de una URL a otra, hacer rewrites para que un dominio apunte a una ruta específica en otro dominio, etc.


Reverse proxies más usados



Los reverse proxies más usados en el mercado son:

Apache
F5 BIG-IP
HA Proxy
IIS
Lighthttpd
nginx
Squid
Varnish


Conclusión



Pienso que hoy en día debería ser obligatorio usar reverse proxies delante de los servidores web. Solo por el hecho de poder ofrecer alta disponibilidad a un sitio web, ya vale la pena usar un servidor intermedio con una solución de reverse proxy instalada. Si a esto le sumamos la administración centralizada de certificados, la posibilidad de hacer rewrites de URLs, la ocultación de sistemas operativos, etc. lo convierten en una opción muy interesante.

Personalmente, he probado algunos de los reverse proxies mencionados y me decanto por nginx como el mejor de ellos, sobretodo por su facilidad de configuración, por ser open source (también existe una licencia empresarial con soporte y características extras por una tarifa al año) y por la cantidad de documentación que se puede encontrar sobre sus opciones.
0

0 comentarios:

Publicar un comentario