NGINX : Restreindre l'accès à la page admin de Vaultwarden aux seules IP LAN et VPN

MilesTEG

Administreur
Membre du personnel
6 Septembre 2020
3 100
744
213
Bonjou
J'ai besoin de l'aide de cadors en conf NGINX (pas forcément lié à une marque de NAS, d'où l'endroit de mon message).

J'ai une instance docker Vaultwarden qui fonctionne parfaitement bien, avec son nom de domaine, en HTTP.
J'accède via : https://vault.mon-ndd.tld/
La console d'admin est dispo via : https://vault.mon-ndd.tld/admin
Sauf que j'aimerais cette dernière accessible uniquement aux IP LAN et VPN de mon réseau.

Précisions :
- le docker est sur mon NAS Synology
- j'utilise le reverse proxy de DSM (basé sur NGINX) pour faire mes redirections, ainsi que le contrôle d'accès via des profiles (c'est ce qui restreint l'accès à DSM aux seules IP LAN et VPN, ça ça fonctionne bien ;))
- J'ai un script qui va insérer une ligne include pour insérer du code permettant l'utilisation des notifications websockets (ça ça fonctionne aussi très bien) : include /etc/nginx/websocket.locations.vaultwarden;
- le contenu de ce fichier est généré par le script, et ça donne ceci :
NGINX:
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://192.168.2.200:882;
}

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://192.168.2.200:3012;
}

- le port 882 est le port de Vaultwarden, le port 3012 est celui des Websocket Notifications

J'essaye de faire une location pour la page d'admin, et j'ai essayé ceci sans succès :
NGINX:
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
    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://192.168.2.200:882/admin;
}

La page d'admin est toujours accessible depuis mon smartphone en connexion 4G... :cry:
Bref, voilà où j'en suis, j'aimerais un peu d'aide ^^

Ha, le bloc server {} dans le server.ReverseProxy.conf de NGINX :
NGINX:
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name vault.mon-ndd.tld ;

    include /etc/nginx/websocket.locations.vaultwarden;

    if ( $host !~ "(^vault.mon-ndd.tld$)" ) { return 404; }

    include /usr/syno/etc/www/certificate/ReverseProxy_580f72c4-47a8-4d40-9d13-3712ab5fd22d/cert.conf*;

    include /usr/syno/etc/security-profile/tls-profile/config/ReverseProxy_580f72c4-47a8-4d40-9d13-3712ab5fd22d.conf*;

    add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload" always;

    proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

    location / {

        proxy_connect_timeout 300;

        proxy_read_timeout 300;

        proxy_send_timeout 300;

        proxy_intercept_errors off;

        proxy_http_version 1.1;

        proxy_set_header        X-Real-IP            $remote_addr;

        proxy_set_header        Host            $http_host;

        proxy_set_header        X-Forwarded-For            $proxy_add_x_forwarded_for;

        proxy_set_header        X-Forwarded-Proto            $scheme;

        proxy_pass http://192.168.2.200:882;

    }

    error_page 403 404 500 502 503 504 /dsm_error_page;

    location /dsm_error_page {
        internal;
        root /usr/syno/share/nginx;
        rewrite (.*) /error.html break;
        allow all;
    }

}


Merci d'avance :)
 
Bon j'ai trouvé !! Lors de mes différents essais, je lançais mon script sans être passé par la configuration du reverse proxy de DSM, du coup, bah la commande synosystemctl reload nginx n'était pas lancée ! à la fin du script... Donc mes modifications dans le fichier inclus n'étaient pas prise en compte... Maintenant que c'est fait, j'ai bien le bon comportement : voir la capture
Image


faut que je modifie mon script pour que quand il se re-exécute, il relance nginx :cool:
 
  • J'aime
Réactions: Nincha