Synology [Tuto] Installer Vaultwarden avec une sauvegarde automatique des données (nouvelle version)

Hello


Bon en me creusant la tête j'ai fini par trouver la solution pour pouvoir continuer à utiliser l'app Bitwarden Android avec Vaultwarden, en HTTPS et sans accès distant sauf via mon VPN WireGuard.

Je donne l'info ici au cas où ça peut servir à quelqu'un.

C'est plutôt classique :
- demander un certificat Let's Encrypt via DSM - avec les sous-domaines "*.mondomaine.synology.me" - et faire pointer l'instance Vaultwarden via un reverse proxy (suivre au besoin le tuto de @MilesTEG pour ceux qui ne savent pas comment faire)
- ne pas ouvrir quelque port que ce soit pour éviter d'exposer le NAS, Vaultwarden ou toute autre instance (dans la mesure où on a le VPN pour y accéder)
- créer une réécriture DNS (pour moi dans AdGuard) qui va faire pointer le sous-domaine du reverse proxy vers l'IP du NAS ("vaultwarden.mondomaine.synology.me" --> 192.168.x.x adresse du NAS) // en cas de connexion, ça permet ensuite au NAS de faire jouer le reverse proxy et d'envoyer la requête sur l'instance Vaultwarden
- utiliser l'adresse du reverse proxy pour se connecter au serveur Vaultwarden via Bitwarden Android, sous le VPN

L'app Android n'y verra que du feu car le HTTPSreverse proxy sera sous le certificat Let's Encrypt alors même que cette adresse n'est seulement accessible en local via le serveur DNS d'AdGuard et donc inaccessible depuis le net (sauf sous VPN)

J'espère avoir été assez clair, en tout cas à dispo au besoin


PS : le certificat LE ne me sert que pour le domaine et les sous-domaines, j'utilise le certificat auto-signé Synology pour le reste car rien n'est exposé en direct sans VPN pour ma part. Ce certificat est valable 1 an ça évite de se faire éjecter notamment de Synology Drive Client tous les 3 mois si j'utilise le certif LE...
 
Bonjour à tous,
Bon en me creusant la tête j'ai fini par trouver la solution pour pouvoir continuer à utiliser l'app Bitwarden Android avec Vaultwarden, en HTTPS et sans accès distant sauf via mon VPN WireGuard.
Désolé pour ce petit HS mais WireGuard fonctionne maintenant sur DSM sans bidouillage ? :unsure:
 
Bonjour à tous,

Désolé pour ce petit HS mais WireGuard fonctionne maintenant sur DSM sans bidouillage ? :unsure:

Salut non c'est forcément en docker mais mon instance tourne en native sur mon routeur GL.iNet - j'ai préféré faire gérer la partie réseau sur le routeur plutôt que sur le NAS qui n'est pas destiné à proprement parler à ça
 
  • J'aime
Réactions: Chon
ça évite de se faire éjecter notamment de Synology Drive Client tous les 3 mois si j'utilise le certif LE...
Un nom de domaine Synology.me inclus un certificat Let's Encrypt wildcard gratuit. Il comprend tous les sous-domaines existants et à venir. Le renouvellement se fait automatiquement sans intervention. Seul le port 443 est nécessaire depuis quelques années pour le renouvellement du certificat Let's Encrypt. Il est donc tout à fait possible et surtout conseillé de n'ouvrir que le port 443 (https) pour faire passer tout le trafic à l'aide de différents reverse proxy. Mon routeur et mon nas n'ont que le port 443 ouvert.
 
Oui je sais bien ça sauf que j'ai réussi à obtenir le certif sans ouverture de ports pour ma part - peut-être que DSM arrive finalement à faire du DNS-01 ? serait temps en tout cas.
Mais ça n'empêche qu'à chaque renouvellement ta session Synology Drive Client sur windows est éjectée et il faut se relog
Et si tu fais pas gaffe au point d'exclamation rouge dans l'icone de la barre des tâches pour te relog tu n'es plus synchro....
 
Si si c'est possible, avec une validation DNS, ce que fait DSM avec le nom de domaine Synology.
Mais pas avec les autres domaines XD
Pour ceux-là, il faut passer par ACME, ou Certbot, via docker ou autre.
 
  • J'aime
Réactions: CyberFR
@MilesTEG,
Sans port ouvert, DSM ne communique pas, ni avec Let's Encrypt, ni avec Synology account.
le dossier par défaut du certificat LE est /usr/syno/etc/certificate/system/default. le certificat n'arrivera pas.
Si ton Syno n'est plus connecté pendant un certain temps (je n'ai plus la valeur) ce qui a le même effet que de ne pas avoir de port ouvert, synology révoque ton adresse synology.me
Donc tu ne peux plus avoir de certificat Let's encrypt puisqu'il est lié à l'adresse.
 
Sans port ouvert, DSM ne communique pas, ni avec Let's Encrypt, ni avec Synology account.
le dossier par défaut du certificat LE est /usr/syno/etc/certificate/system/default. le certificat n'arrivera pas.
Tout dépend de ce que tu appelles « port ouvert ».
Moi je parle de l’ouverture de port dans le routeur.
Si tu as configuré le pare-feu de DSM pour n’accepter aucune connexion extérieure au lan avec une règle explicite (qui n’est pas présente par défaut), alors oui rien ne fonctionnera même pas les mises à jour…

Si ton Syno n'est plus connecté pendant un certain temps (je n'ai plus la valeur) ce qui a le même effet que de ne pas avoir de port ouvert, synology révoque ton adresse synology.me
Ça c’est normal , DSM ne peut pas joindre le serveur Synology qui donne les certificats, alors au bout d’un certain nombre de jours, ton ndd est révoqué.

Mais je persiste à dire que même sans ouvrir de port 443 et 80 dans ton routeur en direction du NAS (port forwarding) ton DSM peut récupérer un certificat LE pour le nom de domaine Synology uniquement.
 
Bonjour

Je fais une "aparte" sur une mésaventure que je viens d'avoir sur exportation et l'importation de données sous vaultwarden.

Est ce que c'est normal sur les entrées que j'ai enregistré avant avec des pièces jointes, après une restauration sur autre installation docker je n'ai plus aucune pièces jointes a mes entrées

Est ce quelles se trouvent a un autre endroit ?

Merci

rAnX06
 
Bonjour

Je fais une "aparte" sur une mésaventure que je viens d'avoir sur exportation et l'importation de données sous vaultwarden.

Est ce que c'est normal sur les entrées que j'ai enregistré avant avec des pièces jointes, après une restauration sur autre installation docker je n'ai plus aucune pièces jointes a mes entrées

Est ce quelles se trouvent a un autre endroit ?

Merci

rAnX06
Salut 👋🏻
Tout dépend de ce que tu appelles exportation / importation…
Développe ta méthode s’il te plaît.

Mais si tu avais copié les données du conteneur de ta machine1 vers la machine2, tu ne devrais rien avoir perdu.
 
Bonjour

Je fais une "aparte" sur une mésaventure que je viens d'avoir sur exportation et l'importation de données sous vaultwarden.

Est ce que c'est normal sur les entrées que j'ai enregistré avant avec des pièces jointes, après une restauration sur autre installation docker je n'ai plus aucune pièces jointes a mes entrées

Est ce quelles se trouvent a un autre endroit ?

Merci

rAnX06
Comme l'indique MilesTEG, si c'est les données "physiques" (db, fichier, etc.) de ton conteneur, tu dois tout retrouver.
Si c'est un export/import de coffre via l'interface web, je cite : "Seules les informations sur les éléments du coffre seront exportées et n'incluront pas les pièces jointes associées."
 
Salut 👋🏻
Tout dépend de ce que tu appelles exportation / importation…
Développe ta méthode s’il te plaît.

Mais si tu avais copié les données du conteneur de ta machine1 vers la machine2, tu ne devrais rien avoir perdu.
Bonsoir

C’est un compte (monadressemail@mail.fr) d’un coffre fort et pas l’exportation / importation de mon conteneur

rAnX06
Message automatiquement fusionné :

Comme l'indique MilesTEG, si c'est les données "physiques" (db, fichier, etc.) de ton conteneur, tu dois tout retrouver.
Si c'est un export/import de coffre via l'interface web, je cite : "Seules les informations sur les éléments du coffre seront exportées et n'incluront pas les pièces jointes associées."
Bonsoir

C’est bien cette manipulation décrite plus haut dans votre message, donc je comprends pourquoi je n’ai plus rien pour les pièces jointes.

Merci

rAnX06
 
Hello,

Oui, oui

voila mon compose :


YAML:
services:
  npmplus:
    container_name: npmplus
    image: docker.io/zoeyvid/npmplus:latest # or ghcr.io/zoeyvid/npmplus:latest
    restart: always
    #network_mode: bridge
    ports:
      - 83:83
      - 80:80
      - 91:91
      - 443:443
    volumes:
      - /volume1/docker/npmplus:/data
      #- /home/docker/var/www:/var/www # optional, if you want to use NPMplus directly as webserver for html/php
      #- "/path/to/old/npm/letsencrypt/folder:/etc/letsencrypt" # Only needed for first time migration from original nginx-proxy-manager to this fork
    environment:
      - TZ=Europe/Paris # set timezone, required, set it to one of the values from the "TZ identifier" https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
      - ACME_EMAIL=ndd@ndd.fr # email address which should be used for acme, currently optional, may be required in the future, so I recommend you to enter your email here, optional for letsencrypt, but required for zerossl and google public ca
      #- PUID=1000 # set group id, needs to be a number greater or equal to 99, or equal to 0, default 0 (root)
      #- PGID=1000 # set user id, needs to be a number greater or equal to 99, or equal to 0, default 0 (root), requires PUID to be not 0
      - NPM_PORT=83 # Port the NPM UI should be bound to, default 81, you need to change it, if you want to run multiple npm instances in network mode host
      - GOA_PORT=91 # Port the goaccess should be bound to, default 91, you need to change it, if you want to run multiple npm with goaccess instances in network mode host
      - DISABLE_IPV6=true # fully disables listing on IPv6 and the IPv6 resolver of nginx, overrides IPV6_BINDING/NPM_IPV6_BINDING/GOA_IPV6_BINDING, default false
      - INITIAL_ADMIN_EMAIL=admin@example.com # email to use instead of admin@example.org on first start of NPMplus for the initial user
      - INITIAL_ADMIN_PASSWORD=MonPassword # password to use instead of a random password which is logged on first start of NPMplus for the initial user
      - ACME_MUST_STAPLE=false
      - ACME_OCSP_STAPLING=false
      - ACME_KEY_TYPE=rsa   
      - LOGROTATE=true
      - LOGROTATIONS=7
      - X_FRAME_OPTIONS=sameorigin
      - GOA=true
      - GOACLA=--agent-list --real-os --double-decode --anonymize-ip --anonymize-level=2 --keep-last=7 --with-output-resolver --no-query-string 
      #- CROWDSEC_LAPI_URL=http://crowdsec:8080
    networks:
      npmplus_network:
        ipv4_address: 172.22.0.203  

# This can be used to enable crowdsec, see README for a guide
  crowdsec:
    container_name: crowdsec
    image: docker.io/crowdsecurity/crowdsec:latest
    restart: always
    network_mode: host
    ports:
      - 7422:7422 #"127.0.0.1:7422:7422"
      - 8080:8080 #"127.0.0.1:8080:8080"
    environment:
      - TZ=Europe/Paris # needs to be changed
      - COLLECTIONS=ZoeyVid/npmplus
    volumes:
      - /volume1/docker/npmplus/crowdsec/conf:/etc/crowdsec
      - /volume1/docker/npmplus/crowdsec/data:/var/lib/crowdsec/data
      - /volume1/docker/npmplus/nginx:/opt/npmplus/nginx:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      #- "/DATA/AppData/openappsec/logs:/opt/openappsec/logs:ro" # only uncomment if you also use the openappsec-agent container
    #networks:
      #npmplus_network:
        #ipv4_address: 172.22.0.204  
      

# This can be used with GOA=true, to keep the geopip database updated, you need to change the envs to make it work
  geoipupdate:
    container_name: npmplus-geoipupdate
    image: docker.io/maxmindinc/geoipupdate:latest
    restart: always
    #network_mode: bridge
    environment:
      - TZ=Europe/Paris # needs to be changed
      - GEOIPUPDATE_EDITION_IDS=GeoLite2-Country GeoLite2-City GeoLite2-ASN
      - GEOIPUPDATE_ACCOUNT_ID=1557806 # needs to be changed
      - GEOIPUPDATE_LICENSE_KEY=XxsmXoMHOa306If2OM_mmk # needs to be changed
      - GEOIPUPDATE_FREQUENCY=24
    volumes:
      - /volume1/docker/npmplus/goaccess/geoip:/usr/share/GeoIP
    networks:
      npmplus_network:
        ipv4_address: 172.22.0.205

networks:
  npmplus_network:
    name: npmplus_network
    ipam:
      driver: default
      config:
        - subnet: 172.22.0.0/16
          ip_range: 172.22.0.0/24
          gateway: 172.22.0.1

Pour GeoIP : allez ici pour creer un compte gratuit pour avoir les infos de license.

fichier /volume1/docker/npmplus/crowdsec/crowdsec.conf à modifier:

Avancé (BB Code):
ENABLED=true # à mettre en true uniquement quand ont a sons api key
API_URL=http://192.168.3.125:8080  # a completer avec IP du serveur 
API_KEY=+DEioJ5phQ9Jif2tofhVOIXM/GdmwSg  # api key avec la commande: docker exec it crowdsec cscli bouncers add nginx-bouncer
CACHE_EXPIRATION=1
# bounce for all type of remediation that the bouncer can receive from the local API
BOUNCING_ON_TYPE=all
FALLBACK_REMEDIATION=ban
REQUEST_TIMEOUT=2500
UPDATE_FREQUENCY=10
# By default internal requests are ignored, such as any path affected by rewrite rule.
# set ENABLE_INTERNAL=true to allow checking on these internal requests.
ENABLE_INTERNAL=false
# live or stream
MODE=live
# exclude the bouncing on those location
EXCLUDE_LOCATION=
#those apply for "ban" action
# /!\ REDIRECT_LOCATION and RET_CODE can't be used together. REDIRECT_LOCATION take priority over RET_CODE
BAN_TEMPLATE_PATH=/data/crowdsec/ban.html
REDIRECT_LOCATION=
RET_CODE=
#those apply for "captcha" action
#valid providers are recaptcha, hcaptcha, turnstile
CAPTCHA_PROVIDER=
# Captcha Secret Key
SECRET_KEY=
# Captcha Site key
SITE_KEY=
CAPTCHA_TEMPLATE_PATH=/data/crowdsec/captcha.html
CAPTCHA_EXPIRATION=3600

APPSEC_URL=http://192.168.3.125:7422  # a completer IP du serveur
APPSEC_FAILURE_ACTION=deny
APPSEC_CONNECT_TIMEOUT=1000
APPSEC_SEND_TIMEOUT=30000
APPSEC_PROCESS_TIMEOUT=10000
ALWAYS_SEND_TO_APPSEC=false
SSL_VERIFY=true

Fichier /volume1/docker/npmplus/crowdsec/conf/acquis.d/NPMPlus.yaml :

YAML:
filenames:
  - /volume1/docker/npmplus/nginx/access.log
  - /volume1/docker/npmplus/nginx/error.log
labels:
  type: npmplus
---
source: docker
container_name:
 - npmplus
labels:
  type: npmplus
---
source: docker
container_name:
 - npmplus
labels:
  type: modsecurity
#---
#filenames:
#  - /volume1/docker/npmplus/nginx/access.log
#labels:
#  type: modsecurity
---
listen_addr: 0.0.0.0:7422
appsec_config: crowdsecurity/appsec-default
name: appsec
source: appsec
labels:
  type: appsec
# if you use openappsec you can enable this
#---
#source: file
#filenames:
# - /opt/openappsec/logs/cp-nano-http-transaction-handler.log*
#labels:
#  type: openappsec

Commande pour verifier que cela fonctionne :

docker exec it crowdsec cscli decisions add i 123.456.789.123 <== Ip a bloquer
docker exec it crowdsec cscli decisions delete i 123.456.789.123

Voila, Voila c'est juste une base, il reste plein de chose à configurer, mais pas trop le temps.

Acces NPM Plus: IP:83
Acces GOA : IP:91

NPM.png

;)
 
Bonjour @MilesTEG,
ça fait un moment que j'utilise sans problème Vaultwarden, installé selon ton tuto, mais depuis quelques jours, à chaque fois que je l'utilise pour renseigner un mot de passe il ouvre bien le site mais me demande de mettre à jour l'identifiant alors que celui-ci n'a pas changé. Que je clique sur mise à jour ou non, la même question sera posée en me reconnectant avec succès au même site.
Je voudrais éviter de reprendre ton tuto avec tes modifs car, à par ce problème, tout fonctionne bien. Aurais-tu une astuce pour corriger ça sans devoir tout recommencer ?
 
En fait c'est peut-être un bug. Dans les paramètres de la nouvelle version, j'ai décoché puis recoché après utilisation la notification : "demander de mettre à jour un identifiant existant" et ça à l'air de fonctionner comme avant.
 
@PackTu Merci pour les infos .
Je voulais surtout savoir si tu en étais content 😁
Je posterais dans un autre sujet (tuto probablement) mon docker-compose et mon .env associé pour ça avec Fail2Ban quand je l’aurais configuré.
La je suis encore en phase de teste.
Et en regardant ton fichier de configuration npmplus/crowdsec/crowdsec.conf je me dis que je ne l’ai pas du tout modifié 😆
Va falloir que je l’ajoute à ma liste des fichier modifié et à modifier lol
Je n’ai pas mis la clé api ni l’adresse qui est restée en localhost…

NPMplus me paraît bien mais il manque cruellement de documentation…

J’ai aussi configuré le geoblocking , enfin plutôt le geoallowing 😅

Et je me dit qui va falloir que je modifie la partie pour autoriser que les IP lan à accéder à certaines ressources…

Donc là il va me falloir finir et faire :
  1. Finir la configuration de Crowdsec
  2. Ajouter tous mes proxy hosts (là je n’en ai fait qu’un seul pour tester)
  3. Faire la configuration de Fail2ban
  4. Vérifier que tout fonctionne correctement pour remplacer SWAG
  5. Essayer d’installer et configurer Zitadell pour l’oidc (pas sur du mot)
  6. Essayer et configurer Netbird
  7. Profiter 😆

Je ferais un tuto à minima pour NPMplus + Crowdsec (Puis le reste viendra en son temps)
Car c’est une tannée de faire suivre les log à Crowdsec : j’ai quand même réussi à lui donner les log de la machine Debian hôte qui est en système/journald donc non compatible avec Crowdsec en docker.
J’ai d’abord mis en place un seveur rsyslog sur la VM Debian pour récupérer les logs de certains conteneurs docker sur mon Synology comme Gitea par exemple. Et ça n’a pas été simple … merci Perplexity et ChatGPT 😅
Et par un coup de bol , après avoir installé rsyslog sur la VM j’ai par chance récupéré automatiquement les logs de cette MV en format log exploitable par Crowdsec et donc aussi Fail2ban je pense.
Bref ça me prend pas mal de temps surtout que je ne peux pas m’y atteler une journée entière.

Bonjour @MilesTEG,
ça fait un moment que j'utilise sans problème Vaultwarden, installé selon ton tuto, mais depuis quelques jours, à chaque fois que je l'utilise pour renseigner un mot de passe il ouvre bien le site mais me demande de mettre à jour l'identifiant alors que celui-ci n'a pas changé. Que je clique sur mise à jour ou non, la même question sera posée en me reconnectant avec succès au même site.
Je voudrais éviter de reprendre ton tuto avec tes modifs car, à par ce problème, tout fonctionne bien. Aurais-tu une astuce pour corriger ça sans devoir tout recommencer ?
Maintenant que tu le dis ça j’ai constaté la même chose moi aussi … et c’est bien pénible 🙄
En fait c'est peut-être un bug. Dans les paramètres de la nouvelle version, j'ai décoché puis recoché après utilisation la notification : "demander de mettre à jour un identifiant existant" et ça à l'air de fonctionner comme avant.

Ha cool faut que j’essaye ta méthode pour voir si ça résoudra bien le souci 😁
 
@PackTu
Je viens de modifier mon Crowdsec.conf comme toi .
J’espère que l’api jeu que j’ai est bien prise en compte , j’ai un # à la fin 😅
Par contre dans la doc de NPMplus il est es-tu on d’installer le bouncer NPMplus :
5. Run docker exec crowdsec cscli bouncers add npmplus -o raw and save the output
J’ai lancé cette commande 😊

Et pour le point 11 :
11. It is recommended to block at the earliest possible point, so if possible set up a firewall bouncer: https://docs.crowdsec.net/u/bouncers/firewall, make sure to also include the docker iptables in the firewall bouncer config
As-tu fait quelque chose ?