En el artículo anterior analicé el gestor de contraseñas Bitwarden y recomendé utilizarlo a través de una instancia privada de Vaultwarden. Un método sencillo para instalar Vaultwarden es mediante Yunohost, al cual le dediqué un artículo. En esta ocasión mostraré cómo hacerlo utilizando Docker utilizando una Raspberry Pi como referencia (Se puede adaptar a cualquier servidor basado en Debian o Ubuntu).
Necesitamos lo siguiente
- Un servidor compatible con docker (Una Raspberry Pi funciona bien para esto)
- Un servidor de correo
Para agregar el repositorio para docker necesitamos instalar algunas dependencias
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
Despues agregamos el repositorio
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Ahora instalamos docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Instalamos NGINX como servidor web (también se puede utilizar Apache, pero no tiene el mismo rendimento)
sudo apt install nginx
Creamos un archivo de configuración para NGINX
sudo nano /etc/nginx/sites-enabled/vault.asgardius.company
Agregamos lo siguiente cambiando “vault.asgardius.company” por el nombre de host de nuestra instancia de Vaultwarden
server {
listen 80;
server_name vault.asgardius.company;
# configuración proporcionada por Shauder
client_max_body_size 128M;
location / {
proxy_pass http://127.0.0.1:8181;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /notifications/hub {
proxy_pass http://127.0.0.1:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://127.0.0.1:8181;
}
}
Editamos el archivo de configuración principal de NGINX
sudo nano /etc/nginx/nginx.conf
Agregamos lo siguiente dentro del bloque “http”
server_names_hash_bucket_size 64;
Reiniciamos NGINX
sudo systemctl restart nginx
Obtenemos un certificado on Let’s Encrypt
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
Ejecutamos Vaultwarden a través de Docker ajustando el nombre de host y token de administración de nuestra instancia (con los parámetros incluidos el contenedor se iniciará de forma automática)
sudo docker run -d --name bitwarden -v /vw-data/:/data/ -e DOMAIN=https://vault.asgardius.company -e ADMIN_TOKEN=<random-string> -e ROCKET_PORT=8181 -e WEBSOCKET_ENABLED=true -p 127.0.0.1:8181:8181 -p 127.0.0.1:3012:3012 --restart always vaultwarden/server:latest
Ahora podremos acceder al panel de administración de nuestra instancia de Vaultwarden, en mi caso se accede a través de https://vault.asgardius.company/admin
Entramos utilizando el token de administración que establecimos al ejecutar el contenedor e introducimos las credenciales de nuestro servidor de correo en los campos correspondientes. Una vez configurado el servidor de correo podemos ir a la sección Usuarios e invitar usuarios nuevos a través del correo electrónico. Otra opción es abrir el registro, pero el servidor podría llenarse de nuevas solicitudes. En caso de que familiares y amigos ya tengan cuenta en nuestro servidor de correo podemos habilitar el registro exclusivamente para los nombres de dominio utilizados por este y solicitar la verificación de correo para poder iniciar sesión. Este software es bastante ligero, ya que instalado en una Raspberry Pi 3 solo se utilizan 142 MB de RAM (incluyendo otros servicios del sistema). Recuerda que debido al encriptado de punta a punta en caso de olvidar la contraseña de la cuenta los datos serán inaccesibles. Para evitar este problema se puede establecer un recordatorio para poder deducir la contraseña en caso de emergencia (este recordatorio se envía al buzón de correo asociado)