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:
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.
Luego, lo que debemos hacer es instalar Tailscale en cada dispositivo / Servidor que sea parte de nuestra red, la descarga se hace desde acá:
Para este artículo voy a instalarlo en servidor Linux que cree con Multipass.
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:
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.