Enviar conexiones HTTP/S a otro servidor, proxy inverso-inverso

Estoy buscando un software que pueda usar para reenviar todas las conexiones HTTP, similar a un proxy inverso. Sin embargo, a diferencia de un proxy inverso típico, el servidor que reenvía las solicitudes no puede iniciar conexiones con el backend. Básicamente, estoy tratando de transformar de manera segura un servidor que se ejecuta en una red interna en un servidor público.

Esencialmente, esto tendría que funcionar como:

  1. El servidor público escucha una conexión de socket desde el servidor dentro del firewall.
  2. El servidor privado se conecta al servidor público.
  3. El servidor público luego comienza a escuchar solicitudes HTTP en Internet.
  4. Luego, el servidor público multiplexa todas las solicitudes HTTP entrantes a través de la conexión de socket establecida en el paso 2, de modo que el servidor dentro del firewall cree que esas solicitudes le llegaron directamente.

Si no puedo encontrar este software ya implementado, tendré que hacerlo, pero pensé en preguntar aquí primero.

¡Gracias!

Respuestas (1)

Hasta donde yo sé, no hay ningún software que haga esto. El problema aquí es que HTTP no es un protocolo simétrico, tiene expectativas muy claras sobre qué extremo hace qué, por lo que realmente no puede invertir la dirección de conexión de la capa inferior y hacer que siga funcionando.

Es posible que pueda lograr algo similar a lo que desea ejecutando un enlace VPN entre los sistemas público y privado y usando un firewall para restringir las conexiones a través de ese enlace para que solo funcionen en el puerto en el que se ejecuta el servidor web privado. El reenvío de puertos usando un túnel SSH desde el sistema privado al público sería el medio más fácil de hacer esto. Algo como lo siguiente le dará el túnel y el reenvío de puertos:

ssh -R 127.0.0.1:8888:127.0.0.1:80 -N user@public

Y luego puede tener algo como nginx en el sistema público simplemente apuntando 127.0.0.1:8888como el servidor ascendente.

Dejando eso de lado, puede que estés pensando demasiado en esto. Si su sistema público está en una red DMZ aislada adecuada y tiene un enrutador y un firewall remotamente decentes involucrados, puede restringir fácilmente ese sistema público para que solo se conecte al puerto exacto necesario en el sistema interno, lo que le dará bastante exactamente el mismo nivel de seguridad que tendría al hacer lo que está diciendo.

Perdón por la respuesta extremadamente tardía. De acuerdo, es pensarlo demasiado, pero mi empleador dice que debe ser así. El túnel SSH parece satisfacer mis necesidades. ¡Gracias!