solo con SSH: acceso web de túnel inverso a través del proxy ssh SOCKS

15

De vez en cuando tengo que conectarme a un servidor donde el acceso está altamente restringido.
Solo el SSH entrante está permitido por el firewall DMZ.
Las conexiones HTTP salientes están bloqueadas.

Estoy buscando una manera fácil de hacer un túnel de acceso web a través de mi sesión SSH, para poder instalar actualizaciones y software a través de yum / apt-get. Idealmente, me gustaría evitar instalar software / servicios adicionales en el área protegida.

¿Qué haces en tal situación?

SSH tiene la -D <port>opción de proxy SOCKS. Pero desafortunadamente es solo unidireccional de cliente a servidor y no hay una opción inversa.

Kaii
fuente

Respuestas:

26

Finalmente logré lograr esto sshsolo con :

  1. iniciar un proxy SOCKS local en su máquina cliente (usando ssh -D)
  2. conéctese al servidor remoto y configure un reenvío de puerto inverso ( ssh -R) a su proxy SOCKS local
  3. configurar el software del servidor para usar el proxy reenviado

1. Inicie proxy de calcetines locales en segundo plano

Conéctese a localhost a través de SSH y abra el proxy SOCKS en el puerto 54321.

$ ssh -f -N -D 54321 localhost

-f ejecuta SSH en segundo plano.

Nota: Si cierra la terminal donde inició el comando, el proceso de proxy se eliminará. ¡Recuerde también limpiar después de usted mismo ya sea cerrando la ventana del terminal cuando haya terminado o matando el proceso usted mismo!

2. conéctese al servidor remoto y configure el reenvío de puerto inverso

Enlace el puerto remoto 6666 al puerto local 54321. Esto hace que su proxy de calcetines locales esté disponible para el sitio remoto en el puerto 6666.

$ ssh root@target -R6666:localhost:54321

3. Configure el software del servidor para usar el proxy reenviado

Simplemente configure yum, apt, curl, wget o cualquier otra herramienta que admita SOCKS para usar el proxy 127.0.0.1:6666.

Voilá! Feliz túnel!


4. opcional: configure el software del servidor para usar el proxy reenviado

Descubrí que la instalación proxychainsen el servidor de destino facilita mucho las cosas.

Permite que cualquier software use el proxy SOCKS (incluso telnet), mediante un LD_PRELOADtruco para redirigir las solicitudes TCP y DNS de comandos arbitrarios a un proxy.

Configuración /etc/proxychains.confpara usar el proxy de calcetines reenviados:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

Herramientas arbitrarias de túnel (que usan TCP) con proxychains:

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update
Kaii
fuente
3

Las versiones más nuevas de SSH permiten utilizar la opción muy simple de ssh-R <[bind_address:]port>. Usar solo el puerto en el host y tal vez la dirección de enlace, pero no especificar el puerto del lado del cliente creará un proxy SOCKS inverso.

Esto también se indica en las páginas de manual de las nuevas versiones de SSH:

[...] si no se especificó un destino explícito, ssh actuará como un proxy SOCKS 4/5 y reenviará las conexiones a los destinos solicitados por el cliente SOCKS remoto.

Puede probar esto con curl conectándose a un simple "dame mi IP" -API como http://ifconfig.io .

$ curl ifconfig.io

vs

$ curl --socks5 localhost:<PORT> ifconfig.io

Richard Metzler
fuente
2
Sería útil mencionar en qué número de versión se introdujo esa característica.
kasperd
mucho más simple, gracias!
Kaii
1
@kasperd: OpenSSH 7.6 , lanzado el 03/10/2017. Verifique el tercer punto bajo Nuevas características
MestreLion