--- title: "Comment installer Bitwarden en Rust avec Docker" date: "2020-09-30T11:27:41" draft: false slug: "bitwarden-rust" wordpress_id: 603 excerpt: "Jusqu’à il a trois semaines je n’utilisais pas de gestionnaire de mot de passe (ou du moins presque).…\n" featured_image: "https://www.mistergeek.net/wp-content/uploads/2020/12/bitwarden.jpg" author: "Kevin" categories: ["Informatique"] tags: [] section: "informatique" --- Jusqu’à il a trois semaines je n’utilisais pas de gestionnaire de mot de passe (ou du moins presque). En effet j’avais un Enpass qui faisait l’affaire sur mon PC mais il était très limité. Pour synchroniser Enpass avec ses différents terminaux c’est gratuit, mais pour afficher plus de 20 comptes il faut payer. En open source il existe Bitwarden en version auto-hébergé, or c’est développé en C# et ça utilise une base de données Microsoft SQL Server. Un truc bien lourd pour quelque chose qui n’est censé que stocker des mots de passe. Heureusement Internet est grand et il y a quelqu’un qui s’est décidé à développeur un moteur Bitwarden en Rust.

sudo pour avoir les droit root. Ces commandes peuvent s’exécuter en tant que super-utilisateur.
Installer les paquets prérequis pour l’installation.
sudo apt-get install \ apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
Ajouter la clé GPGP du dépôt Docker
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Ajouter le dépôt Docker aux sources d’APT.
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
Mettre à jour l’index des paquets et installer Docker CE.
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
Pour vérifier que l’installation s’est bien passé, vérifier la version du logiciel.
docker -v
Il se peut que Docker n’installe pas de lui même Compose, qui est un outil qui permet de gérer les containers en utilisant un fichier YAML. En somme cela permet d’avoir des configurations qui peuvent se répliquer entre plusieurs serveurs.
Installer Docker-Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Appliquer les droits d’éxecution sur le binaire.
sudo chmod +x /usr/local/bin/docker-compose
sudo docker network create web
Créer un dossier dans lequel est stocké les configurations et données du container Traefik. Se déplacer dans ce dossier.
mkdir traefik && cd traefik
Docker-Compose utilise un fichier nommé docker-compose.yml pour créer et configurer les containers nécessaires. Ce fichier contient les services qui tournent, les ports ouverts, les volumes (qui permettent de sauvegarder les données) et les réseaux utilisés.Ici on utilise Traefik v1.7 qui fonctionne. La version 2 existe, mais casse littéralement cette configuration. Traefik dispose d’un tableau de bord qui écoute par défaut sur le port 8080. Ici on demande à Traefik de se proxifier lui même en permettant l’accès du tableau de bord depuis le nom d’hôte mavm.mondomaine.fr. Traefik utilise deux réseaux : web et default. Le premier est externe à la configuration et le second est le réseau par défaut de Docker.
Editer le fichier docker-compose.yml comme suit :
version: '3'
networks:
web:
external:
name: web
default:
driver: bridge
services:
traefik:
container_name: 'traefik'
image: traefik:v1.7
restart: always
volumes:
- ./data/traefik.toml:/etc/traefik/traefik.toml
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/acme:/etc/traefik/acme
- ./data/ssl:/etc/traefik/ssl
- ./data/rules.toml:/etc/traefik/rules.toml
environment:
- "affinity:container!=traefik*"
ports:
- "80:80"
- "443:443"
labels:
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.port=8080"
- "traefik.entryPoint=https"
- "traefik.backend=traefik"
- "traefik.frontend.rule=Host:mavm.mondomaine.fr"
networks:
- web
- default
On configure maintenant Traefik en tant que serveur web et pour que la redirection vers du HTTP soit automatique. Ici Traefik va écouter les containers Docker et verifier les labels afin de l’utiliser comme service.
Editer le fichier traefik.toml du dossier data.
nano data/traefik.toml
defaultEntryPoints = ["http", "https"]
# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations
[web]
address = ":8080" #
[web.auth.basic] #
usersFile = "/shared/.htpasswd" # Force HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[file]
watch = true filename = "/etc/traefik/rules.toml" # Let's encrypt configuration
[acme]
email = "monadresseemail@mondomaine.fr" #any email id will work storage="/etc/traefik/acme/acme.json"
entryPoint = "https"
acmeLogging=true
onDemand = false #create certificate when container is created
onHostRule = true # Use a HTTP-01 acme challenge rather than TLS-SNI-01 challenge
[acme.httpChallenge]
entryPoint = "http" # Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "mavm.mondomaine.fr"
watch = true # This will hide all docker containers that don't have explicitly # set label to "enable"
exposedbydefault = false
On va maintenant gérer les domaines qu’on va mettre en ligne. À chaque domaine il faut ajouter les lignes qui vont bien dans un fichier rules.toml. On pense à y ajouter directement Bitwardan dans les domaines à valider.
Editer le fichiers des règles (rules.toml).
nano data/rules.toml
[[acme.domains]]
main = "mondomaine.fr"
sans = ["www.mondomaine.fr", "mavm.mondomaine.fr", "bitwarden.mondomaine.fr"]
[[acme.domains]]
main = "monseconddomaine.fr"
sans = ["www.monseconddomaine.fr", "srv-2.monseconddomaine.fr"]
Maintenant que tout est prêt on peut lancer Traefik et verifier que tout tourne avant même de lancer en allant sur l’hote qui héberge Traefik.

bitwarden.mondomaine.fr grâce aux labels vers le port 80 du container en HTTP. Traefik lui se charger de sécuriser les données externes au réseau Docker. Ici un seul réseau est utilisé : web. C’est celui qu’on a crée plus haut dans ce tutoriel.
Editer le docker-compose.yml
version: '3'
networks:
web:
external: true
services:
bitwarden:
image: bitwardenrs/server:1.16.3
volumes:
- ./data:/data
labels:
- "traefik.enable=true"
- "traefik.docker.network=web"
- "traefik.port=80"
- "traefik.entryPoint=http"
- "traefik.backend=bitwarden"
- "traefik.frontend.rule=Host:bitwarden.mondomaine.fr"
networks:
- web
Voilà ! On a maintenant Bitwarden sur notre VM avec un certificat TLS de Let’s Encrypt gratuit.
