Files
docudjeex/content/fr/3.serveex/9.apps/2.vaultwarden.md
T

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

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é !

::

:::

::::