Túneles SSH (parte 2)

En el artículo anterior expliqué como usar un tunel ssh para acceder a un servicio remoto  que no es accesible en mi computador, pero sí es accesible desde un servidor al cual puedo ingresar. Ahora aprenderemos a hacer lo opuesto. Vamos a compartir servicios de mi red interna o mi computadora en otra red. Lo más probable es que sea el Internet. Al igual que el artículo anterior, vamos a explicar esta utilidad con ejemplos.

Ejemplo #1: Acceder con ssh a computador con ip privado

Vamos a suponer el siguiente caso práctico. Mi mamá es una usuaria de GNU/Linux y tiene algún problema en su computador. Ella tiene su computadora en la casa y no tiene ip pública ni la menor idea de lo que es un ip. Su hijo tiene algo de experiencia le puede ayudar. Para esto con mucha paciencia le va a decir» mami vaya a accesorios terminal y escribe lo siguiente:

ssh -R *:8080:localhost:22 usuarioremoto@servidorremoto.com

Mi mamá no tiene porque entender este comando, pero ustedes sí. El * quiere decir que vamos a ser accesibles desde cualquier ip que tenga mi servidor remoto. El 8080 es el puerto que utilizaremos en el servidor remoto y localhost:22 quiere decir que vamos a hacer accesible el puerto 22 de mi máquina local. La segunda parte del comando quiere decir a que servidor ingresamos y con que usuario.
En otras palabras mi mamá esta ingresando a mi servidor y publicando el puerto 22 de su computador en el puerto 8080. Obviamente sin tener la menor idea de lo que esta haciendo.
Ahora para yo ingresar al computador de mi mamá simplemente hago ssh al puerto 8080 en el servidor remoto con el usuario local del computador de mi mamá.

ssh -p 8080 usuario@servidorremoto.com

Para que esto funcione necesitamos poder acceder como root al servidor por lo menos una vez y/o ser amigo de una persona que tenga acceso a root. Es necesario modificar el archivo de configuración del servidor ssh: /etc/ssh/sshd_config y añadir la siguiente línea:

GatewayPorts yes

Luego reiniciamos ssh

/etc/init.d/ssh restart

Ahora sí debe funcionar.
Si se fijan bien lo que estamos haciendo hay una falla de seguridad. Si mucha gente puede hacer ssh a mi servidor remoto, entonces podrían estar utilizando varios puertos de mi servidor para fines que desconozco.
La buena noticia, es que sumando los conocimientos adquiridos aquí con el primer ejemplo de túneles ssh podemos obtener el mismo resultado.

Ejemplo #2: Acceder con ssh a computador con ip privado sin necesidad de root en el servidor

Por defecto la siguiente línea no va a funcionar si no editamos el archivo de configuración del ejemplo anterior.

ssh -R *:8080:localhost:22 usuarioremoto@servidorremoto.com

El * quiere decir escuchar en cualquier IP. SSH por seguridad viene configurado para que solo podamos redirigir al ip  local de nuestro servidor.
Entonces lo que haremos en este ejemplo  es los siguiente. Mi mamá redirecciona su puerto local de ssh (22) al 8080 de mi servidor. Luego yo redirecciono el puerto 8080 de mi servidor al 9090 de mi máquina local. Para termina hago ssh en mi máquina local
Manos a la obra. Mi mamá debería escribir lo siguiente:

ssh -R 8080:localhost:22 mama@servidorremoto.com

En este caso ya no usamos el * ni un ip porque se asume que estamos accediendo a localhost.
Ahora yo desde mi computadora voy a redirigir el puerto 8080 del servidor remoto (accesible solamente desde el mismo) al puerto 9090 en mi máquina personal.

ssh -L 9090:localhost:8080 rafael@servidorremoto.com

Luego en otro terminal en mi computador hago ssh al puerto 9090 de localhost con el usuario del computador de mi mamá.

ssh -p 9090 usuariomama@locahost

Un poco más complicado que el anterior, pero mucho más accesible y seguro.

Conclusión

Este ejemplo talvez no todos los tengan, pero podría ser una forma muy útil de tener soporte. Por ejemplo Juan es un administrador novato que da soporte y tiene problemas. Requiere la ayuda de Pedro que esta en otra localidad. Bajo este mismo principio Pedro podría dar soporte a Juan.

También es importante notar que en este caso estamos redirigiendo solo el puerto de ssh, pero podría ser cualquier puerto. Por ejemplo, estoy trabajando en una aplicación web de manera local en mi computadora. Podría redirigir ese puerto para que sea visible desde la web.

Artículos relacionados

  • No existen artículos relacionados

Publicado por

Rafael Bonifaz

#SoftwareLibre #criptografía y #privacidad

Un comentario sobre “Túneles SSH (parte 2)”

  1. Hola,
    Muchas gracias por dedicar tiempo en la realización de estas entradas, me ha funcionado perfectamente todo lo que has explicado y han servido para mi aprendizaje sobre SSH.
    Bueno, pues nada, solamente queria expresarte mi agradecimiento y esperando que publiques mas articulos interesantes.

    Un Saludo

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.