Tuto: Bloquer les requêtes selon le pays

Presque trois !

J’ai tenté avec l’adresse exacte ( location = /yunohost/sso/login), même comportement (les logs indique un not found sur /usr/share/nginx/html/yunohost/sso/index.html, dossier qui n’existe pas).

Si on tronque l’adresse en s’arrêtant par exemple à sso, idem.

Imho la syntaxe pour trouver la page sso est ok, mais y a une redirection foireuse à un moment.

J’ai essayé en blacklistant la France et effectivement j’ai la même chose que toi.
Ton retour c’est comme si il y a 2 retours concaténés :

/usr/share/nginx/html

Ce fichier existe bien. Puis:

/yunohost/sso/index.html

En faisant :

cd /etc/nginx
find . -type f  -exec grep "/yunohost/sso/index.html" '{}' +

ça me renvoie :

./conf.d/yunohost_sso.conf.inc:    location = /yunohost/sso/index.html {

Donc je pense qu’il faut voir ce qui a changé dans /etc/nginx/conf.d/yunohost_sso.conf.inc et que la source du problème se situe là mais je n’ai pas creusé plus loin.

J’ai réinstallé une Yuno11 vite fait dans une VM (merci proxmox :o), et le contenu de /etc/nginx/conf.d/yunohst_sso.conf.inc est le suivant (je te passe les commentaires) :

rewrite ^/yunohost/sso$ /yunohost/sso/ permanent;

location /yunohost/sso/ {
}

Il est un peu plus conséquent sur mon serveur :

# Avoid the nginx path/alias traversal weakness ( #1037 )
rewrite ^/yunohost/sso$ /yunohost/sso/ permanent;

location /yunohost/sso/ {
    alias /usr/share/yunohost/portal/;
    default_type text/html;
    index index.html;
    try_files $uri $uri/ /index.html;

    location = /yunohost/sso/index.html {
        etag off;
        expires off;
        more_set_headers "Cache-Control: no-store, no-cache, must-revalidate";
    }

    location /yunohost/sso/applogos/ {
        alias /usr/share/yunohost/applogos/;
    }

    location = /yunohost/sso/customassets/custom.css {
        alias /usr/share/yunohost/portal/customassets/$host.custom.css;
        etag off;
        expires off;
        more_set_headers "Cache-Control: no-store, no-cache, must-revalidate";
    }

    more_set_headers "Content-Security-Policy: upgrade-insecure-requests; default-src 'self'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; object-src 'none'; img-src 'self' data:;";

Euh il ne manque pas quelque chose dans le fichier correspondant à Yunohost 11?
Une suggestion, mais il faudrait que je prenne le temps de lire la doc de Nginx sinon c’est un peu du pifomètre :
Tu as une directive location /yunohost/sso/ dans yunohost_sso.conf.inc , as-tu essayé de placer if ($allowed_country = no) { return 444; } dans celle-ci?
C’est une réaction à chaud sans m’être documenté donc il ne faut pas le prendre pour argent comptant mais éventuellement une piste que tu peux creuser… et éliminer si je dis vraiment n’importe quoi après t’être documenté.

Ça ne fonctionne pas.

J’ai pu garder mon location en bricolant un symlink :

/usr/share/nginx/html/yunohost# ls -al
total 8
drwxr-xr-x 2 root root 4096 Mar  8 00:02 .
drwxr-xr-x 3 root root 4096 Mar  7 23:38 ..
lrwxrwxrwx 1 root root   26 Mar  7 23:39 sso -> /usr/share/yunohost/portal

En mettant login à la place de sso dans mon hook :

  • j’ai le problème sur yunohost-api (webmin), qui contient ‘login’ dans son url.
    2025/03/07 23:56:48 [error] 843018#843018: *245 open() "/usr/share/nginx/html/yunohost/api/login" failed (2: No such file or directory)
  • je ne bloque bizarrement pas la page de login de Nextcloud (et ça c’est dommage, a priori je suis obligé de laisser nextcloud dans le group Visiteurs pour héberger du contenu sur des pages publiques (une image, par exemple).