Necesito una solución de proxy inverso para SSH

10

Hola, esta es una situación en la que tengo un servidor en un centro de datos corporativo para un proyecto. Tengo un acceso SSH a esta máquina en el puerto 22. Hay algunas máquinas virtuales que se ejecutan en este servidor y luego, detrás de todo, muchos otros sistemas operativos están funcionando. Ahora, como estoy detrás del firewall de los centros de datos, mi supervisor me preguntó si puedo hacer algo por lo que puedo dar acceso directo a Internet a muchas personas a estas máquinas virtuales. Sé que si se me permitiera obtener tráfico en un puerto que no sea el 22, entonces puedo hacer un reenvío de puerto. Pero como no se me permite esto, ¿qué puede ser una solución en este caso? Las personas a las que les gustaría conectarse pueden ser completamente idiotas. Quienes pueden ser felices simplemente abriendo masilla en sus máquinas o incluso pueden ser filezilla.

No tengo un cortafuegos en mis manos ni ningún otro puerto que no sea 22 abierto y, de hecho, incluso si solicito que no permitan abrir.2 veces, SSH no es algo que mi supervisor quiera.

Enlace
fuente
1
pregunta relacionada con otra gran solución: serverfault.com/questions/361794/…
Kaii
Proxy inverso de SSH github.com/tg123/sshpiper
farmer1992
¡sshpiperd funciona muy bien!
Király István

Respuestas:

5

Debe abrir el túnel ssh desde su computadora al servidor en el centro de datos. Vamos a nombrar esto como "servidor1". Si está utilizando openssh, simplemente puede ejecutar

ssh -L0.0.0.0:8080:localhost:8080 you_username@server1

Esto abrirá la conexión desde su computadora en el puerto 8080 al servidor, puerto 8080, omitiendo el firewall en el medio. Asumiendo que su apache está escuchando en el puerto 8080. El formato de reenvío de puerto está escuchando IP: puerto local: dirección remota: puerto remoto. Por supuesto, para un solo servidor puedes usar también

ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1

Tenga en cuenta que el parámetro localhost en -L es relativo al servidor1. En otras palabras, el servidor está viendo conexiones provenientes de localhost, cuando en realidad esas provienen de su computadora a través de una conexión ssh.

También necesitas parámetro

AllowTcpForwarding yes

en la configuración ssh del servidor (normalmente / etc / ssh / sshd_config).

Después de esto, otros pueden conectarse a su computadora en el puerto 8080 para obtener la conexión a través de Apache Reverse Proxy. Si necesita un proxy general (para que los usuarios puedan elegir la dirección, no solo direcciones específicas en la configuración de Apache), debe instalar squid en el servidor1 y usar el túnel ssh para el puerto de squid.

Olli
fuente
Quiere decir cuando lo haga ssh -L0.0.0.0:8080:localhost:8080 you_username@server1 , si la conexión seguirá atravesando el puerto 22 del firewall (porque si eso no sucede, no puedo hacer nada) y el túnel ssh se establecería entre la máquina local y la máquina remota. en los puertos especificados pero todo el tráfico continuaría (puerto 22) en el firewall.
Bono
Cuando ejecuta el túnel ssh, ese tráfico (del puerto 8080 al puerto 8080) va dentro de la conexión ssh, utilizando el puerto 22. El firewall ve el tráfico al puerto 22, no al 8080.
Olli
Cuando das este comando ssh -L0.0.0.0:8080:remote_server_address:8080 you_username@server1 , quiero saber qué se puede poner como remote_server_address es que la IP de la máquina interna en la que quiero usar server1 como una intermedia. ¿He entendido esto correctamente?
Bono
Bond: sí, eso es correcto. También puede especificar múltiples túneles -L (con diferentes puertos de origen, por supuesto) para abrir conexiones a múltiples máquinas internas. Por ejemplo "-L0.0.0.0: 8080: remote_server1: 80 -L0.0.0.0: 8081: remote_server2: 80 -L0.0.0.0: 8082: remote_server2: 22" (sin comillas).
Olli
Hacer esto sólido requeriría establecer un servidor que actúe como rebote fuera del centro de datos y permitir el tráfico. Por supuesto, el túnel ssh está bien como una solución temporal, pero para algo en producción, recomendaría instalar un proxy inverso real en el rebote y adapte la configuración del firewall para permitir conexiones 8080 solo desde ese rebote. Dicho esto, es más inteligente colocar el proxy inverso como una de las máquinas virtuales dentro del DC. De modo que la conexión debe asegurarse con SSL solo hacia esta máquina.
jmary
0

Puede ser que puedas usar algo como SshMeIn . Es un sistema web de código abierto que hará un túnel ssh a través de firewalls, ni siquiera necesita abrir los puertos.

Belug
fuente