SSH Tunneling: Manual para crear un túnel SSH y navegar seguro

El SSH Tunneling es una técnica que nos permitirá navegar por la web de forma segura, estableciendo un túnel SSH contra un servidor SSH remoto, ya sea configurado en nuestro hogar en un servidor NAS o en nuestro router, o en un servidor VPS remoto. Hoy en RedesZone os vamos a enseñar paso a paso cómo configurar tanto el servidor SSH, como también el cliente SSH para establecer un túnel SSH y navegar seguro por la web.

¿Qué es un túnel SSH y para qué sirve?

Este túnel SSH que vamos a crear únicamente cifra las comunicaciones si configuramos un Proxy en nuestro navegador, o en el programa que nosotros tengamos, en nuestras pruebas hemos usado Mozilla Firefox, pero cualquier navegador es compatible. Este método no cifra los servicios que no permiten configurar un proxy, como Dropbox (instalado en nuestro equipo) u otros programas que necesitan conexión a Internet, pero no tienen un menú para configurar el proxy. Cualquier programa que tenga la posibilidad de configurar un proxy SOCKS vamos a poder reenviar todo su tráfico a través del túnel SSH, y salir a Internet a través de la dirección IP pública que tenga dicho servidor SSH, de esta forma, todo el tráfico desde nuestro equipo hasta el servidor SSH estará cifrado y autenticado, con los algoritmos de cifrado simétrico que use el servidor SSH, aunque normalmente es AES-256-GCM, tal y como ocurre con los servicios de VPN.

Un detalle muy importante, es que, si necesitas cifrar absolutamente todo el tráfico, entonces tendrás que configurar un servidor VPN, ya sea de tipo OpenVPN o WireGuard. El protocolo OpenVPN es ampliamente utilizado en entornos domésticos, sobre todo porque los principales servidores NAS lo incorporan por defecto, e incluso algunos routers como los ASUS también incorporan este protocolo. WireGuard es un protocolo VPN muy nuevo que todavía no está en los principales fabricantes de servidores NAS, como QNAP, Synology o ASUSTOR, sin embargo, sí lo encontraremos en un servidor Linux que nosotros configuremos, e incluso también lo tenemos disponible en sistemas operativos orientados a firewall o router como DD-WRT y pfSense entre otros. Gracias a que WireGuard se encuentra integrado en el Kernel de Linux, obtendremos un rendimiento excelente en términos de velocidad y latencia de la conexión.

Para realizar correctamente el SSH Tunneling, o también conocido como túnel SSH, lo primero que debemos tener en cuenta es que deberemos contar con un servidor SSH accesible desde Internet, si no contamos con un servidor SSH, no podremos conectarnos a él para encapsular y cifrar todo el tráfico. Este servidor SSH puede estar en nuestro servidor NAS, en nuestro router, o directamente en un servidor remoto.

Primero debes configurar el servidor SSH con la directiva de «Permitir TCP forwarding«, si usas OpenSSH, la directiva que debes indicar es:

AllowTcpForwarding

También debes permitir la redirección del tráfico en tu servidor, es decir, debes poner:

sysctl net.ipv4.ip_forward=1

Una vez que tengamos el servidor SSH funcionando, procedemos a configurar el cliente. No obstante, también podríamos configurar este servidor SSH con un cifrado simétrico mejor, haciendo uso de la siguiente directiva:

Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

También podrías mejorar la seguridad incorporando MACs y algoritmos de intercambio de claves seguros, puedes añadir las siguientes directivas a OpenSSH para aumentar la seguridad:

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

Otras medidas de seguridad muy recomendables que podrías hacer, tanto en el servidor SSH como en el cliente SSH, es utilizar claves SSH en lugar de utilizar un nombre de usuario y contraseña. Si utilizamos claves SSH podremos conectarnos directamente con el servidor SSH sin necesidad de introducir ninguna contraseña, además, es mucho más seguro (y cómodo) conectarnos a través de claves SSH que no utilizar la típica autenticación de usuario y contraseña.

Lo primero que debemos hacer es crear las claves SSH desde el ordenador donde nos vamos a conectar, debemos crear las claves y pasárselas al servidor. Para crear claves SSH podemos ejecutar la siguiente orden para crear claves SSH basadas en RSA de 4096 bits, aunque también podrías crear claves SSH basadas en curvas elípticas que nos proporcionarán mayor rapidez a la hora de conectarnos.

ssh-keygen -t rsa -b 4096

Os recomendamos hacerlo con ED25519 que es la más usada y segura:

ssh-keygen -t ed25519

En el asistente de generación de estas claves, nos pondrá donde queremos guardarla, posteriormente tendremos que pasarle la clave al servidor SSH donde nos vayamos a conectar. Si hemos usado PuTTY para generar las claves SSH deberás hacerlo a mano, si estás en un equipo Linux o con WSL de Windows podrás ejecutar este comando:

ssh-copy-id usuario@IP_servidor

Automáticamente la clave pública se copiará y habilitar la autenticación con solo clave pública en el fichero de configuración del servidor SSH:

PubkeyAuthentication yes

Una vez completado este proceso, tendríamos que ser capaces de hacer iniciar de sesión en este equipo sin introducir la contraseña:

ssh usuario@IP

Recordad poner la directiva «PasswordAuthentication no» para no permitir accesos vía usuario y clave, de lo contrario, el servidor SSH admitirá ambas formas.

Configuración del cliente SSH en Windows

El programa que vamos a utilizar es Putty, es un programa Windows, pero en Linux funciona perfectamente utilizando la utilidad WINE (comprobado). No obstante, si usas Linux es mejor utilizar directamente el comando de ssh para realizar esta configuración, es muchísimo más sencillo que en Windows.

Podéis descargar Putty desde su página web oficial. No hace falta instalarlo ya que es un programa Portable, abrimos Putty y tenemos la siguiente pantalla:

Nos vamos a SSH/Tunneling tal y como vemos en la captura. En Source Port ponemos el puerto que vamos a utilizar para el túnel (por ejemplo el 8081), destination lo dejamos en blanco y en las opciones de abajo lo ponemos en Dynamic y en AUTO. Y luego seleccionamos ADD (para añadir la configuración).

A continuación, nos conectamos al servidor SSH normalmente con Putty, en el apartado Session.

Y hacemos la conexión SSH, en la imagen podéis ver el servidor SSH de mi router con Tomato RAF.

No debemos tocar nada más, únicamente dejar la conexión abierta y no cerrar el programa, repito que todo este proceso os sirve en Windows y en Linux con WINE. Ahora procedemos a configurar Firefox.

Configuración del navegador Mozilla Firefox para el Proxy

Vamos a OPCIONES, AVANZADO, RED y pinchamos en CONFIGURACIÓN.

En la siguiente imagen configuramos el uso del Proxy.

Configuración Manual del Proxy, Servidor SOCKS: 127.0.0.1 y el puerto 8081 (el que pusimos anteriormente), elegimos SOCKS v5, tal y como podéis ver en la captura.

Pinchamos en aceptar y salimos a la pantalla principal del navegador, abrimos cualquier web y ya estaremos navegando a través de nuestro servidor SSH. Si accedemos a una dirección IP local, va a funcionar sin ningún tipo de problema:

Podéis usar cualquier servicio para mirar vuestra IP pública y veréis que tenéis la misma del servidor SSH.

Configuración del Cliente SSH en Linux (por consola)

Si los usuarios de Linux se quieren ahorrar la configuración de Putty basta con que tecleeis este comando en consola y no la cerréis:

ssh -D 8081 -p 22 usuario@ip_publica
  • 8081 = puerto a usar en el túnel
  • 22 = puerto del servidor ssh, si usamos el puerto 22 no hace falta poner -p 22 ya que el puerto 22 es del de por defecto.
  • usuario = usuario del servidor para el login
  • ip_publica = dirección IP, dominio o host dinámico.

Preguntas y respuestas

Pregunta: Si el servidor SSH se cae o cerramos el cliente ssh sin querer, ¿quedaremos desprotegidos sin darnos cuenta?

  • Respuesta: No, porque Firefox dará un error de que el servidor Proxy no está respondiendo y no podrá cargar ninguna web.

Pregunta: ¿Qué es más seguro, esto o crear una VPN como la del manual?

  • Respuesta: La VPN porque te cifra absolutamente todo al cambiar el enrutamiento del equipo, al principio puede parecer más pesado, pero cuando la VPN la tienes configurada es muy cómodo hacer doble click y listo.

Esperamos que con este tutorial podáis navegar seguro realizando un túnel SSH contra vuestro NAS, router u otro servidor donde tengáis el SSH.

53 Comentarios