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.
Laisser un commentaire