Cómo crear un túnel SSH entre un servidor Linux y un cliente Windows

La idea de construir un túnel SSH es encriptar todas las conexiones (sin importar, por ejemplo, si entrás a una página https o http) y conectarnos a Internet a través de un canal seguro. Este canal “seguro” no es otra cosa que un servidor configurado a tal efecto. Dicho servidor podría encontrarse, por ejemplo, en tu casa.


La “desventaja” de este método es que siempre tenés que tener esta máquina encendida y configurada correctamente para que funcione como servidor SSH pero te permite mejorar sustancialmente la seguridad de tu conexión e incluso evadir las restricciones de conexión impuestas por los administradores de la red (por ejemplo, la de tu trabajo).

Te escucho preguntar: ¿esto realmente me puede servir? Bueno, supongamos el siguiente escenario: estás en un cibercafé o en un restaurant con wifi libre y necesitás realizar una transferencia bancaria u otra operación importante. Por supuesto, siempre se recomienda realizar este tipo de transacciones en un ambiente seguro. Sin embargo, existe una solución: un túnel SSH. De este modo, podemos conectarnos a Internet a través de nuestro servidor “seguro”.

Este método también es útil para evadir las restricciones impuestas en las conexiones de muchos ambientes de trabajo. ¿No podés acceder a Youtube desde el trabajo? Bueno, un túnel SSH puede ser la solución, ya que todas las solicitudes se realizarán a través de tu servidor “seguro”. En otras palabras, al no estar bloqueda la IP de tu servidor seguro (sí, en cambio, la de Youtube) vas a poder “evadir” esta restricción (no poder acceder a Youtube) ya que para el administrador de la red de tu empresa tu máquina sólo estuvo conversando con tu servidor “seguro” y no tiene idea de que a través de él vos en realidad estás navegando por un montón de páginas.

En este tutorial vamos a explicar el caso “típico”: servidor Linux, cliente Windows.

Configurar el servidor Linux

1.- Instalar el servidor SSH. Para ello, abrí un terminal y ejecutá:

En Ubuntu:

sudo apt-get install openssh-server

En Arch:

pacman -S openssh

En Fedora:

yum -y install openssh-server

Listo. Ya vas a poder acceder al (servidor SSH) Ubuntu con un cliente SSH.

2.- Una vez instalado, es útil revisar el archivo de configuración:

sudo nano /etc/ssh/sshd_config

Desde este archivo vas a poder configurar tu servidor SSH a gusto. Mi recomendación es modificar apenas 2 parámetros: port y allowusers.

Para evitar posibles ataques es recomendable cambiar el puerto que utilizará SSH. Por defecto viene con el valor 22, podés elegir otro que más te convenga (a los efectos de este tutorial elegimos el 443 pero puede ser cualquier otro).

El parámetro Allowusers permite restringir el acceso por usuario y, opcionalmente, el anfitrión desde el cual puede conectarse. El siguiente ejemplo restringe el acceso hacia el servidor SSH para que sólo puedan hacerlo los usuarios fulano y mengano desde los anfitriones 10.1.1.1 y 10.2.2.1.

AllowUsers fulano@10.1.1.1 mengano@10.1.1.1 fulano@10.2.2.1 mengano@10.2.2.1

Configurar el router

En caso de que tu servidor se encuentre detrás de un router, es necesario configurar éste último para que no bloquee las conexiones entrantes. Más específicamente, hay que configurar.

Antes de ir al grano y mostrar la configuración necesaria me parece prudente explicar un poco en qué consiste el port-forwarding.

Supongamos que tenés una red local de 3 máquinas, todas ellas detrás de un router. ¿Cómo hace una conexión entrante (de SSH, como sería nuestro caso) para comunicarse con la máquina 1 de nuestra red local? No te olvides que “desde afuera” las 3 máquinas, si bien tienen IPs locales, comparten un único IP público a través del cual se conectan a Internet.

La solución al problema antes mencionado es el port-forwarding. De ese modo, cuando se reciban conexiones entrantes al puerto X de nuestro IP público, el router lo va a derivar a la máquina que corresponda. De ese modo siempre que nos conectemos mediante ese puerto, sabemos que el router nos va a redirigir (de ahí port-forwarding) a la máquina que corresponda. Todo esto, obviamente, hay que configurarlo en el router.

La configuración del port-forwarding varía un poco de acuerdo al router que estés utilizando. Lo más práctico es visitar portforward.com, elegir el modelo de router que estés utilizando y seguir los pasos que allí se describen.

Configurar el cliente Windows

Para conectarnos desde Windows resulta práctico utilizar como cliente SSH la herramienta PuTTY.

1.- El primer paso es descargar PuTTY

Como se puede ver en la página de descargas de PuTTY, hay varias versiones disponibles. Recomiendo descargar la versión portable del programa: putty.exe. La ventaja de elegir la versión portable es que podés llevarla siempre con vos en un pendrive y ejecutar el programa desde cualquier computadora, estés donde estés.

2.- Abrí PuTTY y especificá el IP (público) y el puerto del servidor al que deberá conectarse el cliente SSH. ¿Cómo averiguar el IP público de tu servidor? Fácil, basta con googlear “cuál es mi ip pública” para encontrar miles de páginas que ofrecen este servicio.

3.- En caso de que el “cliente” se encuentre detrás de un proxy, no te olvides de configurarlo correctamente. En caso de que no sepas bien qué datos ingresar, abrí Internet Explorer e ingresá a Herramientas > Conexiones > Configuración de LAN > Avanzadas. Copiá y pegá los datos que aparecen ahí en PuTTY, como se ve en la imagen que aparece a continuación. En algunos casos, es posible que tengas que ingresar un nombre de usuario y contraseña.

4.- Falta introducir los datos del port-forwarding “local” para construir el tunel SSH. Accedé a Conection > SSH > Tunnels. Aquí la idea es la siguiente, tenemos que decirle a PuTTY qué conexiones tiene que “desviar” hacia nuestro servidor seguro. Para ello, debemos elegir un puerto.

Mi recomendación, especialmente si la máquina se encuentra detrás de un proxy es que elijas el puerto 443 ya que es el utilizado por SSL para realizar conexiones seguras, lo que dificultará al administrador la tarea de descubrir lo que estás haciendo. El puerto 8080, en cambio, es el utilizado por HTTP (que no es una conexión “segura”) por lo que un administrador de red experimentado puede llegar a sospechar e incluso es posible que haya bloqueado el puerto para otro tipo de conexiones.

En Destination, volvé a ingresar el IP del servidor seguro, seguido de dos puntos y el puerto que hayas abierto el punto titulado “Configurar el router” y en el archivo ~/.ssh/config. Por ejemplo, 192.243.231.553:443.

Seleccioná Dynamic (lo que creará una conexión SOCKS, que utilizaremos en el punto siguiente) y hacé clic en Add.

5.- Volvé a la pantalla principal de PuTTY, hacé clic en Save y luego en Open. La primera vez que te conectes al servidor va a salir un mensaje de alerta como el que aparece a continuación:

6.- Luego, te pedirá el nombre de usuario y contraseña con acceso al servidor.

Si todo fue bien, una vez realizado el login, deberías ver algo como lo que se ve a continuación…

7.- Finalmente, sin cerrar PuTTY, abrí y configurá Firefox (o tu explorador favorito) para que se conecte a Internet a través de PuTTY.


12 comentarios

  1. una pregunta en el paso 6 cual usurio y cual contaseña debo poner

  2.   jose dijo

    excelente, probare configurarlo con el de mi casa

  3.   Al dijo

    para acceder a internet desde mi casa:
    conexion de acceso telefonico por modem 56k,
    ejecuto un fichero .bat que tiene esta configuracion:
    @Echo Off
    C:
    Cd C:\Windows
    putty -N -C -D 1080 -P 443 -ssh user@00.00.000.000 -pw pass
    Exit
    y que esta relacionado con el putty el cual esta configurado de esta
    forma: en options controlling proxy usage lo pongo en http, en proxy
    hostname pongo mi proxy y el puerto 3128 y en username and password
    pongo mi datos dejando todo lo demas sin tocar y salvando esta
    configuracion una priemra vez como default settings
    y para poder usar mozilla, yahoo messenger, etc, tengo que proxificar
    las aplicaciones con el proxifier version 3 configurado de esta forma:
    en proxy server con la direccion 127.0.0.1 puerto 1080 sock version 5,
    en proxification rules agrego la aplicacion putty y en actions le pongo
    direct, para que todos los programas salgan a traves de este.
    necesito saber como puedo lograrlo en mi telefono con android que
    conecto a mi pc a traves del connectify y este comparte mi conecxion de
    acceso telefonico. necesito tutorial y apks que me resuelvan este
    dilema. saludos y gracias de antemano

  4.   Clint Eastwood dijo

    Faltó explicar cómo el servidor SSH va mágicamente a atender los pedidos HTTP que el cliente haga…flojito el tutorial…

    1.    Errol Flynn dijo

      Equivocado Clint Eastwood.

      Con lo explicado en el tutorial, “mágicamente”, funciona!.

      Para nada flojito, mas bien diría justo y concreto.

      Muy bien explicado para los no experimentados.

      Saludos

      1.    usemoslinux dijo

        Qué bueno que te haya servido! Un abrazo! Pablo.

  5.   DumasLinux dijo

    Funciona muy bien.

    Como continuación, túnel SSH con WinSCP:

    http://www.sysadmit.com/2014/05/linux-tuneles-ssh-con-winscp.html

  6.   JEAMPIERRE ZAMBRANO-CUEVA dijo

    genial muy bien explicado 5* gracias

  7.   Rodrigo dijo

    Una pregunta…
    ¿Y si lo que quiero es un tunel entre dos maquinas con linux?. Tengo la siguiente situación: En mi trabajo estamos trasteando con un pc, queremos probar un software de video conferencia, por lo que debimos instalar un servidor en pc avandonado. El problema es que al instalar el software (bigbluebutton) la instalación falla… descubrimos que el problema está en que se está bloqueando la descarga de un componente de la instalación (a todo esto no soy informático, soy profesor en constante aprendizaje)…
    Como la Empresa es grande las posibilidades de que nos ayuden desde redes es menos que nula…
    Entonces, estaba pensando en conectar el servidor (ubuntu server) por medio de un tunel ssh con el pc de mi casa (que tiene ubuntu) y luego instalar el software…
    ¿Es posible? ¿Me ayudan?

  8.   Suan dijo

    Hola buen, tengo una consulta, quiero conectarme a una aplicacion que tengo en mi servidor Debian que esta en un maquina virtual, la cual la tengo montada en Windows y quiero acceder desde otra red a esa aplicacion, allguien me guia por favor.

  9.   anony dijo

    Cómo Instalar y Configurar un Servidor SSH
    https://www.youtube.com/watch?v=iY536vDtNdQ

  10.   Tosko dijo

    Hola buenas, tengo una cuestión que me está fastidiando bastante y he decidido pasar a consultar a la comunidad.. pues aquí estoy, a ver si me podéis ayudar.. Soy “nuevo” en el mundo de la virtualización, linux.

    El caso es el siguiente he instalado una máquina virtual con linux server 14.04.5 LTS, he configurado la red en Vbox como “adaptador puente” seleccionando mi adaptador de red. Una vez dentro de mi servidor, he instalado varias cosillas, es decir, tengo acceso a internet.. entre esas cosillas he instalado el servicio SSH, dejando por defecto el puerto 22 y el servicio ftp “vsftpd”.

    Al consultar el comando “ifconfig” me responde:
    Link encap:Ethernet direcciónHW 08:00:27:d5:2c:88
    Direc. inet:192.168.0.13 Difus.:192.168.0.255 Másc:255.255.255.0
    ……

    Ahora, para conectarme desde mi ordenador ( Windows 10 ) con Putty a mi servidor virtual mediante ssh ( puerto 22 ) utilizo la ip “192.168.0.13” , y lo mismo con el FTP, pero si quiero que un amigo desde su casa se conecte a mi servidor ya sea mediante SSH o FTP se nos hace imposible utilizando la ip que yo utilizo en mi ordenador.

    Me gustaría saber a que se debe esto, pues la ip “192.168.0.13” creo que funciona a nivel local, es decir, ¿Debo configurar algo más, modificar /etc/network/interfaces, modificar algo en iptables?
    Pues quiero que mi servidor trabaje como una ip pública a la que cualquiera se pueda conectar teniendo los accesos..

    Gracias de antemano!

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.