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

Pour déployer Vaultwarden, vous devez disposer d'une machine virtuelle fonctionnant sous Ubuntu Server.

Création de la machine virtuelle :

Virtualisation avec Proxmox VE : Si vous partez de zéro, suivez mon guide détaillé pour virtualiser Ubuntu sur Proxmox VE avec des réglages optimisés.

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

Automatisation avec Cloud-Init : Pour gagner du temps lors de la configuration, utilisez un template Cloud-Init. Cela permet d'automatiser et de simplifier l'initialisation de vos machines virtuelles. Retrouvez les instructions dans ce guide.

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

Installation des outils nécessaires :

Docker et Docker Compose : Une fois la machine virtuelle prête, installez Docker et Docker Compose, indispensables pour gérer et orchestrer vos conteneurs. Ce guide vous accompagnera dans l'installation.

Installer Docker
Guide d’installation de Docker.

Exposition de l'application :

Proxy inverse avec Traefik : Pour exposer vos applications sur Internet de manière sécurisée, configurez un proxy inverse. Traefik est une solution recommandée. Suivez ce guide pour l'installation.

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.

networks:
# default network
  default:
    driver: bridge
# Traefik network
  web:
    name: web
    driver: bridge

services:

  traefik:
    container_name: traefik
    image: traefik:v2
    restart: always
    networks:
      - web
    ports:
      - 80:80
      - 443:443
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ${APPDATA}/traefik/traefik.yml:/traefik.yml
      - ${APPDATA}/traefik/dynamic.yml:/dynamic.yml
      - ${APPDATA}/traefik/letsencrypt/acme.json:/acme.json
      - ${APPDATA}/traefik/shared:/shared
    labels:
      - traefik.enable=true
      - traefik.http.routers.traefik.entrypoints=websecure
      - traefik.http.routers.traefik.rule=Host(`traefik.<domain_name>`)
      - traefik.http.routers.traefik.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.<domain_name>`)
      - 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.