Tunelizar con SSH

De Wikillano

Ejemplo 1

Image:Ssh.jpg

Tenemos una máquina destino con un servidor web, ftp etc... pero no podemos acceder a ninguno de esos puertos ya que tenemos un firewall que esta bloqueando el trafico menos el puerto 22 de SSH.

para poder acceder desde nuestra máquina origen a los puertos del pc destino debemos tunelizar el trafico por el puerto 22 mediante SSH.

ssh -N -L 2121:localhost:21 usuario@destino
-L 2121:localhost:21

Del puerto local 2121 (cualquier puerto)de la máquina origen al 21 de la máquina destino.

localhost

Ponemos localhost ya que la máquina destino es la misma a la cual le realizamos el tunel.

usuario@destino

usuario y máquina, la máquina que se pondría aquí es la que hace de puente, en este caso es la misma máquina, la destino.

-N

Esto nos sirve para que ssh no entre en la shell de destino

En este ejemplo el puerto 2121 de la máquina origen es ahora el 21 de la destino, ahora pòdriamos hacer ftp ip_destino 2121 y llegariamos al 21 donde tenemos escuchando el demonio FTP.

Ejemplo 2

Image:Ssh2.jpg

Imaginemos que desde la máquina origen no podemos acceder a la destino.

origen ——-/——–> destino

En cambio la máquina puente si puede acceder a ella.

Si quisieramos entrar al puerto 80 de la máquina destino, desde origen no podriamos, pero si podemos hacerlo a través de la máquina puente la cual si tiene acceso. origen ————–>puente—————>destino

ssh -L 8080:destino:80 david@puente cat -

En este caso lo que hacemos es que nuestro puerto local 8080 sea el puerto 80 de la máquina destino pasando por la máquina puente, todo por el canal SSH. Esta claro que es necesario tener usuario en cada una de las máquinas ya que si no no podriamos autentificarnos y conectarnos para realizar el tunel.

Ejemplo 3

Tunel Inverso

Si, es lo que parece, gracias al tunel inverso podemos abrir un puerto en el servidor destino que apunte donde queremos por ejemplo a google o a nuestra máquina.

Image:ssh3.jpg


Ejemplo:

Imaginemos que tenemos un pc (origen) con Apache en la red corporativa el cual no tiene contacto con Internet, pero desde Internet si que tenemos acceso a uno que está en la red DMZ (Destino), el problema es que queremos que desde fuera se vea la web que tenemos en el servidor origen, gracias al tunel inverso podemos crear un puerto en el servidor Destino para que a traves del tunel ssh por el puerto 22 sea redireccionado al puerto 80 del servidor origen.

resumiendo: gracias al tunel inverso podemos crear un puerto :8080 en el servidor con acceso desde internet que sea redireccionado al :80 de nuestro servidor.

IMPORTANTE

es necesario que en el servidor ssh (sshd_config) destino este habilitado por defecto deshabilitado, como es lógico por seguridad...

GatewayPorts yes


ssh -N -R *:8080:localhost:80 root@192.168.1.4
-R

opción para tunel invertido

*:8080

puerto remoto que queremos abrir el "*" significa en todas las interfaces sino lo abrirá en localhost

localhost:80

destino, mi máquina así que localhost (una vez estoy en la máquina que quiero ir, es localhost)

root@192.168.1.4

máquina hacia donde realizamos el tunel inverso (destino)

en versiones antes de la 4 no se puede hacer tunel inverso nada más que a la localhost 127.0.0.1, pera hacerlo es necesario utilizar la opción -g


otro ejemplo:

hacer que el puerto :8080 de la máquina destino redireccione al google

ssh -N -R *:8080:www.google.com:80 root@192.168.1.4
Herramientas personales