Túneles SSH (parte 1)

Durante mucho tiempo utilice GNU/Linux y ssh a diario, pero me tomo tiempo darme cuenta de la utilidad de los tuneles ssh. Es una herramienta super práctica que espero ilustrar su uso con este artículo. A mi cuando me explicaron no entendí para que me iba a servir, pero con unos ejemplos creo que es más fácil entender.

Básicamente un tunel ssh sirve para acceder a un servicio remoto a través de un canal ssh. Así utilizando ssh podríamos hacer cosas como acceder a un servidor smtp que suele estar bloqueado por proveedores de Internet. Se podría compartir un recurso de mi máquina local con ip privado al mundo a través de Internet. En fin se puede hacer muchísimo más que esto y ojalá por ahí comparta alguna otra experiencia interesante.

Redirigir un puerto remoto a mi red local

Para ilustrar esta idea voy poner allgunos ejemplos hipotéticos:

Ejemplo #1: Acceder a un pop3 bloqueado

Supongamos que usted tiene acceso a Internet y el proveedor de Internet tiene bloqueado el puerto 25. Necesita enviar un correo de urgencia, pero no lo puede hacer. Pues bien un tunel ssh es una solución rápida para solucionar este problema (siempre y cuando tenga un servidor donde pueda hacer ssh)

ssh -L 2525:localhost:25 usuario@servidorremoto.com

En esta línea decimos que nos vamos a conectar al servidor servidorremoto.com con el usuario usuario. Una vez que estamos en ese servidor creamos un túnel para redirigir el puerto 25 local del servidor (localhost) en el puerto 2525 local de mi computador de escritorio. En otras palabras el puerto 25 remoto ahora será accesible desde el puerto 2525 local de mi computadora. Así ya no estaremos bloqueados.

Para poder enviar correos, configuramos nuestro smtp como localhost:2525 en nuestro cliente de correo preferido. El puerto 2525 es totalmente arbitrario. En general para hacer esto sin privilegios de administrador se deben usar puertos mayores a 1024.

En este ejemplo asumimos que el servidor de correo es el mismo que el que estamos haciendo ssh, pero esto no es obligatorio. En lugar de localhost podríamos utilizar algo como smtp.otroservidor.com. (ver ejemplo 3)

Para probar que la configuración es correcta podemos usar telnet en nuestro computador de escritorio

telnet localhost 2525
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 servidorremoto.com ESMTP Postfix
telnet localhost 2525Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.220 servidorremoto.com ESMTP Postfix

Ejemplo 2: Acceder a un servidor web con ip privado desde Internet

Supongamos que usted necesita acceder a un servidor web privado en una Intranet desde el Internet. En este caso usted puede acceder como usuario sin privilegios a un servidor con ip pública que puede ver al servidor web de la intranet con ip privada. En una red pequeña, esto podría ser a través del firewall.

Entonces generamos el túnel

ssh -L 8080:10.10.10.30:80 usuario@servidorremoto.com

En este caso el puerto 80 del servidor 10.10.10.30 estará accesible en máquina local en el puerto 8080.

Para probar abrimos un navegador web con la url http://localhost:8080

Ejemplo 3: comparta su conexión con otras máquinas en la red.

En los 2 ejemplos anteriores creamos los tuneles ssh accesibles solo desde mi computador personal. Ahora bien, podríamos compartir los tuneles para la red local en la que me encuentro.

En el primer ejemplo esto sería útil si mi amigo que no tiene acceso a un servidor ssh necesita enviar un correo. Por ejemplo:

ssh -L 192.168.1.45:2525:smtp.remoto.com:25 usuario@servidorremoto.com

En este caso ingresamos con el usuario usuario al servidor servidorremoto.com. Desde servidor nos conectamos al servidor smtp.remoto.com al puerto 25 y lo hacemos accesible en nuestro ip local 192.168.1.45 en el puerto 2525.

Su amigo tendrá que poner en su configuración de smtp: 192.168.1.45:2525. Si tiene acceso de root en su máquina local podría configurar el puerto 25 para que su amigo no tenga que ver como cambiar de puerto en su cliente de correo.

En el caso del servidor web (ejemplo 2), usted puede compartir a su amigo el acceso al servidor de la intranet.

ssh 192.168.1.45:8080:10.10.10.30:80 usuario@servidorremoto.com

Listo ahora su amigo podrá poner en su navegador web http://192.168.1.45:8080

En la próxima entrega voy a explicar como hacer accesible un puerto local de mi computador de escritorio desde el Internet.

Artículos relacionados

  • No existen artículos relacionados

Publicado por

Rafael Bonifaz

#SoftwareLibre #criptografía y #privacidad

3 comentarios sobre “Túneles SSH (parte 1)”

  1. Hola mi caso es el ejemplo #2
    Yo tengo en la oficina un servidor con 2 tarjetas de red: publica y privada, y tengo un servidor web con ip privada.
    Lo que yo quiero hacer es un tunel con ssh que me permita desde el navegador de internet fuera de la oficina navegar por el servidor web que tiene ip privada haciendo esto: http://[servidor_con_ip_publica]:[puerto_asignado]
    El resultado me deberia mostrar el contenido del servidor web con ip publica como si hiciera lo siguiente: http://[servidor_web_con_ip_privada]

    Le agradezco de corazon que me colabore, he leido su articulo, muy interesante pero no me quiere funcionar el tunel

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.