Je n’ai pas ce fichier (juste un yunohost_local.conf).
J’ai modifié /etc/nginx/conf.d/yunohost_admin.conf comme suit, mais je peux toujours accéder à la page de login pour administrer via un réseau non-local (exemple : en 4G via mon malinphone).
Note : Mon réseau local est en 192.168.2.x
server {
listen 80 default_server;
listen [::]:80 default_server;
server {
# Disabling http2 for now as it’s causing weird issues with curl #listen 443 ssl http2 default_server; #listen [::]:443 ssl http2 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/yunohost/certs/yunohost.org/crt.pem;
ssl_certificate_key /etc/yunohost/certs/yunohost.org/key.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
# As suggested by Mozilla : https://wiki.mozilla.org/Security/Server_Side_TLS and https://en.wikipedia.org/wiki/Curve25519
# (this doesn't work on jessie though ...?)
# ssl_ecdh_curve secp521r1:secp384r1:prime256v1;
# As suggested by https://cipherli.st/
ssl_ecdh_curve secp384r1;
ssl_prefer_server_ciphers on;
# Ciphers with intermediate compatibility
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=yes&profile=intermediate
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-$
# Ciphers with modern compatibility
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=nginx-1.6.2&openssl=1.0.1t&hsts=yes&profile=modern
# Uncomment the following to use modern ciphers, but remove compatibility with some old clients (android < 5.0, Internet Explorer < 10, ...)
#ssl_protocols TLSv1.2;
#ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-S$
# Uncomment the following directive after DH generation
# > openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048
#ssl_dhparam /etc/ssl/private/dh2048.pem;
# Follows the Web Security Directives from the Mozilla Dev Lab and the Mozilla Obervatory + Partners
# https://wiki.mozilla.org/Security/Guidelines/Web_Security
# https://observatory.mozilla.org/
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
add_header 'Referrer-Policy' 'same-origin';
add_header Content-Security-Policy "upgrade-insecure-requests; object-src 'none'; script-src https: 'unsafe-eval'";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header X-Frame-Options "SAMEORIGIN";
location / {
return 302 https://$http_host/yunohost/admin;
allow 192.168.0.1/24;
allow 192.168.2.1/24;
allow 127.0.0.1;
deny all;
}
location /yunohost {
# Block crawlers bot
if ($http_user_agent ~ (crawl|Googlebot|Slurp|spider|bingbot|tracker|click|parser|spider|facebookexternalhit) ) {
return 403;
}
# Redirect most of 404 to maindomain.tld/yunohost/sso
access_by_lua_file /usr/share/ssowat/access.lua;
}
include conf.d/yunohost_admin.conf.inc;
include conf.d/yunohost_api.conf.inc;
Pour ma part, j’ai uniquement bloqué l’API et ça fait le taf.
Le fichier que j’ai modifié est /etc/nginx/conf.d/yunohost_api.conf.inc
Sinon recherche “api” dans le dossier /etc/nginx (grep -ri ‘api’ /etc/nginx)
Il faut modifier la partie qui concerne l’API :
(c’est ma config qui marche en prod actuellement)
monsite.noho.st/yunohost/admin via :
- PC du réseau local : API ne répond pas
- Hors réseau local (exemple : malinphone en 4G) : API ne répond pas
adresse-ip-locale/yunohost/admin via :
- PC du réseau local : répond
- Hors réseau local : API ne répond pas
adresse-ip-publique/yunohost/admin via :
- PC du réseau local : API ne répond pas
- Hors réseau local : API ne répond pas
Je n’ai donc un accès à la page web d’administration qu’en utilisant une machine du réseau local et en utilisant l’adresse ip locale du serveur, c’est très bien.
Avant de mettre une coche “résolu”, j’aimerais améliorer le truc en redirigeant vers ou en affichant une page custom plutôt que de voir le petit pacman tenter sa chance 5 secondes avant d’échouer avec “l’API ne répond pas”.
Je présume qu’il faut changer quelque chose dans le bloc “#custom 502…” ?
@Guilermo : Merci, mais je cherche une solution perenne. N’hésite pas cependant à publier ton script, ça servira peut-être à d’autres membres !
Excusez-moi de déterrer ce sujet, mais il m’intéresse particulièrement et me semble important pour la sécurité de Yunohost.
Je souhaite également limiter l’accès à l’interface d’administration web uniquement depuis mon réseau local. Car je ne suis pas encore suffisamment à l’aise avec la ligne de commande…
Si je comprends bien, il faut modifier 2 fichiers:
/etc/nginx/conf.d/yunohost_api.conf.inc
en y ajoutant
Avec, de mémoire et par défaut, adresse_du_lan/CIDR =
chez tout les FAI (français)sauf free : 192.168.1.0/24
chez free: 192.168.0.0/24
Pour vérifier et pour être sure, récupère l’adresse ip d’une machine au sein de ton LAN et si ton masque de sous réseau est bien 255.255.0 ou /24, ce sont deux notations équivalentes, prend compte le 3ème nombre.
adresse machine = 192.168.100.1/24 → sous réseau = 192.168.100.0/24
PS: je n’ai pas testé en soit le paramétrage de nginx (même si il me semble correcte), je t’indique juste le sous réseaux que tu dois renseigner.
Hello,
Je me permets juste de rebondir pour dire que ce filtre marche uniquement en IPv4.
En IPv6, il n’est pas possible à ma connaissance de faire la distinction local/extérieur… En tout cas je n’ai jamais réussi
Ah ? Pourtant il y a aussi un mécanisme similaire aux IP locales d’IPv4 (192.168.x.x et 10.0.x.x) en IPv6 … c.f. Unique local address - Wikipedia et les IP comme fc00, fd00::
Au passage, si ça intéresse des gens, ce serait pertinent d’intégrer ce mécanisme dans Yunohost directement via un paramètre (comme les settings qui gère les ciphers de la conf nginx). C’est quelque chose de pas très compliqué à faire, ça fait une bonne “première contribution” pour quelqu’un.e intéressé.e par contribuer au projet, on peut guider sur comment procéder si besoin.
Effectivement, mais je pense qu’avec une box grand public, on ne peut pas affecter d’adresse IPv6 à un matos (en tout cas, sur ma Freebox je ne sais allouer que de l’IPv4)
Du coup, quand un client se connecte à Yunohost en IPv6, il utilise son adresse «externe» unique automatiquement alloué par la box, qui n’est pas dans les ranges locaux.
Mais si tu sais comment faire, ça m’intéresse parce que je voudrais pouvoir faire ça pour mon package domoticz (pour n’autoriser que des capteurs locaux à se connecter au serveur)
Mouarf ouai je vois … en fait c’est parce que les addresses sont pas NATées … (on a tellement du NAT partout qu’on oublie comment c’est censé fonctionner sans NAT)
Du coup je pense tout de même que ton IPv6 globale fait parti du même prefix … genre ta box à un /56, et c’est lui qu’il faudrait mettre dans le “allow” … Par contre si pour une raison quelconque ton préfixe IPv6 change spontannément ça peut tout bloquer car il faudrait pouvoir mettre à jour la config nginx en conséquence …