Para seguir el proceso de migración de mi Home Lab desde una pequeña Raspberry Pi 4 a un OptiPlex 7050 ejecutando Proxmox ahora le toca el turno a Vaultwarden, una implementación no oficial y mucho más ligera del servidor Bitwarden que se puede instalar localmente y es compatible con los clientes oficiales.
En esta ocasion, la instalación de Vaultwarden en Docker se realizará en un contenedor ligero LXC de Proxmox con TurnKey Core. El procedimiento para crear este LXC es el mismo que usé para ejecutar Docker en Proxmox LXC.
Características del LXC
Este gestor de contraseñas con Vaultwarden se ejecutará sobre un LXC con las siguientes características:
- LXC no privilegiado, con nesting y
keyctl
- CT ID: 306
- Hostname: vaultwarden
- Password + SSH key file
- Disco: 4GB en
local_lvm
- CPU: 1 core
- Memoria: 512MB
- IP estática: 192.168.1.84/24
- Gateway: 192.168.1.1
- Dominio: home
- DNS: 192.168.1.81 192.168.1.82
Configuración del LXC
A continuación se pone en marcha el LXC desde la CLI de Proxmox y se procede a configurarlo de la misma manera que ya expliqué en el artículo sobre LXC y Docker:
pct start 306
Se puede acceder al LXC utilizando la opción Console
de la GUI o, mucho mejor, mediante SSH gracias a la configuración de las claves públicas que se hizo en el mismo:
ssh root@192.168.1.84
La configuración inicial es la habitual en una plantilla LXC de TurnKey Core:
- First Boot Configuration:
Skip
/Skip
/Install
- Advanced Menu:
Quit
- Zona horaria Europe/Madrid con
dpkg-reconfigure tzdata
- Actualizar con
apt update && apt upgrade -y
- Reiniciar con
reboot
Instalación de Docker
La instalación de Docker es idéntica a la que expliqué en el artículo “Docker en Proxmox LXC con TurnKey Core”:
- Añadir la clave oficial GPG de Docker
- Añadir el repositorio a las fuentes de
apt
- Instalar los paquetes de Docker:
docker-ce
,docker-ce-cli
, etc.
Instalación de Nginx Proxy Manager
Una vez se ha instalado Docker, y dado que Vaultwarden requiere un acceso HTTPS, se puede instalar Nginx Proxy Manager de la misma forma que lo hice en la Raspberry Pi 4 (ver artículo “Instalación de Nginx Proxy Manager en Docker”):
- Crear el fichero
docker-compose.yml
- Ponerlo en marcha usando
docker compose up -d
- Realizar la configuración inicial
- Crear un registro de tipo A en Cloudflare
- Configurar la petición de certificados SSL en Let’s Encrypt para ese dominio
- Configurar un proxy host para ese dominio dirigido al docker de Vaultwarden
Instalación de Vaultwarden
La instalación de Vaultwarden también se puede realizar igual que en la Raspberry Pi 4 (ver artículo “Instalación de Vaultwarden en Docker”):
- Crear el fichero
docker-compose.yml
- Ponerlo en marcha usando
docker compose up -d
- Realizar la configuración inicial
- Habilitar el Admin Panel
- Configurar los parámetros de seguridad
Nota: En mi caso, al estar realizando una migración, he copiado el volúmen data
desde la Raspberry Pi 4 antes de poner en marcha el Docker. De esta manera recupero la misma configuración, la base de datos, la caché de iconos, etc.
drwxr-xr-x 2 root root 4096 Dec 18 2022 attachments
-rw-r--r-- 1 root root 1432 Dec 18 2022 config.json
-rw-r--r-- 1 root root 651264 Nov 12 13:10 db.sqlite3
-rw-r--r-- 1 root root 32768 Nov 23 19:25 db.sqlite3-shm
-rw-r--r-- 1 root root 4128272 Nov 23 19:25 db.sqlite3-wal
drwxr-xr-x 2 root root 16384 Nov 23 19:24 icon_cache
-rw-r--r-- 1 root root 1679 Dec 18 2022 rsa_key.pem
-rw-r--r-- 1 root root 451 Dec 18 2022 rsa_key.pub.pem
drwxr-xr-x 2 root root 4096 Dec 18 2022 sends
drwxr-xr-x 2 root root 4096 Dec 18 2022 tmp
Al iniciar sesión por primera vez, se muestra un mensaje indicando que se requiere incrementar el número de iteraciones KDF:
La interfaz web recomienda un valor de 600000 para ser compatible con FIPS-140, pero la documentación indica que es recomendable realizar incrementos de 100000 y comprobar si todos los dispositivos que usemos son capaces de abrir y desbloquear el vault de forma fluída.
Nota: En mi caso, la configuración recuperada de una versión 1.27.0 tenía un valor por defecto de 100000, bastante diferente del valor por defecto de 600000 de la versión 1.30.0 que se acaba de instalar.
Al acceder al Panel de Administración se muestra un mensaje indicando que es más seguro utilizar un string seguro Argon 2 PHC (disponible desde la versión 1.28.0+) en lugar de un texto plano para el ADMIN_TOKEN
:
Para generarlo se utiliza el comando vaultwarden hash --preset owasp
desde el propio Docker:
root@vaultwarden ~# docker exec -it vaultwarden /vaultwarden hash --preset owasp
Generate an Argon2id PHC string using the 'owasp' preset:
Password:
Confirm Password:
ADMIN_TOKEN='$argon2id$v=19$m=19456,t=2,p=1$7LDGBu/bVVcKsiRvYT1F4ikMPNGrJnR+43GfS/5w4BI$QydzrtxEcvqc4g2v6gXpAQKacRmlYdxFARzT90ScUfI'
Generation of the Argon2id PHC string took: 36.537429ms
Una vez generado, se cambia en los General Settings
y se graba la configuración. Si todo funciona correctamente, se podrá iniciar sesión utilizando el password usado para generar el string seguro.