Cómo restringir el acceso SSH a nuestro servidor con Tailscale

Tailscale se define como una VPN que no requiere configuración y si bien, esa declaración no es del todo cierta, porque requiere una mínima configuración, se acerca bastante, ya que el trabajo que debemos hacer en nuestros servidores es minúsculo.

En este blog le he comentado alguna que otra alternativa para segurizar el acceso a nuestros servidores en la nube, estas son las siguientes:

Qué es proxyjump, por qué y cómo deberías usarlo
Usar un bastión es una buena idea para asegurar tus servidores que corren de manera remota. En este artículo, te cuento como accederlos usando ProxyJump.
Cómo configurar 2FA para autenticarse en Ubuntu Server
Agregar un segundo factor de autenticación a un servidor cuando nos conectamos por SSH es una excelente idea. En este artículo, te muestro cómo configurarlo en Ubuntu Server.

Ahora bien, hablando de Tailscale en concreto, hace que el acceso a nuestros recursos remotos sea muy sencillo. En mi caso, deje de usar bastiones para conectarme a los servidores en la nube, simplemente con estar conectado a este servicio es más que suficiente y lo mejor es que funciona más rápido.

Déjenme mostrarles un gráfico, que explica, que debemos tener para conectarnos a recursos remotos en el caso de que no tuvieras Tailscale.

Con Tailscale se vería de la siguiente manera:

Lo que básicamente hace Tailscale es asignar a cada recurso, una dirección IP que solo puede ser accedida desde otra IP dentro desde nuestra red Tailscale.

Ahora que minímamente esta explicado que es lo que hace y como funciona Tailscale, veamos como configurarlo.

Primero, debemos abrir una cuenta, si abrís una cuenta partícular, la misma es gratuita y soporta 20 dispositivos, lo cual, es más que suficiente.

Tailscale
Tailscale makes connecting your team and devices easy. It’s free to get started and use by yourself, and scales with you as your needs grow.

Luego, lo que debemos hacer es instalar Tailscale en cada dispositivo / Servidor que sea parte de nuestra red, la descarga se hace desde acá:

Tailscale
Tailscale is a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any network or physical location.

Para este artículo voy a instalarlo en servidor Linux que cree con Multipass.

Cómo correr instancias virtualizadas de Ubuntu Server con Multipass
Canonical tiene una solución que te permite correr instancias frescas de Ubuntu Server desde tu línea de comando preferida, no importa si estás en Windows, Linux o Mac.

Si vamos a instalarlo en un servidor Linux, como en mi caso, Ubuntu Server 20.04, debemos agregar el repo e instalarlo desde ahí. Para eso, vamos a seguir los siguientes pasos:

Agreguemos los repos

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.gpg | sudo apt-key add -
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.list | sudo tee /etc/apt/sources.list.d/tailscale.list

Instalación de Tailscale

sudo apt-get update
sudo apt-get install tailscale

Autenticación contra Tailscale

Lo siguiente que debemos hacer es autenticarnos este nuevo servidor contra Tailscale usando nuestra cuenta.

Primero corremos esto en el servidor:

sudo tailscale up

Nos responderá con algo como esto, que es una URL que debemos visitar y en la cual tenemos que autenticarnos. Noten que puse un token random.

To authenticate, visit:

        https://login.tailscale.com/a/f43f3f3rv3v

En mi caso, mi cuenta la cree con Github, así que elijo ese proveedor de autenticación, si en tu caso fue con un email y contraseña, acá es el momento de ponerla.

Una vez autenticado, como en mi caso, uso Tailscale en la empresa que trabajo, debo elegir a que entidad quiero asociar este nuevo dispositivo. En este caso, a mi cuenta personal, así que la elijo.

Si todo fue bien, veremos algo como esto:

Visualizando nuestros dispositivos

Una vez que esta autorizado, yendo a esta URL podremos ver todos nuestros dispositivos:

Tailscale

Noten el último que se llama y tailscale-demo que es el servidor que cree para este artículo.

Ahora bien. Una vez que esta el servidor listo, vamos a crearle unas reglas con UFW para solamente permitir el trafico desde Tailscale solamente. De esta manera, solo nosotros, conectados a Tailscale, podremos conectarnos a nuestros servidores.

SSH sobre Tailscale y nada más...

UFW, por si no lo sabias, es Uncomplicated Firewall y viene instalado en Ubuntu Server. Es un firewall que hace su trabajo de manera eficiente y tiene una gama amplia de opciones para configurar. En este caso, lo usaremos para bloquear el acceso SSH desde cualquier lugar, excepto, desde nuestra red Tailscale.

Lo que debemos saber es que dirección nos dió Tailscale, para eso vamos a correr...

ip addr show tailscale0

El resultado será algo como esto:

3: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none
    inet 100.76.213.110/32 scope global tailscale0
       valid_lft forever preferred_lft forever
    inet6 fd7a:115c:a1e0:ab12:4843:cd96:624c:d56e/128 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::ac1a:c864:82cf:e308/64 scope link stable-privacy
       valid_lft forever preferred_lft forever

Una vez que tenemos la IP, cerramos la sesión SSH actual y abrimos una nueva usando esta dirección IP:

ssh ubuntu@100.76.213.110

Lo siguiente que debemos realizar es permitir las conexiones de Tailscale en el servidor, para eso, vamos a correr lo siguiente:

sudo ufw allow in on tailscale0 
sudo ufw allow 41641/udp

El siguiente paso es habilitar el firewall y restringir el trafico SSH que provenga desde afuera de la red de Tailscale:

sudo ufw enable
sudo ufw delete 22/tcp

Una vez que esta todo listo, restarteamos UFW y el servicio SSH server:

sudo ufw reload
sudo service ssh restart

A partir de este momento, solo podrás hacer una conexión SSH hacia tu servidor, estando conectado a la red de Tailscale.

Para ir cerrando

Como ves, es bastante sencillo y es una excelente opción para segurizar nuestros servidores, servicios y dispositivos cuando los mismos están repartidos por Intenet en diferentes Cloud Providers.

Acordate, a partir de ahora, solo te podrás conectar hacia ese servidor solo cuando estás conectado a Tailscale y no de otra forma.