Introduction
Bitwarden est un coffre fort numérique auto hébergé Open Source permettant de stocker ses mots de passes et notes sécurisés. Le coffre fort est chiffré grâce grâce à un chiffrement surpuissant (AES-256). Le déverrouillage du coffre peut seulement se faire via un mot de passe maître et éventuellement avec une authentification 2FA. On ne présente plus l’avantage de ce type de solution : très sur, aucun mots de passes stocker sur les périphériques, remplissage automatique des champs pour les authentifications … Il contient aussi quelques outils intéressants comme des import/export de bases, des tests de compromissions de mot de passe, la génération de mot de passe fort… Il nécessite un petit plugin à installer sur vos navigateurs ou sur votre téléphone pour déverrouiller le coffre fort. Nous allons installer ‘bitwarden‘ derrière un reverse proxy (voir l’article sur l’installation de swag) avec docker compose et portainer dans cette article.
Pour cette installation j’utilise une image docker alternative ‘Vaultwarden‘ bien plus performante développé en Rust, qui est présente ici : https://github.com/dani-garcia/vaultwarden.
Remarque : J’ai créé au préalable un utilisateur omdocker (voir l’article création d ‘un utilisateur Docker pour le détail). J’ai créé aussi un répertoire qui contiendra tous mes installations docker. dans ce blog, j’utiliserais pour exemple le chemin /volume/docker. |
Nous allons créer aussi le répertoire ‘bitwarden’ en ligne de commande sur le NAS (connexion en SSH) dans notre répertoire docker : /volume/docker. Cette étape est facultative, le containeur créera le répertoire automatiquement lors du déploiement si celui ci n’existe pas.
$ cd /volume/docker
$ mkdir bitwarden
Le fichier de configuration
Si vous souhaitez sécuriser le lancement de ‘bitwarden‘, je vous engage à parcourir l’article securiser docker.
Il est importent de bien respecter l’indentation des fichiers de configurations : pas de tabulation. Attention aussi à la version du fichier, il y a des légères évolutions de syntaxe d’une version à l’autre.
Le fichier yml en détails. Il faut remplacer pour votre configuration (les lignes en gras sont facultatives) :
- TZ : Votre zone de temps,
- UID et PGID : celui de votre utilisateur Docker (omdocker pour ce blog),
- volume/docker : Le chemin vers le répertoire de votre application,
- networks : Il faut relier ‘bitwarden’ à votre réseau ‘swag‘ (ou équivalent) si vous souhaiter pourvoir accéder à l’application depuis l’extérieur. Voir en bas de l’article.
- SIGNUPS_ALLOWED : permet la création d’utilisateur. Il faudra le mettre à ‘false’ par la suite si vous ne voulez pas offrir la possibilité de créer d’autres utilisateurs.
- DOMAIN : A rajouter pour les 2FA de type ‘WebAuthn’
- ADMIN_TOKEN : Clé aléatoire de 64 caractères à générer pour pouvoir accéder au mode ‘administration’ du serveur. Si vous n’en avez pas l’utilité, il vaux mieux le désactiver par sécurité. Voir juste en dessous du fichier de configuration pour la commande.
version: '3'
services:
bitwarden:
image: vaultwarden/server:latest
container_name: bitwarden
read_only: true
user: 1003:100
volumes:
- /volume/docker/bitwarden:/data:rw #
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=true
- ADMIN_TOKEN=votretoken
- DOMAIN=https://subdomain.mondomaine.org/
pids_limit: 100
mem_limit: 100m
cpus: 0.5
cpu_shares: 512
restart: unless-stopped
cap_drop:
- ALL
networks:
default:
external:
name: swag_default
Génération du token
Nous avons vus plus haut qu’il fallait générer une clé aléatoire de 40 caractères pour pouvoir accéder à l’administration du coffre fort. Pour générer la clé, taper la commande suivante dans une console en SSH et recopier la suite de 40 caractères obtenue dans le fichier de configuration :
$ sudo openssl rand -base64 48
Vous copiez le contenu du fichier de config dans votre interface de gestion Portainer en allant dans ‘Stacks‘ et ‘Add stack‘.

Donnez un nom à votre pile, par exemple ‘bitwarden‘, puis déployer cotre containeur en cliquant en bas sur « Deploy the stack‘.
Après une phase de téléchargement de l’image, puis d’installation de l’application, vous devriez arriver sur cet écran si tout s’est bien passé :

Nous pouvons maintenant nous connectez à ‘bitwarden‘ avec l’URL : https://subdomain.domain.org (voir la configuration Swag plus bas). Pour accéder à l’interface d’administration, utiliser l’URL suivant : https://subdomain.domain.org/admin/ (pour rappel, il vaut mieux désactiver cette option pour une utilisation de tous les jours).
Si tout s’est bien passé, vous devriez arriver sur ce premier écran :

Cliquez sur ‘créer un compte’. Une fois que le compte sera créer, vous pourrez désactiver la variable ‘SIGNUPS_ALLOWED‘ dans la pile en la positionnant sur ‘false‘. Vous devrez relancer le containeur pour qu’il prenne en compte la modification.

Une fois le compte créer, vous arrivez à la page d’accueil de votre coffre fort. la 1ère chose que je vous conseil de faire est d’activer l’authentification en deux étapes ( 2FA) en allant dans les paramètres de compte du profil (en haut à droite) et menu ‘sécurité‘, puis onglet ‘Identification en deux étapes‘ :
Remarque : Eviter si possible une 2FA par email qui est la solution la moins fiable en terme de sécurité. J’utilise pour ma part une clé USB de sécurité en principale et une application d’authentification de type « Google Authentificator » en secours sur mon téléphone. |

Configuration du client sur les périphériques
Nous allons prendre l’exemple de la configuration sur le navigateur Brave / Chrome. Après avoir installer et activer l’extension, vous devez indiquer l’adresse de votre coffre fort en cliquant sur la roue en haut à gauche :


Sur un téléphone, la configuration initiale est identique; il faut en premier lieu renseigner l’URL de votre coffre fort du type https://bitwarden.mondomaine.org
Configuration de Swag
La configuration d’un containeur avec ‘swag‘ est la plupart du temps très simple. ‘swag‘ propose par défaut des fichiers de configurations prédéfinis pour de nombreux services.
Ces fichiers se trouvent dans le répertoire d’installation de swag : /volume/docker/swag/nginx/proxy-confs/ :

Nous allons simplement recopier ce fichier et le renommer ‘bitwarden.subdomain.conf’.
$ cd /volume/docker/swag/nginx/proxy-confs/
$ cp bitwarden.subdomain.conf.sample bitwarden.subdomain.conf
Nous relançons le containeur swag soit via ‘Portainer‘, soit en ligne de commande ‘sudo docker restart swag‘ pour qu’il prenne en charge la redirection du containeur ‘bitwarden‘.