Icinga Web 2 gagne un troisieme mode, locale : nginx authentifie en HTTP Basic et pose REMOTE_USER, l application le croit. Un SITE n a ni annuaire ni Keycloak — ce sont des services d ecosysteme. Ni backend LDAP ni backend de groupes : un backend qui vise une ressource inexistante fait echouer chaque ouverture de session. L habilitation nomme alors une personne, entorse a D-66 ecrite plutot que contournee. Deux pieges en chemin : resoudre_annuaire etait appele sans condition et tombait sur NoneType has no len (default sans son second argument ne remplace pas None), et le flux du role ne nommait que l edge — le site n en a pas, donc personne ne pouvait entrer. serveur_grafana portait deja la reponse. LE DEFAUT DU DEVIS : une sortie vers un role ABSENT de l ecosysteme retombait sur !SETOPS_INTERNES, la forme de vers l Internet. La frontiere aurait autorise la console a parler LDAPS a n importe quelle machine du monde, pour joindre un annuaire qui n existe pas. C est une source vide ouvre le port, cote destination. Trois regles du meme defaut etaient DEJA posees pour postfix. La frontiere n est pas ecrite : elle porte la production, et le devis attend un mot. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
1.9 KiB
Django/Jinja
45 lines
1.9 KiB
Django/Jinja
# Géré par Set-OPS (rôle serveur_icingaweb2). Ne pas éditer à la main.
|
|
# nginx LOCAL : sert Icinga Web 2 (PHP-FPM). L'edge nginx proxifie par nom vers ce port.
|
|
server {
|
|
listen {{ serveur_icingaweb2_nginx_bind }}{{ serveur_icingaweb2_http_port }};
|
|
{% if not serveur_icingaweb2_nginx_bind %}
|
|
listen [::]:{{ serveur_icingaweb2_http_port }};
|
|
{% endif %}
|
|
server_name {{ serveur_icingaweb2_hostname }};
|
|
|
|
root {{ serveur_icingaweb2_docroot }};
|
|
index index.php;
|
|
{% if serveur_icingaweb2_auth == 'locale' %}
|
|
|
|
# MODE `locale` : C'EST NGINX QUI AUTHENTIFIE.
|
|
#
|
|
# Icinga Web 2 n'a pas d'OIDC natif et un SITE n'a ni annuaire ni passerelle SSO.
|
|
# HTTP Basic devant `external` est le contrat que l'application attend deja — le
|
|
# serveur web dit QUI, l'application le croit. C'est exactement ce que fait
|
|
# oauth2-proxy chez un locataire, avec un vestibule plus simple.
|
|
#
|
|
# AU NIVEAU DU `server`, PAS DU `location` : place dans le seul bloc PHP, la
|
|
# protection sauterait tout ce que `try_files` sert directement — feuilles de style,
|
|
# icones, et surtout les fichiers que `location ~ /\.ht` croit couvrir. Une
|
|
# authentification qu'on peut contourner par un chemin voisin n'en est pas une.
|
|
auth_basic "{{ serveur_icingaweb2_realm }}";
|
|
auth_basic_user_file {{ serveur_icingaweb2_htpasswd }};
|
|
{% endif %}
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.php$is_args$args;
|
|
}
|
|
|
|
location ~ ^/index\.php {
|
|
fastcgi_pass unix:{{ serveur_icingaweb2_php_fpm_socket }};
|
|
fastcgi_index index.php;
|
|
include fastcgi_params;
|
|
fastcgi_param SCRIPT_FILENAME {{ serveur_icingaweb2_docroot }}/index.php;
|
|
fastcgi_param ICINGAWEB_CONFIGDIR {{ serveur_icingaweb2_config_dir }};
|
|
fastcgi_param REMOTE_USER {{ serveur_icingaweb2_remote_user }};
|
|
}
|
|
|
|
location ~ /\.ht {
|
|
deny all;
|
|
}
|
|
}
|