Vaultwarden est une version légère du serveur Bitwarden écrite en Rust. Idéal pour l’auto-hébergement, il consomme peu de ressources et offre toutes les fonctions premium gratuitement (2FA, rapports, organisations). Pour approfondir vos connaissances, vous pouvez consulter le GitHub du projet ainsi que leur Wiki officiel.
Ce que vous allez accomplir :
En suivant ce guide, je vais vous accompagner dans le déploiement d’une instance Vaultwarden professionnelle et « durcie ». Je ne vais pas me contenter de vous faire lancer un conteneur : je vais vous montrer comment isoler la configuration dans un fichier.env, sécuriser l’accès administratif avec un hash Argon2, et configurer un proxy inverse (NPM) avec des en-têtes de sécurité avancés. À la fin, vous disposerez d’un coffre-fort personnel chiffré, accessible en HTTPS, et protégé par une double authentification.
Je commence par préparer les dossiers de travail directement dans le répertoire root.
cd /root
mkdir -p vaultwarden/vw-data
cd vaultwarden
Pour une sécurité maximale, je ne vais pas utiliser un simple mot de passe. Je vais générer une clé aléatoire complexe que je vais ensuite transformer en empreinte (hash) Argon2.
Je génère d’abord une chaîne aléatoire de 48 caractères :
openssl rand -base64 48
⚠️ ATTENTION : Copiez précieusement le résultat (la clé en clair). C’est ce code qui vous sera demandé pour vous connecter à la page
/admin.
Je passe maintenant cette clé dans l’outil de hashage de Vaultwarden :
docker run --rm -it vaultwarden/server /vaultwarden hash
Action : Collez la clé générée précédemment à l’invite « Password ». Copiez ensuite le résultat qui commence par
$$argon2id$$.
J’y stocke la configuration complète pour garder un environnement propre.
nano .env
Contenu à adapter (anonymisé) :
DOMAIN=https://vw.votre-domaine.be
SIGNUPS_ALLOWED=false
ICONS_SERVICE=internal
# Note : Doublez les symboles '$' pour Docker Compose (ex: $$argon2id$$)
ADMIN_TOKEN=$$argon2id$$v=19$$m=65540,t=3,p=4$$...votre_hash_ici...
nano docker-compose.yml
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: always
env_file: .env
volumes:
- ./vw-data:/data
ports:
- 8080:80
Je déploie maintenant la solution.
docker compose up -d
8080. Activez Bloquer les exploits courants et surtout Prise en charge de Websockets.Ajoutez une localisation /, cliquez sur l’engrenage et collez ce bloc :
proxy_hide_header X-Powered-By;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Xss-Protection "1; mode=block" always;
add_header X-Robots-Tag "noindex, noarchive, nofollow" always;
Collez ce second bloc pour les performances et les headers standards :
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
client_max_body_size 0;
proxy_read_timeout 86400s;
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;
Accédez à https://vw.votre-domaine.be/admin.
💡 Note importante : Pour vous connecter, vous devez utiliser votre clé de 48 caractères générée à l’étape 2 (et non le hash Argon2 du fichier .env).
smtp.gmail.com | Port : 587 | Security : StartTLS.Il est impératif de comprendre la différence entre ces deux accès, même si vous utilisez la même adresse email pour les deux :
ADMIN_TOKEN.Auteur : ce guide est proposé par Amaury aka BlablaLinux. Retrouvez l’ensemble de mes services sur blablalinux.be/mes-services-publics/.