Vaultwarden avec Caddy comme Reverse Proxy
Déploiement
Vaultwarden est une implémentation légère et performante de l’API serveur de Bitwarden. Pour garantir un accès sécurisé dès le premier lancement, j’ai choisi de déployer ce gestionnaire de mots de passe en l’associant à Caddy, un reverse proxy léger qui gère le flux HTTPS.
Cet article détaille la mise en place de la stack Docker que j’ai réalisée, incluant l’utilisation de certificats personnalisés.
Préparation de l’environnement et des certificats
Avant de lancer le déploiement sur Portainer (ou via la ligne de commande), il m’a fallu préparer l’arborescence de fichiers sur la machine hôte hébergeant Docker.
J’ai créé les dossiers nécessaires au fonctionnement de Caddy avec la commande suivante :
1
sudo mkdir -p /srv/docker/vaultwarden/caddy/{data,config,certs}
Comme j’utilise des certificats personnalisés, j’ai placé le certificat et la clé privée dans le dossier /caddy/certs fraîchement créé.
Un point de vigilance important : la clé privée doit obligatoirement être non chiffrée. L’autorité de certification fournissant une clé protégée par une passphrase, j’ai dû la déchiffrer au préalable à l’aide d’OpenSSL :
1
openssl rsa -in privateKey.pem -out privateKey-decrypted.pem
Génération du Token d’Administration
Pour administrer Vaultwarden, j’ai sécurisé l’accès au portail de gestion avec un jeton robuste chiffré en Argon2.
J’ai généré ce hash directement sur ma machine hôte via une commande Docker :
1
docker run --rm -it vaultwarden/server /vaultwarden hash
L’outil m’a alors demandé de saisir un mot de passe. J’ai conservé précieusement la chaîne de caractères initiale (non hachée) dans un gestionnaire sécurisé, car c’est elle qui m’est demandée pour me connecter. Le résultat haché m’a servi pour le fichier de configuration.
Le fichier Docker Compose
Voici la configuration que j’ai déployée. J’y ai inséré mon nom de domaine et le hash généré à l’étape précédente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: '3.8'
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "[https://vault.example.com](https://vault.example.com)"
WEBSOCKET_ENABLED: "true"
SIGNUPS_ALLOWED: "true"
ADMIN_TOKEN: "MON_HASH_ARGON2_ICI"
volumes:
- /srv/docker/vaultwarden/data:/data
caddy:
image: caddy:2
container_name: vaultwarden_caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- /srv/docker/vaultwarden/caddy/Caddyfile:/etc/caddy/Caddyfile:ro
- /srv/docker/vaultwarden/caddy/data:/data
- /srv/docker/vaultwarden/caddy/config:/config
- /srv/docker/vaultwarden/caddy/certs:/certs:ro
environment:
DOMAIN: "vault.example.com"
depends_on:
- vaultwarden
Une fois la stack démarrée, Vaultwarden était directement accessible via mon nom de domaine HTTPS.
Configuration Post-Déploiement (SMTP)
Le portail d’administration est accessible en ajoutant /admin à la fin de l’URL. J’ai renseigné mon token non haché pour y accéder.
La console d’administration regorge de paramètres pour adapter le service. La première étape essentielle pour moi a été de configurer le relais SMTP, indispensable pour envoyer des courriels d’invitation aux futurs utilisateurs.
Dans la section des paramètres email SMTP, j’ai rempli les champs avec les données de mon serveur de messagerie :
Host configuré sur https://www.google.com/search?q=smtps.example.com Secure SMTP réglé sur force_tls Port défini sur 587 Adresse d’expédition et nom d’utilisateur renseignés avec mon adresse dédiée Mot de passe de la boîte mail complété
J’ai sauvegardé mes réglages, rendant ainsi mon instance Vaultwarden prête à accueillir les équipes en toute sécurité.