Protégez vos mots de passe avec Vaultwarden

Aujourd’hui nous allons installer un gestionnaire de mots de passe. Il s’agit d’une application qui va vous permettre de stocker en un endroit sécurisé l’ensemble des mots de passe (voire à terme des clés de passe) liés à vos comptes en ligne. L’intérêt d’un tel gestionnaire est de vous permettre de créer des mots de passe très sécurisés, aléatoires, sans vous préoccuper de les retenir. De la sorte, personne ne connaît vos mots de passe, … pas même vous.

Evidemment, un gestionnaire de mots de passe doit être mis en place sur une infrastructure la plus sécurisée possible. D’où les travaux que nous avons menés autour de la mise en oeuvre de Swag et de Crowdsec. Nous ne pouvons déployer Vaultwarden qu’après nous être assurés que ces deux outils fonctionnent correctement.

L’installation de Vaultwarden est assez simple. L’outil est conçu nativement pour être mis en place avec Docker.

Vaultwarden est un serveur de mots de passe basé sur Bitwarden. Vous pourrez ainsi installer les apps de Bitwarden sur votre téléphone et les extensions de la même application sur vos navigateurs.

Créer du serveur Vaultwarden

Nous allons donc nous connecter à notre Raspberry Pi puis créer un répertoire vaultwarden.

sudo mkdir vaultwarden

Puis, comme vous l’aurez deviné, nous allons créer un fichier docker-compose.yml.

sudo nano docker-compose.yml

Et nous allons lui donner les éléments suivants :

services:
  vaultwarden:
    image: vaultwarden/server:latest
    container_name: vaultwarden
    restart: unless-stopped
    ports:
      - 8080:80
    environment:
      - LOG_FILE=/var/log/vaultwarden.log
      - TZ=Europe/Paris
      - WEBSOCKET_ENABLED=true
      - ADMIN_TOKEN=<mot de passe d'aministration>
      - PUID=1000
      - PGID=1000
    volumes:
      - /srv/nas/vaultwarden:/data
      - logs:/var/log

volumes:
  logs:
    external: true

Voyons les nouveaux éléments apportés par ce fichier :

  • le port 80 du conteneur est routé vers une autre valeur de port sur notre Pi car nous avons déjà réservé le port 80 du Raspberry Pi pour Swag,
  • nous allons écrire le journal de Vaultwarden dans le fichier /var/log/vaultwarden.log, que nous allons loger dans le volume « logs » (cf. un peu plus bas), de manière à permettre à Crowdsec d’y accéder,
  • nous allons créer un jeton (token) d’administration de notre base Vaultwarden ; il est conseillé de faire générer ce jeton par un générateur de mot de passe tel que celui géré par Bitwarden ou son générateur en ligne,
  • vous remarquerez que comme pour Crowdsec et Swag, nous utilisons le volume « logs » qui permet aux applications de transmettre leurs journaux à Crowdsec.

Nous lançons le serveur :

sudo docker compose up -d

Après quelques secondes, notre coffre-fort est opérationnel.

Il nous faut maintenant mettre en place son accès via notre proxy inverse et sa sécurisation via Crowdsec.

Intégrer notre serveur Vaultwarden

Pour intégrer notre nouveau serveur de mots de passe dans notre système, nous allons tout d’abord le sécuriser avec Crowdsec avant d’en ouvrir l’accès à l’extérieur avec Swag. Nous allons donc dans le répertoire crowdsec :

cd ~/crowdsec

Là, nous allons indiquer, dans le fichier crowdsec/acquis.yaml, comment lire le journal de Vaultwarden.

sudo nano crowdsec/acquis.yaml

Nous ajoutons à la fin de notre fichier les lignes suivantes :

---
filenames:
 - /var/log/vaultwarden.log
labels:
  type: Vaultwarden

Nous relançons le conteneur crowdsec :

sudo docker compose down
sudo docker compose up -d

Nous allons maintenant mettre en oeuvre dans Crowdsec le moteur d’analyse du journal. Pour cela, nous entrons dans le conteneur de Crowdsec :

sudo docker exec -ti crowdsec /bin/sh

Et nous ajoutons la collection vaultwarden :

cscli collections install Dominic-Wagner/vaultwarden
exit

Vaultwarden est maintenant sécurisé par Crowdsec. Nous allons ouvrir son accès via notre proxy inverse :

cd ~/swag

L’un des intérêts de Swag est de disposer d’une bibliothèque de fichiers de configuration pour les applications auto-hébergées les plus populaires. Ainsi, si nous regardons les fichiers de configuration proposés, nous devrions trouver un fichier pour Vaultwarden :

ls config/nginx/proxy-confs/

Je vous propose de retenir le principe de gérer vos applications sous la forme de sous-domaines, c’est-à-dire pour un accès via https://application.domaine.tld. L’alternative serait d’y accéder via un sous-répertoire, c’est-à-dire https://www.domaine.tld/application.

Nous allons donc ouvrir le fichier config/nginx/proxy-confs/vaultwarden.subdomain.conf.sample.

sudo nano config/nginx/proxy-confs/vaultwarden.subdomain.conf.sample

Je vous conseille de vous approprier le contenu de ce fichier ; vous retrouverez la même structure pour l’ensemble des fichiers de configuration de Swag. Vous ne devriez avoir à changer que le numéro du port utilisé (dans notre exemple 8080 au lieu de 80, à chaque fois que ce numéro de port apparaît dans le fichier) pour le mettre en production.

Si nous avons activé le filtrage géographique dans Swag, il ne faut pas oublier d’ajouter les deux lignes suivantes avant de fermer le fichier :

 server {
     listen 443 ssl;
     listen [::]:443 ssl;

     server_name some-app.*;
     include /config/nginx/ssl.conf;
     client_max_body_size 0;

     if ($lan-ip = yes) { set $geo-whitelist yes; }
     if ($geo-whitelist = no) { return 404; }

     location / {

Il suffit ensuite de l’enregistrer sous un autre nom se terminant en .conf pour qu’il soit pris en compte par Swag. Pour cela, nous tapons CTRL+O. Cela ouvre en bas de l’écran une boîte de dialogue afin de spécifier le nouveau nom que nous souhaitons donner au fichier. Nous enlevons le .sample de la fin du nom pour aboutir à config/nginx/proxy-confs/vaultwarden.subdomain.conf. Et nous refermons le fichier.

Nous allons maintenant indiquer à Swag de prendre en compte le sous-domaine vaultwarden. Nous arrêtons le conteneur Swag :

sudo docker compose down

Nous ouvrons le fichier docker-compose.yml :

sudo nano docker-compose.yml

Et nous allons le modifier pour ajouter le sous-domaine vaultwarden :

---
services:
  swag:
    image: lscr.io/linuxserver/swag:latest
    container_name: swag
    environment:
      - PUID=1000
      - PGID=1000
      - TZ="Europe/Paris"
      - URL=yourdomain.url
      - VALIDATION=http
      - SUBDOMAINS=www,vaultwarden
      - CERTPROVIDER= #optionnel
    volumes:
      - ./config:/config
    ports:
      - 443:443
      - 80:80 #optionnel
    cap_add:
      - NET_ADMIN
    restart: unless-stopped

Il nous reste maintenant à créer un enregistrement dédié à Vaultwarden chez notre registraire (fournisseur de nom de domaine). Nous allons sur le site de notre registraire, dans la zone DNS et nous ajoutons une entrée A dans laquelle nous saisissons le sous-domaine vaultwarden et notre adresse IP publique.

Une fois cette entrée saisie, noter dispositif est pleinement opérationnel. Nous pouvons nous y connecter via https://vaulwarden.domaine.ltd.

Nous allons maintenant créer notre compte en choisissant l’option « Créer un compte :

Après la saisie des éléments proposés, notre compte est désormais disponible.

Afin de sécuriser au mieux votre compte, je vous invite à vous connecter et à vous diriger vers les paramètres du compte.

Puis à choisir le volet Sécurité et l’onglet « Authentification à deux facteurs ».

Et à mettre en place l’une des méthodes d’authentification proposées : votre gestionnaire de mots de passe est l’une des applications les plus sensibles de votre serveur, il est donc nécessaire de le doter de la meilleure sécurité possible.

Je vous conseille également d’aller voir sur https://vaultwarden.domaine.ltd/admin les options d’aministration de votre base Vaultwarden en tapant le jeton que nous avons défini plus haut.

Paramétrer les apps et extensions

Nous pouvons installer l’app Bitwarden sur notre téléphone et l’extension du même nom sur notre navigateur internet. Pour nous connecter à notre coffre fort, nous devrons indiquer que notre instance est auto-hébergée.

Cela ouvrira une boîte de dialogue nous permettant de saisir l’adresse de notre serveur (dans la première zone de dialogue) :

Nous pouvons ensuite saisir l’adresse courriel de notre compte et le mot de passe correspondant et accéder à nos mots de passe.


Si vous avez apprécié cet article, n’hésitez pas à laisser à son auteur un petit commentaire : il l’encouragera à le maintenir et à le développer.


Commentaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *