11 KiB
title, description
| title | description |
|---|---|
| Vaultwarden | Installer Vaultwarden, un gestionnaire de mots de passe auto-hébergé compatible Bitwarden, pour remplacer ceux de Google ou d'Apple sur tous vos appareils. |
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
Vaultwarden est une solution de gestion de mots de passe (génération, remplissage automatique...) que vous pouvez héberger directement sur votre serveur. Elle remplace les gestionnaires du type Google, Apple ou Keepass. Vaultwarden synchronise vos mots de passe sur tous vos appareils avec un chiffrement de bout en bout.
Vaultwarden est un fork de Bitwarden.
Installation
::file-tree
tree: /: - srv: - docker: - vaultwarden: - data/ - compose.yaml - .env
::
::steps{level="3"}
Déployer la stack
Ouvrez Dockge, cliquez sur compose, nommez la stack vaultwarden, et collez ce qui suit :
---
services:
vaultwarden:
container_name: vaultwarden
image: vaultwarden/server:latest
restart: unless-stopped
env_file:
- .env
volumes:
- ./data/:/data/
ports:
- 3050:80
environment:
- DOMAIN=${URL}
- LOGIN_RATELIMIT_MAX_BURST=10
- LOGIN_RATELIMIT_SECONDS=60
- ADMIN_RATELIMIT_MAX_BURST=10
- ADMIN_RATELIMIT_SECONDS=60
- ADMIN_TOKEN=${TOKEN}
- SENDS_ALLOWED=true
- EMERGENCY_ACCESS_ALLOWED=true
- WEB_VAULT_ENABLED=true
- SIGNUPS_ALLOWED=false
- SIGNUPS_VERIFY=true
- SIGNUPS_VERIFY_RESEND_TIME=3600
- SIGNUPS_VERIFY_RESEND_LIMIT=5
::tip{icon=""} ✨ Astuce : ajoutez le label Watchtower dans chaque conteneur pour automatiser les mises à jour
---
services:
vaultwarden:
#...
labels:
- com.centurylinklabs.watchtower.enable=true
::
Renseigner vos variables d'environnement
Générez ensuite un hash de mot de passe à mettre dans la variable TOKEN du .env :
echo -n 'votremotdepasse' | argon2 "$(openssl rand -base64 32)" -e -id -k 65540 -t 3 -p 4
Copiez le résultat en lieu sûr.
Dans le fichier .env, renseignez les variables suivantes :
URL=
TOKEN=
| Variable | Valeur | Exemple |
|---|---|---|
URL |
L'URL de votre serveur Vaultwarden | https://vault.mondomaine.fr |
TOKEN |
Le token copié précédemment | '$argon2id$v=19$m=65540,t=3,p=4$bXBGME... |
Déployez ensuite le conteneur.
Depuis peu, Vaultwarden exige du SSL pour être accessible, ce qui empêche l'accès via une IP locale. Nous allons l'exposer avec SWAG, qui fournit un certificat SSL.
Terminé !
::
::caution
Si ça ne marche pas : vérifiez les règles de votre pare-feu. ::
Exposer Vaultwarden avec SWAG
Le principal intérêt de Vaultwarden est de pouvoir y accéder à distance depuis n'importe quel appareil. Nous allons l'exposer à travers SWAG.
::note{icon="" to="/general/networking/nat"}
📋 Au préalable : assurez-vous d'avoir créé un sous-domaine DNS du type vault.mondomaine.fr avec un CNAME pointant vers mondomaine.fr et (à moins d'utiliser Cloudflare Zero Trust) d'avoir redirigé le port 443 de votre box vers le 443 de votre serveur via les règles NAT.
::
::steps{level="3"}
Ajouter le réseau de Vaultwarden à SWAG
Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau de Vaultwarden :
---
services:
swag:
container_name: # ...
# ...
networks: # Rattache le conteneur au réseau personnalisé
# ...
- vaultwarden # Nom du réseau déclaré
networks: # Définit le réseau personnalisé
# ...
vaultwarden: # Nom du réseau déclaré
name: vaultwarden_default # Nom réel du réseau externe
external: true
::note
Nous partons du principe que le nom du réseau est vaultwarden_default. Vous pouvez vérifier la connectivité en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81.
::
Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel.
Créer le fichier subdomain.conf
Dans le dossier de configuration de SWAG, créez le fichier vault.subdomain.conf :
::tip{icon="" to="/serveex/files/file-browser-quantum"} ✨ Astuce : utilisez File Browser Quantum pour naviguer et modifier les fichiers plutôt que des commandes dans le terminal. ::
sudo nano /srv/docker/swag/config/nginx/proxy-confs/vault.subdomain.conf
Et collez la configuration suivante :
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name vault.*;
include /config/nginx/ssl.conf;
client_max_body_size 128M;
# enable for ldap auth (requires ldap-location.conf in the location block)
#include /config/nginx/ldap-server.conf;
# enable for Authelia (requires authelia-location.conf in the location block)
#include /config/nginx/authelia-server.conf;
# enable for Authentik (requires authentik-location.conf in the location block)
#include /config/nginx/authentik-server.conf;
location / {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth
#include /config/nginx/ldap-location.conf;
# enable for Authelia
#include /config/nginx/authelia-location.conf;
# enable for Authentik
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app vaultwarden;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ ^(/vaultwarden)?/admin {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable for ldap auth
#include /config/nginx/ldap-location.conf;
# enable for Authelia
#include /config/nginx/authelia-location.conf;
# enable for Authentik
#include /config/nginx/authentik-location.conf;
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app vaultwarden;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/vaultwarden)?/api {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app vaultwarden;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
location ~ (/vaultwarden)?/notifications/hub {
include /config/nginx/proxy.conf;
include /config/nginx/resolver.conf;
set $upstream_app vaultwarden;
set $upstream_port 80;
set $upstream_proto http;
proxy_pass $upstream_proto://$upstream_app:$upstream_port;
}
}
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Terminé !
::
Et voilà ! Vaultwarden est maintenant exposé ! Rendez-vous sur https://vault.mondomaine.fr/admin pour accéder au panneau d'administration et collez le mot de passe que vous avez indiqué lors de la génération de l'ADMIN_TOKEN. Pour plus d'informations, voir la documentation Bitwarden.
N'oubliez pas d'installer les extensions navigateur Bitwarden (elles fonctionnent avec Vaultwarden) pour Chrome et Firefox, ainsi que les applications iOS et Android pour synchroniser vos mots de passe.
Protéger Vaultwarden avec Pocket ID
Contrairement à la plupart des applications de ce site, Vaultwarden gère OIDC nativement, il n'y a donc pas besoin ici du proxy forward-auth de TinyAuth ni de l'astuce reverse-proxy d'Authentik : Vaultwarden lui-même peut exiger une connexion OIDC avant de laisser qui que ce soit entrer dans le coffre.
::steps{level="3"}
Enregistrer Vaultwarden comme client OIDC
Enregistrez un client OIDC dans Pocket ID (ou dans Authentik, ou tout autre fournisseur OIDC) avec cette URL de callback :
https://vault.mondomaine.fr/identity/connect/oidc-signin
Ajouter les variables SSO
Modifiez le fichier .env de Vaultwarden :
sudo nano /srv/docker/vaultwarden/.env
Ajoutez ceci :
SSO_ENABLED=true
SSO_ONLY=true
SSO_AUTHORITY=https://id.mondomaine.fr
SSO_CLIENT_ID=
SSO_CLIENT_SECRET=
| Variable | Valeur |
|---|---|
SSO_AUTHORITY{lang=properties} |
L'URL publique de votre fournisseur OIDC (Pocket ID ici) |
SSO_CLIENT_ID{lang=properties} |
Le client ID copié depuis votre fournisseur |
SSO_CLIENT_SECRET{lang=properties} |
Le client secret copié depuis votre fournisseur |
::note
Mettez plutôt SSO_ONLY=false si vous préférez garder aussi la possibilité de vous connecter avec un mot de passe maître local.
::
Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.
Redéployer la stack
Redéployez Vaultwarden. Votre prochaine visite sur https://vault.mondomaine.fr demandera une connexion SSO plutôt que (ou en plus de) le mot de passe maître local.
Terminé !
::
::note{to="https://github.com/dani-garcia/vaultwarden/wiki/Enabling-SSO-support-using-OpenId-Connect"} Voir le wiki SSO de Vaultwarden pour la liste complète des options, y compris l'application par organisation et les politiques de mot de passe maître. ::
::::tip{icon=""} ✨ Vous pouvez utiliser Authentik plutôt que Pocket ID :
:::collapsible{name="les étapes de configuration Authentik"} ::steps{level="4"}
Créer un scope mapping pour le claim email
Dans Authentik, créez un scope mapping nommé email avec l'expression return {"email": request.user.email, "email_verified": True} (Vaultwarden exige ce claim).
Créer l'application et le provider
Créez une application et un provider OAuth2/OpenID Connect nommé Vaultwarden, avec une redirect URI (de type Strict) valant https://vault.mondomaine.fr/identity/connect/oidc-signin. Dans les Advanced protocol settings, réglez la validité du token d'accès à plus de 5 minutes, remplacez le scope email par défaut par votre mapping personnalisé, et ajoutez le scope mapping offline_access.
Renseigner les variables d'environnement de Vaultwarden
Notez les Client ID, Client Secret et Slug du provider, puis utilisez-les dans le .env de Vaultwarden :
SSO_AUTHORITY=https://authentik.mondomaine.fr/application/o/<slug>/
SSO_CLIENT_ID=
SSO_CLIENT_SECRET=
SSO_SCOPES=email profile offline_access
Terminé !
::
:::
::::
