Il faudrait utiliser la balise code pour que je vérifie si les espaces sont bien mis pour l'indentation
En attendant, supprime toute la partie concernant le backup du yml. Pour être sûr que Vaultwarden fonctionne bien tout seul
Si tu utilises Portainer, regarde bien la partie supérieure droite de la fenêtre, un message d'erreur s'y affichera s'il y en a une. Tu peux faire une capture d'écran si tu t'y prends vite
Re Salut ! J'ai une question petite question j'essaye de regarder de mon coté mais, en cas de pepins pour la restauration cela se passe comment ? Je vois qu'on obtient un ficher de BDD en sqlite3 et des clés mais il y une méthode même approximative ? (Que je me la mette dans un coin on ne sait jamais)
Au niveau de vaulwarden on peut importé des CSV mais je ne vois trop rien de plus
Re Salut ! J'ai une question petite question j'essaye de regarder de mon coté mais, en cas de pepins pour la restauration cela se passe comment ? Je vois qu'on obtient un ficher de BDD en sqlite3 et des clés mais il y une méthode même approximative ? (Que je me la mette dans un coin on ne sait jamais)
Au niveau de vaulwarden on peut importé des CSV mais je ne vois trop rien de plus
Bien vu, c’est une très bonne question.
Je n’ai jamais testé la restauration de ce backup ??
Il faudrait que je teste ça sur une instance temporaire.
La méthode est décrite ici : https://github.com/ttionya/vaultwarden-backup#restore
J'hébergeais déjà Bitwarden depuis un moment, mais il me manquait les notifications Websocket. J'ai un peu galéré mais j'ai réussi . merci pour le tuto
Bonsoir,
Il va falloir que je fasse une petite MAJ du tuto pour que les Notifications WebSocket continuent de fonctionner avec la dernière version de Vaultwarden 1.25.1.
Car avec ce tuto, normalement, ça ne fonctionnera plus.
Il faudra aussi modifier dans le docker-compose une variable d'environement pour la configuration SMPT, car celle utilisée est dépréciée.
Rappel : les Notifications WebSocket servent à la synchronisation en direct entre le coffre fort (serveur Vaultwarden), et les applications desktop (pas les mobiles) et les extensions de navigateurs.
Pour les WebSocket Notification, le correctif à appliquer est simple, il faut modifier la partir du script qui écrit le fichier websocket.locations.vaultwarden :
Avant :
Bash:
###########################################...## Début de la partie de création/modification de fichiers##if[ -f $LOC_DIR/websocket.locations.vaultwarden ];thenrm$LOC_DIR/websocket.locations.vaultwarden
part1=1fiecho"""
location /notifications/hub {
proxy_pass http://192.168.2.200:$PORT_CONT;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection \"upgrade\";
}
location /notifications/hub/negotiate {
proxy_pass http://192.168.2.200:$PORT_ACCES;
}
""">>$LOC_DIR/websocket.locations.vaultwarden
Il faudra aussi veiller à ce que le reverse proxy dans DSM pour le domaine de vaultwarden soit configuré ainsi pour les en-têtes personnalisés (il faudra supprimer les lignes qui ne sont pas sur la capture suivante et ajouter ce qui y est) :
Bon, j'ai fait encore une modification dans mon script websocket, afin de restreindre l'accès à la page d'admin aux seules IP LAN et VPN.
Je me rends compte que je n'ai pas non plus modifié le script du tuto depuis le passage à DSM7, car avec ce dernier il a fallu revoir la commande de recherche.
Le script suivant fonctionne avec DSM7 (et DSM6 si on décommente/commente les bonnes lignes) :
Ce qui a changé en plus de la commande de recherche/ajout, c'est surtout les proxy_headers pour le websockets.
Bash:
#!/bin/bash##==============================================================================================## #### Script vaultwarden__Enable_Websocket.sh #### #### Source : https://gist.github.com/nstanke/3949ae1c4706854d8f166d1fb3dadc81 #### ####==============================================================================================## #### Ce script pemet de router ce qui ne peut pas être fait avec le reverse-proxy #### de DSM (Synology) pour faire fonctionner les notifications Websocket #### Doc. vaultwarden : #### Route the /notifications/hub endpoint to the WebSocket server, by default #### at port 3012, making sure to pass the Connection and Upgrade headers. #### (Note the port can be changed with WEBSOCKET_PORT variable) #### https://github.com/dani-garcia/vaultwarden/wiki/Enabling-WebSocket-notifications #### ####==============================================================================================## #### Principe de Tâche planifier à créer #### #### Il faut lancer régulièrement le script car toutes modifications faites dans l'interface #### graphique du Reverse-Proxy de DSM va modifier le fichier de configuration. Il en va de #### même lorsque le NAS redémarre. #### ####==============================================================================================## #### /!\ Il faut modifier l'adresse IP en ligne 58 par l'IP du NAS /!\ #### ####==============================================================================================## #### Paramètres de lancement du script : #### bash /volume1/docker/bitwarden/enable_ws.sh vault.example.com 5555 5556 #### #### -- vault.example.com = Nom de domaine de vaultwarden (celui du Reverse Proxy de DSM) #### -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM) #### -- 5556 = Port exposé WEBSOCKET_PORT par Docker #### ####==============================================================================================##===========================================================================================================## #### Ma commande à lancer : #### bash /volume1//docker/_Scripts-DOCKER/Bitwarden_RS__Enable_Websocket.sh mon-ndd-a-moi.tld 8001 30120 #### ####===========================================================================================================LOC_DIR="/etc/nginx"part1=0part2=0MY_DOMAIN=$1PORT_ACCES=$2PORT_CONT=$3IP_NAS="192.168.2.200"echo -e "\n$(date"+%R:%S - ") Script Bitwarden_RS__Enable_Websocket.sh pour activer les Notifications Websockets"f_affiche_parametre(){echo" bash /volume1/docker/_Scripts-DOCKER/vaultwarden__Enable_Websocket.sh vault.example.com 5555 5556 "echo" -- vault.example.com = Nom de domaine de vaultwarden (celui du Reverse Proxy de DSM) "echo" -- 5555 = Port exposé ROCKET_PORT par Docker (Identique à celui du Reverse Proxy de DSM)"echo" -- 5556 = Port exposé WEBSOCKET_PORT par Docker"echoecho"La commande que tu dois lancer c'est : ./vaultwarden__Enable_Websocket.sh vtwrdn.pili-serv.ovh 882 3012"echo}if[!$# -eq 3];thenif[$# -eq 0];then# Aucun paramètre n'a été fourni. On va afficher la liste de ce qui peut être utilisé.echo"$(date"+%R:%S - ") Aucun paramètre fourni ! Revoir l'appel du script :"
f_affiche_parametre
elseecho"$(date"+%R:%S - ") Le nombre de paramètres fournis n'est pas correct ! Revoir l'appel du script :"
f_affiche_parametre
fiecho -e "$(date"+%R:%S - ") ECHEC de lancement du script !!!!!!!!!\n"exit1fiecho"$(date"+%R:%S - ") Exécution des commandes..."############################################################################################################### Début de la partie de création/modification de fichiers##if[ -f $LOC_DIR/websocket.locations.vaultwarden ];thenrm$LOC_DIR/websocket.locations.vaultwarden
part1=1fiecho"""
location /notifications/hub/negotiate {
proxy_http_version 1.1;
proxy_set_header \"Connection\"\"\";
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_pass http://$IP_NAS:$PORT_ACCES;
}
location /notifications/hub {
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection \"upgrade\";
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header Forwarded \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_pass http://$IP_NAS:$PORT_CONT;
}
location /admin {
# See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
# auth_basic "Private";
# auth_basic_user_file /path/to/htpasswd_file;
# For my Synology DSM, I created an Access Control Profiles to restrict access only to LAN and VPN IP adresses
# This Access Control Profile is a file in the /etc/nginx/conf.d folder
#include conf.d/.acl.8210faa5-6e80-40c3-9b29-38711430319d.conf*;
allow 192.168.2.0/24;
allow 192.168.10.0/24;
allow 192.168.11.0/24;
deny all;
proxy_http_version 1.1;
proxy_set_header \"Connection\"\"\";
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto \$scheme;
proxy_pass http://$IP_NAS:$PORT_ACCES/admin;
}
""">>$LOC_DIR/websocket.locations.vaultwarden
# Note : avec DSM7, le chemin d'accès du fichier server.ReverseProxy.conf a changé# DSM6.2 = /etc/nginx/app.d/server.ReverseProxy.conf# DSM7 = /etc/nginx/sites-enabled/server.ReverseProxy.confif!grep -q "websocket.locations.vaultwarden" /etc/nginx/sites-enabled/server.ReverseProxy.conf;then# Commandes fonctionnelles avec DSM6.2.x, mais plus avec DSM 7.0 (RC)#sed -i "/$1;/ a\ include $LOC_DIR/websocket.locations.vaultwarden;" /etc/nginx/app.d/server.ReverseProxy.conf#if nginx -t 2>/dev/null; then synoservicecfg --reload nginx; else exit 1; fi# Commande fonctionnelles avec DSM 7 (RC)sed -r "s#^([[:blank:]]*server_name[[:blank:]]*${MY_DOMAIN}[[:blank:]]*;[[:blank:]]*)\$#\1\n\n\t\tinclude ${LOC_DIR}/websocket.locations.vaultwarden;#" /etc/nginx/sites-enabled/server.ReverseProxy.conf > /etc/nginx/sites-enabled/server.ReverseProxy.conf.new
mv /etc/nginx/sites-enabled/server.ReverseProxy.conf.new /etc/nginx/sites-enabled/server.ReverseProxy.conf
if nginx -t 2>/dev/null;then synosystemctl reload nginx;elseexit1;fipart2=1# Variable pour indiquer que cette partie a été exécutéefi#### Fin de la partie de création/modification de fichiers#############################################################################################################if[$part1 -eq 1];thenecho"$(date"+%R:%S - ") -- Le fichier $LOC_DIR/websocket.locations.vaultwarden existait déjà, il a été supprimé puis recréé."echo"$(date"+%R:%S - ") -- On relance nginx."if nginx -t 2>/dev/null;then synosystemctl reload nginx;elseexit1;fielseecho"$(date"+%R:%S - ") -- Le fichier $LOC_DIR/websocket.locations.vaultwarden n'existait pas, il a été créé."fiif[$part2 -eq 1];thenecho"$(date"+%R:%S - ") -- !!!!!! ---> La modification dans le fichier /etc/nginx/sites-enabled/server.ReverseProxy.conf n'existait pas. Elle a été écrite."echo"$(date"+%R:%S - ") -- !!!!!! ---> Le fichier /etc/nginx/sites-enabled/server.ReverseProxy.conf a du être réinitialisé après un reboot ou lors d'une modification du reverse-proxy dans DSM."elseecho"$(date"+%R:%S - ") -- La modification du fichier /etc/nginx/sites-enabled/server.ReverseProxy.conf a déjà été effectuée lors d'une précédente exécution. Aucune modification n'est donc nécessaire."fiecho"$(date"+%R:%S - ") Script vaultwarden__Enable_Websocket.sh terminé"# Pour vérification#cp /etc/nginx/websocket.locations.vaultwarden /volume1/docker/#cp /etc/nginx/sites-enabled/server.ReverseProxy.conf /volume1/docker/exit
Il est a noter que pour la restriction des IP LAN & VPN pour la page admin, vous pouvez chercher en SSH quel fichier DSM à généré pour un profle de contrôle d'accès.
Maintenant, votre page admin ne sera plus accessible en-dehors de votre LAN, à moins d'y accéder via un serveur VPN installé sur le NAS ou sur une autre machine du réseau.
Moi c'est via le réseau 192.168.10.X et 192.168.11.X en fonction du type de VPN utilisé (L2TP, OpenVPN, etc...).
Voilà voilà
J'ai aussi le projet de remettre en forme correctement ce tuto, peut-être sur GitHub, comme ça la modification sera plus simple pour moi.
++
Merci pour le tuto, il fonctionne super bien.
J'ai pas activé le websocket car c'est pas 100% nécessaire dans mon cas, je suppose que cela viendra peut-être de base dans les prochaines version de vaultwarden.
Merci pour le tuto, il fonctionne super bien.
J'ai pas activé le websocket car c'est pas 100% nécessaire dans mon cas, je suppose que cela viendra peut-être de base dans les prochaines version de vaultwarden.
De rien.
Les notifications websocket c’est pour que les applications desktop et les extensions navigateur de Bitwarden se synchronisent toutes seules avec le serveur Vaultwarden.
Tout dépend de l’utilisation que tu fais de Vaultwarden ? mais c’est fonctionnel si tu les actives. Par contre ca ne pourra pas venir plus tard puisque c’est déjà là.
En revanche, la synchronisation mobile c’est autre chose, c’est pas implémenté encore… peut être un jour…
Là il faut lancer cette synchronisation manuellement en lançant Bitwarden sur le téléphone. Sinon quand tu vas remplir une champ de mot de passe avec un que tu viens de créer sur le serveur, il n’apparaîtra pas puisque l’application ne se synchronise pas toute seule.
Tout dépend de l’utilisation que tu fais de Vaultwarden ? mais c’est fonctionnel si tu les actives. Par contre ca ne pourra pas venir plus tard puisque c’est déjà là.
Pour le moment je fais la synchro manuellement car il y a que moi sur Vault mais je vais rajouter une org et inviter la famille et la la synchro auto sera intéressante.
Merci pour la MAJ ! Niveau websocket j'ai cahngé le reverse proxy et mis un Nging Proxy Manager qui fait bien le taf. J'avait trouvé une config sur internet et la je viens de remplacer par ta config .... je t'avouerais que je n'ai pas assez de connaissance la dedans pour juger de la dif mais en tout cas sa fonctionne nickel.
Merci pour la MAJ ! Niveau websocket j'ai cahngé le reverse proxy et mis un Nging Proxy Manager qui fait bien le taf. J'avait trouvé une config sur internet et la je viens de remplacer par ta config .... je t'avouerais que je n'ai pas assez de connaissance la dedans pour juger de la dif mais en tout cas sa fonctionne nickel.
Bonjour
Merci
En ce qui concerne les entrées du reverse proxy , je n’utilise plus celui de dsm mais swag en docker.
Je posterais le .conf dans la journée pour ceux qui voudraient utiliser un RP alternatif
Comme promis, voilà le vaultwarden.subdomain.conf que j'utilise.
Avant le .conf lui-même, il faut que j'explique plusieurs choses :
La première, c'est que j'utilise les thèmes de https://theme-park.dev/ pour la plupart de me services. J'ai donc installé le MOD pour SWAG, ainsi j'ai tous les thèmes dans le dossier de nginx : .../docker/swag/config/www/theme-park/...
La seconde, c'est que je limite l'accès à la partie administration aux seules IP LAN via l'inculusion d'un fichier ACL.IP-LAN.conf qui contient les restrictions d'accès (voir le fichier plus bas).
Une 3ème : j'utilise le MOD de swag-maxmind qui permet de bloquer ou autoriser les IP en fonction de leur provenance. C'est un peu redondant avec ce que peut faire les parefeu des Syno (NAS et routeur), mais dans le doute où le pare-feu se met à déconner... C'est l'include du fichier maxmind-geoblock_and_LAN.conf.
NGINX:
## Version 2022/02/08# make sure that your dns has a cname set for vaultwarden and that your vaultwarden container is not using a base url# make sure your vaultwarden container is named "vaultwarden"# set the environment variable WEBSOCKET_ENABLED=true on your vaultwarden containerserver{listen443ssl;listen[::]:443ssl;server_name vaultwarden.*;include/config/nginx/ssl.conf;client_max_body_size128M;# enable for ldap auth, fill in ldap details in ldap.conf#include /config/nginx/ldap.conf;# enable for Authelia#include /config/nginx/authelia-server.conf;# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;# Custom error pagesinclude/config/nginx/error_pages.conf;# Custom error filesaccess_log/config/log/nginx/access_vaultwarden.log;error_log/config/log/nginx/error_vaultwarden.log;location/{# enable the next two lines for http auth#auth_basic "Restricted";#auth_basic_user_file /config/nginx/.htpasswd;# enable the next two lines for ldap auth#auth_request /auth;#error_page 401 =200 /ldaplogin;# THEME.PARK - Débutset$app bitwarden;set$theme dracula;# You can also do: $scheme://$host/themeparkset$tp_domain vaultwarden.my-domaine-name.tld/themepark;proxy_set_header Accept-Encoding "";sub_filter'</head>'
'<link rel="stylesheet" type="text/css" href="https://$tp_domain/css/base/$app/$app-base.css"><link rel="stylesheet" type="text/css" href="https://$tp_domain/css/theme-options/$theme.css"></head>';sub_filter_once on;# THEME.PARK - Fin# enable for Authelia#include /config/nginx/authelia-location.conf;# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;include/config/nginx/proxy.conf;include/config/nginx/resolver.conf;set$upstream_app192.168.2.230;set$upstream_port882;set$upstream_protohttp;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 the next two lines for ldap auth#auth_request /auth;#error_page 401 =200 /ldaplogin;# enable for Authelia#include /config/nginx/authelia-location.conf;# THEME.PARK - Débutset$app bitwarden;set$theme dracula;# You can also do: $scheme://$host/themeparkset$tp_domain vaultwarden.my-domaine-name.tld/themepark;proxy_set_header Accept-Encoding "";sub_filter'</head>'
'<link rel="stylesheet" type="text/css" href="https://$tp_domain/css/base/$app/$app-base.css"><link rel="stylesheet" type="text/css" href="https://$tp_domain/css/theme-options/$theme.css"></head>';sub_filter_once on;# THEME.PARK - Fin# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;# Restrict access to some IPs only (LAN & VPNs)include/config/nginx/ACL.IP-LAN.conf;include/config/nginx/proxy.conf;include/config/nginx/resolver.conf;set$upstream_app192.168.2.230;set$upstream_port882;set$upstream_protohttp;proxy_pass$upstream_proto://$upstream_app:$upstream_port;}location~(/vaultwarden)?/notifications/hub {include/config/nginx/proxy.conf;include/config/nginx/resolver.conf;# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;# Restrict access to some IPs only (LAN & VPNs)# include /config/nginx/ACL.IP-LAN.conf;set$upstream_app192.168.2.230;set$upstream_port3012;set$upstream_protohttp;proxy_pass$upstream_proto://$upstream_app:$upstream_port;}location~(/vaultwarden)?/notifications/hub/negotiate {include/config/nginx/proxy.conf;include/config/nginx/resolver.conf;# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;# Restrict access to some IPs only (LAN & VPNs)# include /config/nginx/ACL.IP-LAN.conf;set$upstream_app192.168.2.230;set$upstream_port882;set$upstream_protohttp;proxy_pass$upstream_proto://$upstream_app:$upstream_port;}# Ceci n'est là que pour n'autoriser en accès que les .csslocation~* themepark/css/.*/.*\.css$ {# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;alias/config/www/;try_files$uri$uri//index.html;}location=/themepark/{# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;return301$scheme://$http_host/themepark;}# Là on refuse tout accès aux autres fichierslocation=/themepark {# GeoIP Blocking with Maxmind Docker-MODinclude/config/nginx/maxmind-geoblock_and_LAN.conf;root/config/www/default;try_files$uri/404.html;}}
Le fichier ACL.IP-LAN.conf :
NGINX:
## ACL.IP-LAN.conf# For my Synology DSM, I created an Access Control Profiles to restrict access only to LAN and VPN IP adresses# This Access Control Profile is a file in the /etc/nginx/conf.d folder# But for SWAG-Nginx, it must be with another file.# Allow all from LAN IPsallow192.168.2.0/24;# Allow all from VPNs IPsallow192.168.10.0/24;allow192.168.11.0/24;# Deny alldeny all;
Et pour faire bonne mesure, voilà le proxy.conf et le ssl.conf
NGINX:
## Version 2022/09/01 - Changelog: https://github.com/linuxserver/docker-swag/commits/master/root/defaults/nginx/proxy.conf.sample# Timeout if the real server is deadproxy_next_upstream error timeout invalid_header http_500 http_502 http_503;# Proxy Connection Settingsproxy_buffers324k;proxy_connect_timeout240;proxy_headers_hash_bucket_size128;proxy_headers_hash_max_size1024;proxy_http_version1.1;proxy_read_timeout240;proxy_redirecthttp://$scheme://;proxy_send_timeout240;# Proxy Cache and Cookie Settingsproxy_cache_bypass$cookie_session;#proxy_cookie_path / "/; Secure"; # enable at your own risk, may break certain appsproxy_no_cache$cookie_session;# Proxy Header Settingsproxy_set_header Connection $connection_upgrade;proxy_set_header Early-Data $ssl_early_data;proxy_set_header Host $host;proxy_set_headerProxy"";proxy_set_header Upgrade $http_upgrade;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Host $host:$server_port;proxy_set_header X-Forwarded-Method $request_method;proxy_set_header X-Forwarded-Proto $scheme;proxy_set_header X-Forwarded-Server$host;proxy_set_header X-Forwarded-Ssl on;proxy_set_header X-Forwarded-Uri $request_uri;proxy_set_header X-Original-URL $scheme://$http_host$request_uri;proxy_set_header X-Real-IP $remote_addr;# add_header X-Robots-Tag "none, nosnippet, noarchive";
Un grand merci à MilesTEG1 pour le super tuto et aussi à tous les autres.
J'ai pour le moment réalisé toutes les étapes jusque la création des conteneurs sans soucis mais lorsque je souhaite invité un nouvel utilisateur, j'ai un soucis avec l'envoie d'email avec l'erreur suivante :
Code:
[2022-11-11 21:22:02.720][vaultwarden::mail][ERROR] SMTP Connection error: failed to lookup address information: Temporary failure in name resolution
Voici ma configuration :
J'ai bien généré un mdp pour l'application du fait de la 2FAI, comme lu dans les post précédent.
J'ai remarqué que dans l'onglet diagnostic qu'il n'avait pas accès à internet :
Pensez-vous que cela peut-être à l'origine de mon problème ?