Enrutando tu tráfico a través de SSH

En días como estos en los que los más afortunados aprovechan sus vacaciones desplazándose a sus lugares de ocio favoritos, muchos seguramente llevarán su portátil para mantenerse al día con sus servicios de interés (correo, facebook, google+, etc…).

Estando fuera de casa es bastante probable que en algún momento usemos puntos de acceso públicos de alguna cafetería o restaurante (o que tomemos prestada la conexión de un vecino), y como hay mucho cabrón suelto es posible que alguien esté ahí esperando para interceptar nuestra conexión, robarnos nuestros datos y hacer maldades con ellos.

Hay muchas soluciones a este problema, pero una de las más sencillas (quitando la obvia: VPN) es montar un servidor SSH en casa y redirigir todo nuestro tráfico (incluido el DNS) encriptado a través de esa conexión.

Para preparar todo esto necesitamos dos cosas:

  1. Configurar un servidor SSH en el PC que tenemos corriendo en casa, y hacerlo accesible desde internet.
  2. Instalar sshuttle en el portátil desde el que nos vamos a conectar.

El primer punto tiene algunas peculiaridades debido a las características de la mayoría de las conexiones que solemos tener en casa, así que vayamos por partes.

Configurar servidor SSH

Comenzamos por instalar un servidor SSH en el PC de casa:

sudo apt-get install ssh

Una vez instalado podemos editar el archivo de configuración para modificar algunas opciones y hacerlo un poquito más seguro:

sudo gedit /etc/ssh/sshd_config

De entrada nos interesará cambiar el puerto por defecto (22) por otro cualquiera (por ejemplo 5000). Con esto conseguiremos que toda esa gentecilla que anda buscando servidores SSH en el puerto por defecto se salte nuestra máquina.

Podemos buscar guías en internet de cómo securizar nuestro servidor SSH, pero con un cambio de puerto y usando la autenticación doble explicada en un artículo anterior ya tenemos un servidor razonablemente seguro.

Habilitar acceso desde internet a nuestro servidor

Aquí nos encontramos con dos obstáculos:

  • Nuestro router, que bloqueará las conexiones entrantes a no ser que estén mapeadas.
  • Nuestra IP pública, que en la mayoría de los casos será dinámica y por tanto no podremos conocerla con seguridad en todo momento.

El primer problema lo resolvemos entrando en la configuración de nuestro router vía el interfaz web de configuración. Debido a la cantidad de routers distintos y las diferencias entre ellos no voy a explicar este paso en detalle, pero básicamente necesitaremos añadir un “servidor” en la configuración del router de forma que redirija las peticiones de conexión entrantes desde el exterior a la IP de nuestro PC, en el puerto en el que hemos configurado nuestro servidor SSH.

Para el segundo problema usaremos no-ip.com, que es un servicio gratuito (en la versión básica, que nos sirve para esto) que nos permite asignar un nombre fijo a nuestra IP dinámica. Algo así como si tuviésemos un nombre de dominio, pero sorteando el problema de la IP.

Primero entraremos en no-ip.com y crearemos una cuenta gratuita. Nos llegará un email de confirmación con un enlace que deberemos abrir para activar nuestra cuenta.

Volvemos a la web de no-ip.com, hacemos login con nuestro usuario y pinchamos en “add host”. Añadiremos un nombre de host para nuestro PC, que será el nombre que usaremos para conectar (por ejemplo algo así como mipcdecasa.no-ip.org):

Una vez hecho esto instalaremos el cliente de no-ip en nuestro PC, que será el encargado de decirle a no-ip.com qué IP tenemos en cada momento para que actualice los registros:

sudo apt-get install noip2

Durante la instalación nos presentará una pantalla en el terminal donde deberemos ir rellenando los datos de nuestra cuenta de no-ip.com:

Si nos equivocamos al introducir los datos y necesitamos volver a configurar el cliente de no-ip más tarde, podemos volver a rellenar este formulario usando este comando:

sudo noip -C

Con esto acaba la configuración que necesitamos realizar en nuestro PC de casa. No está de más probar la conexión con un cliente SSH antes de lanzarnos de viaje, no sea que luego encontremos que hemos configurado mal alguna cosa.

Instalación de sshuttle

En el portátil desde el que nos conectaremos instalamos el cliente sshuttle:

sudo apt-get install sshuttle

Cuando queramos usar la conexión, una vez conectados al punto de acceso, lanzamos el siguiente comando:

sshuttle --dns -vvr [email protected] 0/0

Deberemos reemplazar “usuario” por el nombre de usuario que utilizamos en el PC de casa, y “mipcdecasa.no-ip.org” por el nombre de host que hayamos añadido previamente en la web de no-ip.com.

Si no recibimos ningún error tras lanzar ese comando ya estaremos dirigiendo todo nuestro tráfico a través de una conexión segura. Obviamente deberemos arrancar sshuttle cada vez que nos conectemos a un punto de acceso, ya que cuando nos desconectemos de éste perderemos también la conexión a nuestro servidor SSH y deberemos restablecerla.

Se podría decir que este método es el hermano pobre de una VPN, pero por otra parte tiene la ventaja de que funcionará con cualquier servidor SSH sin necesidad de montar un servicio extra, y usando nuestro usuario normal. Es decir, funcionará también por ejemplo con cuentas de usuario que podamos tener en máquinas del trabajo o cualquier otro sitio, sin configuración adicional.