Installer Vaultwarden avec Docker

Guide d'installation de Vaultwarden sous Docker.

Installer Vaultwarden avec 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.

« Choisir Rust est opter pour une meilleure sécurisation des logiciels qu’avec le C, mais une efficacité énergétique et une performance d’exécution que seul le C offre », d’après l’équipe AWS
Rust de Mozilla Research est le type de langage de programmation auquel ceux qui écrivent du code pour des systèmes d’entrée/sortie de base (BIOS), des chargeurs d’amorce, des systèmes d’exploitation, etc. portent un intérêt. D’avis d’observateurs avertis, c’est le futur de la programmation système…

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.

Bitwarden vs Vaultwarden (RUST, formerly Bitwarden_RS)
Hello @XploD and welcome, It’s a wonderful question and one that has come up from time to time. Often some members here have inadvertently installed Vaultwarden thinking it was the official release without realizing. To say Vaultwarden is a fork of Bitwarden is something that makes it easy to unde…
GitHub - dani-garcia/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs
Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs - GitHub - dani-garcia/vaultwarden: Unofficial Bitwarden compatible server written in Rust, formerly known as…

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.

Virtualiser Ubuntu Server 22.04 LTS sur Proxmox VE
Guide d’installation de Ubuntu Server 22.04 LTS sur Proxmox VE avec mes meilleurs réglages.

Si vous voulez gagner du temps, utilisez un template cloud-init.

Initialiser vos machines virtuelles avec Cloud-init sur Proxmox VE
Guide d’installation de Cloud-Init qui va vous permettre d’automatiser vos déploiements

Ensuite, suivez ce guide pour installer Docker, Docker Compose et préparer vos variables d'environnement.

Installer Docker
Guide d’installation de Docker.

Enfin, pour exposer l'application sur l'internet public, il vous faudra déployer Traefik.

Installer Traefik avec Docker
Guide d’installation de 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.

Bitwarden - Gestion des mots de passe
Un gestionnaire de mots de passe sécurisé et gratuit pour tous vos appareils.
Bitwarden – Gestionnaire de mots de passe gratuit – Adoptez cette extension pour 🦊 Firefox (fr)
Télécharger Bitwarden – Gestionnaire de mots de passe gratuit pour Firefox. Un gestionnaire de mots de passe sécurisé et gratuit pour tous vos appareils

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.

Have I Been Pwned: Check if your email has been compromised in a data breach
Have I Been Pwned allows you to search across multiple data breaches to see if your email address or phone number has been compromised.

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.