Vaultwarden : un gestionnaire de mots de passe auto-hébergé
Vaultwarden est une implémentation alternative et légère du serveur Bitwarden, écrite en Rust. Compatible avec tous les clients officiels Bitwarden (extensions navigateur, applications mobiles, application de bureau), Vaultwarden permet d'auto-héberger son propre gestionnaire de mots de passe sur un VPS Linux. Le projet est open source, publié sous licence AGPL-3.0.
Contrairement au serveur officiel Bitwarden, qui nécessite plusieurs conteneurs Docker et une base Microsoft SQL Server, Vaultwarden tourne dans un seul conteneur avec une base SQLite embarquée. Un VPS avec 512 Mo de RAM suffit pour une instance personnelle ou familiale. C'est cette légèreté qui rend Vaultwarden particulièrement adapté à un déploiement sur un VPS modeste.
Ce guide couvre le déploiement de Vaultwarden avec Docker Compose sur un VPS Linux Ubuntu ou Debian, la mise en HTTPS via un reverse proxy Nginx, la création du premier compte, la configuration du panneau d'administration, les notifications SMTP, la sauvegarde de la base SQLite et le durcissement de l'instance.
Prérequis
- Un VPS Linux sous Ubuntu 22.04 LTS ou Debian 12 ;
- Docker et Docker Compose installés (guide d'installation de Docker sur un VPS) ;
- Un nom de domaine avec un enregistrement DNS de type A pointant vers l'adresse IP du VPS (exemple :
vault.exemple.fr) ; - Les ports 80 (HTTP) et 443 (HTTPS) ouverts dans le pare-feu (ouvrir les ports avec UFW) ;
- Un accès SSH avec authentification par clé publique (configurer une clé SSH sur VPS Linux).
Déployer Vaultwarden avec Docker Compose
Créez un répertoire dédié et un fichier compose.yaml pour définir le service Vaultwarden. L'image officielle vaultwarden/server est publiée sur Docker Hub et sur le GitHub Container Registry :
mkdir -p /opt/vaultwarden && cd /opt/vaultwarden
nano compose.yaml
Contenu du fichier compose.yaml :
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.exemple.fr"
SIGNUPS_ALLOWED: "false"
volumes:
- ./vw-data:/data
ports:
- "127.0.0.1:8080:80"
Points importants dans cette configuration Docker Compose :
- DOMAIN : l'URL complète (avec
https://) de votre instance Vaultwarden. Cette variable est indispensable : sans elle, les invitations, les pièces jointes et le web vault ne fonctionnent pas correctement ; - SIGNUPS_ALLOWED : désactivé dès le départ pour empêcher les inscriptions publiques. Vous activerez les inscriptions le temps de créer votre compte, puis les désactiverez à nouveau ;
- Ports : le conteneur écoute sur
127.0.0.1:8080uniquement (interface locale). Le reverse proxy Nginx exposera le service en HTTPS sur le port 443. Ne publiez jamais le conteneur directement sur une interface publique ; - Volume : le répertoire
./vw-datastocke la base SQLite, les pièces jointes, les clés RSA et la configuration. C'est le répertoire à sauvegarder.
Démarrez le conteneur :
docker compose up -d
docker compose logs -f
Le log affiche Rocket has launched from http://0.0.0.0:80 quand le serveur Vaultwarden est prêt. Pour approfondir la syntaxe Docker Compose et la gestion des volumes : guide Docker Compose sur VPS Linux.
Configurer le reverse proxy Nginx avec HTTPS
Vaultwarden exige une connexion HTTPS : les clients Bitwarden refusent de se connecter à une instance servie en HTTP non chiffré. Un reverse proxy Nginx avec un certificat Let's Encrypt répond à cette exigence.
Installez Nginx et Certbot :
sudo apt update && sudo apt install -y nginx certbot python3-certbot-nginx
Créez le fichier de configuration Nginx pour Vaultwarden :
sudo nano /etc/nginx/sites-available/vaultwarden
Contenu :
server {
listen 80;
server_name vault.exemple.fr;
location / {
proxy_pass http://127.0.0.1:8080;
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;
}
client_max_body_size 128M;
}
La directive client_max_body_size autorise l'envoi de pièces jointes volumineuses vers le coffre-fort. Adaptez la valeur selon vos besoins.
Activez le site et obtenez le certificat TLS :
sudo ln -s /etc/nginx/sites-available/vaultwarden /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d vault.exemple.fr
Certbot modifie automatiquement la configuration Nginx pour écouter sur le port 443 avec le certificat obtenu et redirige le trafic HTTP vers HTTPS. Le renouvellement du certificat est automatique via un timer systemd. Pour la gestion des certificats : guide Certbot et Let's Encrypt sur VPS Linux.
Pour la configuration avancée du reverse proxy (en-têtes de sécurité, WebSocket, rate limiting) : guide Nginx reverse proxy sur VPS Linux.
Créer le premier compte utilisateur
Les inscriptions sont désactivées par défaut dans la configuration précédente. Activez-les temporairement pour créer votre compte :
cd /opt/vaultwarden
sed -i 's/SIGNUPS_ALLOWED: "false"/SIGNUPS_ALLOWED: "true"/' compose.yaml
docker compose up -d
Ouvrez https://vault.exemple.fr dans un navigateur, cliquez sur "Create account" et renseignez votre adresse e-mail et un mot de passe maître. Ce mot de passe maître est la seule clé qui déverrouille votre coffre-fort de mots de passe : choisissez-le long (au moins 14 caractères) et unique.
Une fois le compte créé, désactivez immédiatement les inscriptions :
sed -i 's/SIGNUPS_ALLOWED: "true"/SIGNUPS_ALLOWED: "false"/' compose.yaml
docker compose up -d
Activer le panneau d'administration
Vaultwarden propose un panneau d'administration web accessible à l'adresse /admin. Il permet de gérer les utilisateurs, d'envoyer des invitations, de consulter les journaux et de modifier la configuration de l'instance sans toucher au fichier compose.yaml.
Générez un jeton d'accès sécurisé :
openssl rand -base64 48
Ajoutez la variable ADMIN_TOKEN dans la section environment du fichier compose.yaml :
ADMIN_TOKEN: "votre-jeton-genere-ici"
Redémarrez le conteneur avec docker compose up -d, puis accédez au panneau via https://vault.exemple.fr/admin. Le jeton sert de mot de passe d'accès. Ne le partagez pas et conservez-le dans un endroit sûr.
Configurer les notifications SMTP
Sans configuration SMTP, Vaultwarden ne peut pas envoyer d'e-mails de vérification de compte, d'invitations utilisateur ni d'alertes de connexion. Ajoutez les variables SMTP dans le fichier compose.yaml :
SMTP_HOST: "smtp.exemple.fr"
SMTP_FROM: "vaultwarden@exemple.fr"
SMTP_PORT: "587"
SMTP_SECURITY: "starttls"
SMTP_USERNAME: "vaultwarden@exemple.fr"
SMTP_PASSWORD: "mot-de-passe-smtp"
La variable SMTP_SECURITY accepte trois valeurs :
starttls(par défaut) : chiffrement STARTTLS, port 587 ;force_tls: TLS implicite, port 465 ;off: aucun chiffrement (déconseillé en production).
Redémarrez le conteneur et testez l'envoi d'un e-mail depuis le panneau d'administration (/admin, section "SMTP Email Settings", bouton "Send test email").
Sauvegarder la base de données SQLite
Vaultwarden stocke tous les mots de passe, notes sécurisées et identités dans un fichier SQLite (db.sqlite3) situé dans le volume de données (./vw-data). La sauvegarde de ce fichier est la mesure la plus importante de votre déploiement.
La documentation officielle de Vaultwarden recommande d'utiliser la commande .backup de SQLite, qui crée une copie cohérente même si le serveur est en cours d'exécution :
sqlite3 /opt/vaultwarden/vw-data/db.sqlite3 ".backup '/opt/vaultwarden/backups/db-$(date +%Y%m%d-%H%M).sqlite3'"
En complément de la base, sauvegardez aussi les fichiers suivants du répertoire vw-data :
attachments/: les pièces jointes stockées dans le coffre-fort ;config.json: la configuration définie depuis le panneau d'administration ;rsa_key.pem,rsa_key.der,rsa_key.pub.der: les clés RSA utilisées pour signer les jetons d'authentification.
Automatisez la sauvegarde avec une tâche cron qui exécute la commande SQLite, puis synchronise le répertoire vers un stockage distant. Consultez notre guide planifier des tâches automatiques avec cron et systemd timers pour la mise en place, et notre guide sauvegarder un VPS avec rsync pour la réplication hors site.
Point important lors d'une restauration : si vous restaurez une sauvegarde créée avec .backup, supprimez tout fichier db.sqlite3-wal présent dans le répertoire de données avant de démarrer Vaultwarden. Restaurer un fichier .backup en présence d'un fichier WAL d'une session antérieure peut corrompre la base.
Récapitulatif du durcissement
Voici les mesures de sécurité couvertes dans ce guide et les variables d'environnement associées :
| Mesure | Variable ou action | Objectif |
|---|---|---|
| Désactiver les inscriptions publiques | SIGNUPS_ALLOWED=false | Empêcher la création de comptes non autorisés |
| Protéger le panneau d'administration | ADMIN_TOKEN avec un jeton long | Restreindre l'accès à la configuration du serveur |
| Configurer SMTP | Variables SMTP_* | Activer la vérification de compte et les alertes |
| Forcer HTTPS | Reverse proxy Nginx + certificat Let's Encrypt | Chiffrer le trafic entre les clients et le serveur |
| Masquer les indices de mot de passe | SHOW_PASSWORD_HINT=false | Ne pas afficher d'indice sur la page de connexion |
| Écouter uniquement en local | Port 127.0.0.1:8080:80 | Interdire l'accès direct au conteneur sans passer par le reverse proxy |
Durcissez aussi le VPS lui-même : sécuriser SSH (désactiver l'accès root, imposer les clés publiques), configurer Fail2ban pour protéger SSH contre les attaques par force brute, et maintenir le système à jour.
Fichier compose.yaml complet
Voici le fichier compose.yaml complet avec l'ensemble des variables abordées dans ce guide :
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
environment:
DOMAIN: "https://vault.exemple.fr"
SIGNUPS_ALLOWED: "false"
ADMIN_TOKEN: "votre-jeton-genere-ici"
SHOW_PASSWORD_HINT: "false"
SMTP_HOST: "smtp.exemple.fr"
SMTP_FROM: "vaultwarden@exemple.fr"
SMTP_PORT: "587"
SMTP_SECURITY: "starttls"
SMTP_USERNAME: "vaultwarden@exemple.fr"
SMTP_PASSWORD: "mot-de-passe-smtp"
volumes:
- ./vw-data:/data
ports:
- "127.0.0.1:8080:80"
Remplacez les valeurs d'exemple (vault.exemple.fr, jeton admin, identifiants SMTP) par vos propres paramètres avant de démarrer le conteneur.
Aller plus loin
L'instance Vaultwarden est en place, sécurisée et sauvegardée. Pour compléter le déploiement :
- Activez l'authentification à deux facteurs (TOTP, FIDO2/WebAuthn, YubiKey) dans les paramètres de sécurité de votre compte via l'interface web vault ;
- Configurez les clients Bitwarden (extension navigateur, application mobile) en renseignant l'URL de votre instance dans "Self-hosted > Server URL" avant de vous connecter ;
- Surveillez la consommation de ressources du conteneur avec htop et btop ;
- Mettez à jour Vaultwarden régulièrement :
docker compose pull && docker compose up -dtire la dernière image et relance le conteneur sans perte de données.
FiveM
Minecraft
Rust
RedM
Hytale