Entre los muchos servicios de infraestructura que forman un sistema corporativo unificado se encuentra el Proxy, cuyo principal objetivo es convertirse en un nodo intermedio en la transmisión de tráfico y cumplir con la funcionalidad preestablecida de modificar/detectar conexiones.
Existen dos tipos de soluciones de este tipo: forward-proxy y reverse-proxy, donde el primero redirige el tráfico hacia el exterior a través de un único punto, y el segundo, viceversa, desde el segmento externo al interno. En este artículo, analizaremos la segunda variante de su implementación y configuraremos el servicio para que funcione.
¿Qué es el proxy inverso?
Como mencionamos anteriormente, Reverse Proxy es un nodo intermedio a través del cual pasa el tráfico externo hacia los servidores, respectivamente desde los clientes.

En estos casos, esta solución se debe a la necesidad de equilibrar la carga de los nodos, ya que el procesamiento de los paquetes en sí puede ser bastante pesado, por lo que diferentes enfoques para equilibrarlos pueden reducirlo. También puede ser un nodo para controlar el tráfico que pasa, por ejemplo, un WAF local o un nodo de redireccionamiento a servidores ICAP.
Si no tienes suficientes recursos, puedes realizar acciones. en potentes servidores en la nube. Serverspace Proporciona aislado VPS / VDS Servidores para uso común y virtualizado.

Implementación y configuración
En primer lugar, elijamos un paquete de software que realice dichas funciones de proxy, normalmente los servidores web simples tienen esta funcionalidad, así que usemos el Nginx paquete:

Luego pasamos a la configuración de nuestro servicio por el directorio estándar /etc/nginx, dentro nos interesan dos archivos que son los encargados de la configuración global del servicio y de los hosts virtuales, vayamos al segundo:
cd /etc/nginx/sites-available && nano 000-default.conf
Si el archivo de hosts virtuales tiene un nombre diferente, acceda a ese archivo en particular con nano. Veamos la sintaxis básica de un host virtual, que está determinada por el campo SNI en el paquete de red entrante:
server {
listen ip:port;
server_name domain_name;
root /path/to/site-file;
index /index.html;
..
location / {}
..
}
Rellene los campos básicos con los metadatos de su servidor web, en qué puerto estará disponible su web, qué nombre de dominio se manejará, etc. Tenga en cuenta que el campo de ubicación será el responsable de actuar sobre el paquete que llegó a la ruta especificada. Ahora bien, este es un servidor web normal, para convertirlo en un proxy inverso, debe agregar directivas a la ubicación:
location /date {
proxy_pass http://192.168.1.10:80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

Para entender la diferencia entre reverse-proxy y web server comparemos las directivas de las dos rutas /hello y /cats, en el último caso especificamos la ruta donde residen nuestros datos y en el primero hacemos de proxy de la conexión. Nótese que la directiva proxy_pass nos permite establecer una conexión a un recurso y, como cliente, transmitir paquetes modificándolos con la directiva proxy_set_header.
Cada uno de ellos también tiene su propia funcionalidad:
- HOST especificará los hosts a los que se debe llegar;
- X-Real-IP especificará la dirección real del cliente antes de realizar el proxy;
- X-Forwarded-For especificará a quién hace de proxy;
- X-Forwarded-Proto especificará qué esquema/protocolo utilizar.
Los paquetes modificados se enviarán luego al servidor de origen o al servidor de backend, donde la aplicación web los procesará. Guardemos el archivo y creemos un enlace a la configuración para cargarlo automáticamente:
ln -s /etc/nginx/sites-available/000-default.conf /etc/nginx/sites-enabled/000-default.conf
O bien, reemplaza el nombre del archivo por el tuyo y crea un enlace a la parte habilitada. Después, reinicia nginx o haz que vuelva a leer la configuración:
sudo systemctl restart nginx && sudo systemctl status nginx
Dado que el servidor nginx escucha en todas las interfaces de forma predeterminada, el tráfico que llega al dispositivo se redirigirá a través de un proxy y se enviará al back. Si es necesario finalizar previamente el tráfico SSL, agregue directivas para su procesamiento:
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

Después de eso, el tráfico se transmitirá de forma abierta, donde otras soluciones podrán procesar los paquetes entrantes. ¡También en nuestra base de conocimientos puede encontrar materiales sobre cómo configurar WAF en función de esta solución de proxy inverso!