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 à 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 : vraiment sûr, aucun mots de passes stocker sur les périphériques, remplissage automatique des champs pour les authentifications…etc Il contient aussi quelques outils intéressants comme des imports/export de bases, des tests de compromissions de mot de passe, la génération de mot de passe fort…etc 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 cet article.
Pour cette installation j’utilise une image docker alternative ‘Vaultwarden’ bien plus performant, développé en Rust, qui est présente ici : github.com/dani-garcia/vaultwarden.
Nous utiliserons ‘swag’ (voir article installation de swag) pour accéder à notre serveur depuis l’extérieur. L’installation a été effectuée sur le Nas ‘OMV’, mais la procédure sera la même dans un container LXC ou LXD.
Remarque : J’ai créé au préalable un utilisateur omdocker (voir l’article création d’un utilisateur). J’ai créé aussi un répertoire qui contiendra toutes 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.
mkdir bitwarden
Le fichier de configuration
Si vous souhaitez sécuriser le lancement de ‘bitwarden‘, je vous engage à parcourir l’article sécuriser Docker.
Il est important 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 :
- volume/docker : Le chemin vers le répertoire de votre application,
- PUID et PGID : celui de votre utilisateur Docker (omdocker chez moi),
- TZ : Votre zone de temps,
- 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,
- networks : Il faudra relier votre container au réseau de ‘swag’ pour un accès extérieur.
- 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 # optionnel
mem_limit: 100m # optionnel
cpus: 0.5 # optionnel
cpu_shares: 512 # optionnel
restart: unless-stopped # optionnel
cap_drop: # optionnel
- ALL # optionnel
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 :
Vous copiez le contenu de ce fichier 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://bitwarden.subdomain.domain.org (voir la configuration Swag plus bas). Pour accéder à l’interface d’administration, utiliser l’URL suivant : https://bitwarden.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 conseille 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 : éviter si possible une 2FA par email qui est la solution la moins fiable en termes 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 installé 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’.
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’.
Nous pouvons maintenant nous connecter à ‘bitwarden’ depuis l’extérieur avec l’URL https://bitwarden.subdomain.domain.tld (Le domaine et le sous domaine est à adapter suivant le vôtre).