Installer Vaultwarden avec Docker
Guide d'installation de Vaultwarden sous Docker.
Au sommaire :
- 1-Qu'est-ce que Vaultwarden ?
- 2-Prérequis
- 3-Déploiement
- 4-Configuration
- 5-Authentification 2FA
1-Qu'est-ce que Vaultwarden ?
Vaultwarden est un fork de Bitwarden, le célèbre gestionnaire de mots de passe, connu auparavant sous le nom de Bitwarden _RS.
C'est un serveur backend compatible avec l'API de Bitwarden, ce qui fait qu'il est compatible avec le client de ce dernier.
Il est écrit en langage Rust, langage réputé pour son haut niveau de sécurité et son efficacité énergétique.
Son énorme avantage et pas des moindres, c'est qu'il utilise seulement 30 Mo en mémoire vive et nécessite qu'un seul conteneur à déployer contre plusieurs Go et une douzaine de conteneurs pour Bitwarden (preuve en image).
Comme base de données, il utilise SQLite par défaut ou PostgreSQL contre MySQL pour Bitwarden et cerise sur le gâteau, il est compatible avec les architectures ARM, ce qui rend intéressant son déploiement sur un Raspberry Pi.
Tout ça parait génial au premier abord. Sachant que Vaultwarden stocke des identifiants/mots de passe, des notes sécurisés, des cartes de paiement et des fiches d'identités, prenez en compte les éléments suivants :
- C'est une application non officielle donc non supporté par la société Bitwarden.
- Bitwarden effectue régulièrement des audits pour détecter d’éventuelles failles de sécurité dans le code source et propose des Bug Bounty (chasse aux bogues), ce qui n'est pas le cas de Vaultwarden car cela coûte énormément d'argent.
- Vaultwarden utilise aucun chiffrement TLS car il utilise le port 80 par défaut (HTTP). Cela veut dire que l'ensemble du trafic n'est pas 100% chiffré et favorise des attaques de type "Man in the Middle".
Donc pour compensez l'absence de chiffrement TLS :
- Utilisez un reverse proxy (comme Traefik) qui redirige les requêtes HTTP vers HTTPS pour chiffrer le trafic.
- Si exposition de l'application sur l'internet public, activez l'authentification à deux facteurs de l'application.
- Une autre idée qui me vient en tête serait d'isoler les applications Docker dans un VLAN via pfSense/OPNsense en cas de compromission de votre réseau local.
Ne prenez pas pour argent comptant ce que je dis et demandez conseil à un spécialiste en cyber-sécurité. Il faut savoir rester modeste et admettre qu'on ne connait pas tout sur tout.
C'est toujours bon de connaitre ce genre de détails car comme le montre l'actualité cyber depuis 2020 et l'affaire LastPass, il va falloir de plus en plus intégrer ces notions dans nos usages du quotidien.
Je vais suivre l'actualité autour de cette application de près donc si je constate quelque chose d'anormal, je vous avertirai sur Linkedin et Rocket2Rue.
Mais si je devait résumer :
- Bitwarden pour les entreprises
- Vaultwarden pour les particuliers
Personnellement, j'aime l'idée de conserver ces informations sensible sur mon serveur et d'apprendre à comment le sécuriser au maximum donc
Lisez également le commentaire de cksapp qui est très intéressant sur le sujet.
2-Prérequis
Il vous faudra une machine virtuelle sous Ubuntu Server 22.04 LTS.
Voici le guide pour ceux qui veulent repartir de zéro.
Si vous voulez gagner du temps, utilisez un template cloud-init.
Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.
Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.
3-Déploiement
Commencez par créer un dossier "docker" à la racine du dossier utilisateur"
mkdir -p ~/docker
Créez un fichier nommé "compose.yml"
touch ~/docker/compose.yml
Ouvrez le fichier "compose.yml" et copiez cette configuration pour déployer Vaultwarden avec Traefik.
Ensuite, si vous avez suivi le guide de ce dernier, il vous faudra ajouter les labels adéquat pour pouvoir exposer l'application sur l'internet public.
version: "3.9"
networks:
web:
services:
traefik:
container_name: traefik
image: traefik:latest
restart: always
network:
web:
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${APPDATA}/traefik/logs:/logs
- ${APPDATA}/traefik/traefik.yml:/traefik.yml
- ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
- ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
labels:
- traefik.enable=true
- traefik.http.routers.traefik-dash.entrypoints=websecure
- traefik.http.routers.traefik-dash.rule=Host(`traefik.<votredomaine>.ovh`)
- traefik.http.routers.traefik-dash.service=api@internal
- "traefik.http.routers.traefik.middlewares=middlewares-basic-auth@file"
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
volumes:
- ${APPDATA}/vaultwarden:/data
networks:
- web
# ports:
# - 80:80
restart: always
labels:
- traefik.enable=true
- traefik.http.routers.vaultwarden.entrypoints=websecure
- traefik.http.routers.vaultwarden.tls.certresolver=letsencrypt
- traefik.http.routers.vaultwarden.rule=Host(`vaultwarden.<votre_nom_de_domaine>`)
- traefik.http.routers.vaultwarden.service=vaultwarden-svc
- traefik.http.services.vaultwarden-svc.loadbalancer.server.port=80
Comme d'habitude, suivez les parties 6 et 7 du guide de Traefik pour ouvrir les ports de votre box internet et ajouter les entrées DNS pour pouvoir accéder à l'application.
Déployez l'application avec la commande suivante.
docker compose up -d
4-Configuration
Il vous faudra créer un identifiant (votre adresse mail) et un mot de passe
Ensuite, installez l'extension web de Bitwarden selon votre navigateur.
Puis authentifiez-vous.
On vois que Vaultwarden enregistre :
- Les identifiants et mots de passe.
- Les notes sécurisés.
- Les cartes de paiement
- Les fiches d'identités
Par exemple si vous souhaitez enregistrer un compte, cliquez sur
- "Coffres" et "Nouvel élément" (application Vaultwarden)
- "Coffres" et "+" (extension Bitwarden)
Puis renseignez les champs suivants :
- Nom : le nom du site ou de l'application
- Nom d'utilisateur : le compte utilisateur
- Mot de passe : le mot de passe du compte
- URL 1 : l'adresse du site ou de l'application
Vous pouvez également ajouter des notes si besoin.
Puis enregistrez le tout.
Vous pouvez effectuer des rapports sur les mots de passe exposés, réutilisés, faibles ainsi que sur les fuites de données et les sites web non sécurisés.
Aucun de mes mots de passe sont exposés (ouf).
Là j'ai une alerte qui me dis que je devrait éviter d'utiliser des mots de passe similaires.
Rien à signaler sur la faiblesse de mes mots de passe (ni trop long, ni trop court).
Les sites web que j'utilise sont tous sécurisés avec un certificat SSL.
Là ça indique que le compte a été trouvé sur le site "haveibeenpwned.com" c'est pas le mien, c'est pour l'exemple) donc si c'est le cas pour vous, activez l'authentification à deux facteurs et changez votre mot de passe.
Vérifiez également sur ce site si votre adresse a été compromise.
Il détecte également les sites où vous avez pas activer l'authentification à deux facteurs.
Une option très intéressante est le générateur de mots de passe et de noms d'utilisateur. Je pense que je vais l'utiliser pour mes applications Docker.
Option que je vous recommande fortement d'activer c'est la saisie automatique de vos identifiants lorsque vous êtes sur la page d'authentification d'un site. Fini la saisie manuelle!!!!!
Vous pouvez exportez le coffre en différents formats
Enfin, pensez à désactiver l'option "Proposer d'enregistrer les mots de passe" pour ne rien enregistrer en local (navigateur Brave pour l'exemple).
5-Authentification 2FA
On va éviter d'utiliser Authelia et privilégier l'authentification via l'application pour éviter les erreurs d’accès.
Tout en haut à droite, cliquez sur "Paramètres du compte".
Dans "sécurité", cliquez sur l'onglet "Authentification à deux facteurs".
Pour ce tutoriel, on va utiliser Google Authenticator.
Installer l'application sur votre smartphone et scannez le QR Code.
Puis entrez le code à 6 chiffres fournis par l'application.
Vous avez activer l’authentification à deux facteurs sur Vaultwarden.
Cliquez sur "Voir le code de vérification" pour sauvegarder ce dernier en cas de perte ou vol de votre PC ou de votre smartphone.
Imprimez le code par précaution et cachez là dans un de vos bouquins.
À la prochaine connexion, Vaultwarden vous demandera le code à 6 chiffres.