Home Security Crear un túnel ssh con PuTTY, o como saltarse el proxy del trabajo ;-)

Crear un túnel ssh con PuTTY, o como saltarse el proxy del trabajo ;-)

by José Luis Sánchez Borque

Mediante los túneles SSH podemos asegurar casi todo tipo de protocolos, al conectarnos a una red insegura, como puede ser la red WiFi de un hotel, restaurante o las típicas redes públicas que algunos ayuntamientos, universidades ofrecen de forma gratuita, estamos expuesto a diferentes ataques por parte de otros usuarios conectados a la misma red.

Tan solo tenemos que imaginarnos que estamos en un lugar público, como por ejemplo puede ser la cafetería de un aeropuerto, y nos queremos a conectar a una página web a través de nuestro navegador.

En la cafetería del aeropuerto como podéis imaginar no estaremos solos. Como se puede ver en la imagen habrán multitud de usuarios conectados a la misma red LAN que nosotros y como podéis imaginar esto es un problema de seguridad importante.

Algunos de los ataques que podemos sufrir por parte de los integrantes de la red son por ejemplo:

  1. Esnifar el tráfico que generamos
  2. Un ataque Man in the Middle

Ventajas sobre la utilidad de un túnel ssh

  1. Buena solución en caso que estemos en una red local no segura
  2. Garantiza nuestra confidenciabilidad, ya que nadie podrá conocer las páginas Web que estamos visitando
  3. Garantiza la integridad de los datos transmitidos y recibidos, ya que la probabilidad que alguien los pueda modificar es muy baja
  4. Sirven para vulnerar ciertas restricciones impuestas por nuestro ISP, PROXIES y FIREWALLS. Por ejemplo en el trabajo…
  5. Buena solución para fortifizar la comunicación de protocolos débiles tal como http, smtp, ftp, etc
  6. El montaje de un túnel SSH propio es mucho más sencillo que montar una VPN

Limitaciones de los túneles ssh

  1. En la comunicación entre cliente y servidor existen ciertos tramos en el que la información viaja sin encriptar. Por ejemplo, el tramo que va desde el servidor ssh hasta el servidor Web al que accedemos.
  2. Hay que configurar aplicación por aplicación. La misma configuración no sirve para todas.

Vamos a la parte práctica

Sobre el esquema de la figura anterior, lo primera será tener un servidor ssh disponible. En nuestro caso hemos elegido un servidor Ubuntu 16.04 LTS Server para la máquina Servidor SSH

Para instalar el servidor ssh y el cliente lo realizamos con el siguiente comando

sudo apt-get install openssh-server openssh-client

Podemos ver con la órden service ssh status que el servicio está arrancado

root@ubuntu:~# service ssh status
● ssh.service - OpenBSD Secure Shell server
 Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enab
 Active: active (running) since dom 2017-11-26 19:34:01 CET; 2h 52min ago
 Main PID: 2858 (sshd)
 Tasks: 1
 Memory: 1.5M
 CPU: 51ms
 CGroup: /system.slice/ssh.service
 └─2858 /usr/sbin/sshd -D

Podemos ver también que el puerto está en LISTENING con el comando netstat

root@ubuntu:~# netstat -putona | grep :22

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2858/sshd off (0.00/0/0)

Una vez instalado el servidor será plenamente funcional. En principio podríamos entrar dentro del archivo de configuración del servidor para modificar ciertos parámetros introduciendo el siguiente comando en la terminal:

sudo gedit /etc/ssh/sshd_config

La configuración estandard funcionará adecuadamente para el fin que nosotros necesitamos. Ahora bien, algún parámetro que podría ser interesante son los siguientes.

AllowTcpForwarding yes
GatewayPorts yes
TCPKeepAlive yes

Estableceremos también que nuestro servidor SSH actúe como enrutador. Para ello lo activaremos de forma permanente accediendo al siguiente fichero:

root@ubuntu:~#nano /etc/sysctl.conf

Solo tendremos que poner a 1 el siguiente parámetro: net.ipv4.ip_forward = 1

net.ipv4.ip_forward = 1

Para activar los cambios hechos en sysctl.conf ejecutamos el siguiente comando:

root@ubuntu:~#sysctl -p /etc/sysctl.conf

No olvidemos restaurar el servicio de red:

root@ubuntu:~#service networking restart

Está claro que en un sistema real, nuestro servidor SSH cuelga detras del router de nuestro ISP, así que tendremos que mapear los puertos que pertoquen en nuestro router, además de saber la IP pública.

Una vez instalado el servidor SSH tenemos que hacer que nuestro servidor SSH sea accesible desde el exterior. En el caso que nuestro servidor no sea accesible desde el exterior nosotros no podríamos crear el tunel SSH desde la red NO segura hasta el servidor SSH que tenemos en nuestra casa ( red segura )

Si disponemos de una conexión de Internet con IP Fija, cosa que es poco probable, tan solo tenemos que averiguar nuestra IP Pública. Para ello accedemos a la siguiente página web:

http://www.vermiip.es/

En el caso de disponer de una IP Dinámica para encontrar nuestro servidor SSH tendremos que usar un servicio DNS Dinámico tal y como se explica en el siguiente post:

https://geekland.eu/encontrar-servidor-con-dns-dinamico/

Luego ya tendremos que espabilar para var como podemos mapear el puerto TCP/22 externo de nuestro router a la IP interna del servidor SSH Ubuntu que estamos preparando. Podemos encontrar ayuda en esta página: How To Forward a Port

Vamos a realizar ahora la configuración para Navegar de forma vía http desde la red no segura del trabajo, vía nuestro servidor SSH, ubicado en la red segura de casa.

Datos:
  • IP Pública del Servidor SSH :  80.102.122.102
  • IP PC Trabajo:  192.168.1.10/24

Primero deberíamos ver si el puerto 22 de nuestra casa está correctamente configurado. Para ello bastará con abrir una sesión ssh con la herramienta PuTTY. La podemos descargar desde el siguiente enlace:  http://www.putty.org/

Nos conectamos contra la ip púbica:

Y vemos que nos hemos podido conectar..

Ahora empezamos con la configuración del tunel con PuTTY. Para ello debemos indicar los parámetros adecuados de la contra el servidor, y del túnel:

En la pantalla de sesión establecemos los parámetros de conexión contra la IP pública de nuestro Servidor SSH, y el puerto 22

 

Vamos ahora a la opción de Connection -> SSH -> Tunnels. Debemos especificar un puerto de nuestro Ordenador para establecer un servidor proxy socks. Usaremos en nuestro caso el puerto tcp/23456

Dynamic y  23456: Estamos especificando que se realice un reenvio dinámico de puertos o tunel dinámico. Por lo tanto con este comando estamos indicando que el tunel SSH se establezca a través del puerto local 23456. En el puerto 23456 habrá un servidor proxy socks que escuchará las conexiones del puerto 8081. Cuando el servidor proxy socks detecte una solicitud o conexión en el puerto 8081 enviará el tráfico cifrado a través del tunel SSH que creamos entre la cafetería y nuestra casa. Una vez la petición/información llegue a nuestra casa o servidor SSH, como hemos establecido un tunel dinámico, se redirigirá al sitio de Internet que queremos conectarnos que por ejemplo podría ser Facebook o Twitter.

Nota: Estamos usando el puerto 23456pero se puede usar cualquiera de los puertos no privilegiado que van desde el 1025 al 65535. En el caso de querer usar un puerto privilegiado deberemos hacerlo como root añadiendo sudo al inicio comando para establecer el tunel SSH.

Nota: El servidor local Proxy Socks es quien realmente está enviando el trafico de nuestro ordenador al servidor SSH que está en una red local segura. Por lo tanto la información que reciba el servidor proxy socks a través del cliente, que en este caso es Firefox, debe enviarse con el protocolo Socks. Por lo tanto los clientes como Firefox u otros deberán ser capaces de enviar sus peticiones a través del protocolo socks. En el caso que la aplicación no soporte la comunicación con el protocolo socks no se podrá establecer la conexión. Para aplicaciones que no soporten socks tenemos la opción de usar tsocks en nuestro ordenador. En futuros post comentaremos como usar tsocks.

Le damos al botón de Open para abrir la conexión, y nos validamos con PuTTY en nuestro servidor.

No debemos cerrar la sesión durante todo el rato que deseemos utilizar el túnel

Ahora tendremos que configurar nuestra aplicación para navegar para que utilice el puerto 23456 del servidor proxy socks. En nuestro caso el navegador chrome.

Ahora solo tenemos que navegar……

Podemos ver en el PuTTY abierto contra el servidor SSH los datos de la conexión…

root@ubuntu:~# netstat -putona | grep ":22"
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1411/sshd off (0.00/0/0)
tcp 0 64 80.102.122.102:22 192.168.1.10:50225 ESTABLISHED 2617/sshd: administ on (0,24/0/0)

Alguno se preguntará ….TODO ESTE FOLLÓN PARA NAVEGAR?????   Recuerdo que estamos consiguiendo:

  • Nos hemos saltado las restricciones del proxy de nuestra empresa. Seguramente por Facebook no podíamos navegar.
  • Todo el tráfico que sale de nuestra máquina hasta el servidor SSH de la red segura está cifrado, con todas las ventajas que ya dijimos al inicio del post.

Podemos ver en las imágenes adjuntas, la gran diferencia entre una navegación Normal, es decir, a través del proxy de la empresa, y la otra utilizando el servidor proxy socks que utiliza la conexión ssh. OJO!!

Conexión NO SEGURA

Conexión SEGURA

SOLUCIÓN PARA APLICACIONES QUE NO SOPORTAN SOCKS

Como se ha visto en el post tenemos que configurar cada una de nuestras aplicaciones para que funcione a través del tunel SSH que hemos creado, pero ¿qué pasa en el caso que ciertas aplicaciones que no utilizan socks, o no tengan esa opción?

La solución a este problema se llama tsocks. En futuros post veremos que utilizar tsocks para enviar la totalidad del tráfico entrante y saliente a través de nuestro tunel SSH para la totalidad de aplicaciones instaladas en nuestro ordenador.

También se podía abrir el túnel con el siguiente comando:

ssh -D 23456 -C administrador@80.102.122.102

 

You may also like

8 comments

David November 27, 2017 - 3:54 pm

Gran post, y mas si estas viendo MR.ROBOT 😉

Reply
José Luis Sánchez Borque December 10, 2017 - 7:23 pm

Gracias por el comentario!

Saludos.

Reply
Alfons November 28, 2017 - 4:44 pm

Lástima que en el trabajo no puedas tocar la configuración del navegador… 😉

Reply
José Luis Sánchez Borque December 10, 2017 - 7:22 pm

Bueno…. el firefox si 😉 Y si me apuras aquí te dejo una alternativa http://www.opera.com/es-419/computer/portable

Reply
RPF February 10, 2019 - 4:47 pm

Hola:

Me ha gustado mucho el artículo, enhorabuena 🙂 . Yo publiqué un artículo en mi blog para aprender a navegar de forma segura a través de un túnel SSH con Windows. Dejo la URL por si es útil para otros visitantes.

https://www.raulprietofernandez.net/blog/windows/como-navegar-de-forma-anonima-y-segura-en-windows

Saludos! 😀

Reply
José Luis Sánchez Borque February 25, 2019 - 9:18 pm

Muchas gracias Raúl por tus comentarios.

Saludos

Reply
Rodrigo February 13, 2019 - 8:06 am

Hola amigo muy interesante la explicación,ahora te hago una pregunta cómo puedo hacer eso que explicas de las ssh en un celular con Android ya q no puedo comprar una vps que sería la mejor conección comparado con una ssh ..

Reply
José Luis Sánchez Borque February 25, 2019 - 9:21 pm

Hola Rodrigo,

gracias por tu comentario. Sobre lo que comentas, ruego me des un poco más de información de que es lo que quieres conseguir con tu móvil. Con eso veo de darte una solución

Saludos.

Reply

Leave a Comment