diff --git a/CHANGELOG.md b/CHANGELOG.md index a98f814..31a777c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,40 @@ # CHANGELOG — Set-OPS +## 2026-09-29 (39) — Le web frontal devient reverse proxy + WAF ; le dorsal porte les sites + +**L'architecture, précisée par l'exploitant** : le web **dorsal** est le serveur des sites ; +le web **frontal** est le reverse proxy et le WAF devant les services web publics du +locataire. L'edge reste la porte des services internes, pour l'administration. + +**Le frontal** (`serveur_web_frontal`, réécrit) : +- ses vhosts dérivent des expositions dont le domaine public le désigne + (`domaines.yml`, `edge: serveur_web_frontal`) — la même dérivation que l'edge, filtrée sur + son groupe ; il ne sert plus rien lui-même ; +- **WAF** : ModSecurity v3 (`libnginx-mod-http-modsecurity`) + OWASP CRS 3.3.7 + (`modsecurity-crs`), paquets Debian. Éprouvé avant d'écrire le rôle, sur le vrai frontal : + une injection SQL journalisée (942100, 949110) en détection, refusée (403) en blocage, une + requête saine servie dans les deux cas. Un premier essai « prouvait » l'inverse : `return + 200` s'exécute avant la phase où ModSecurity inspecte — l'essai, pas le WAF, était faux. + L'inclusion livrée par Debian ne charge que le moteur : le rôle compose moteur, mode, CRS + et exclusions. `DetectionOnly` d'abord ; `On` après lecture du journal ; +- serveur par défaut qui refuse tout nom inconnu (444) ; 80 seulement en attendant + Let's Encrypt ; sonde **`frontal`** : nginx et configuration, module WAF chargé et CRS + présent, chaque exposition publique servie à travers lui. + +**Le dorsal** (`serveur_web_dorsal`) reprend les sites statiques (clone, vhost, CSP) et la +sonde **`sites-servis`** ; il est relayé par l'edge (noms internes) ET le frontal (noms +publics). Flux : frontal → dorsal 80 ; le frontal ne reçoit plus rien de l'edge. + +**Posé chez les deux locataires** : rôles, pare-feux des deux machines, Proxmox (2 IPSets, +4 groupes), Icinga. `frontal` et `sites-servis` au vert (aucune exposition publique ni site +déclarés encore) ; frontal → dorsal : 200 ; frontière : rien à changer. Au premier +déploiement, `nginx -t` a refusé la configuration AVANT tout rechargement (`server_tokens` +déjà actif dans le `nginx.conf` de Debian 13) — nginx a continué de servir l'ancienne. + +**Reste** : le domaine public de chaque locataire désigne encore l'edge (`domaines.yml`) ; +le dorsal sert la page d'accueil de Debian à un nom inconnu (un serveur par défaut qui +refuse, comme à l'edge et au frontal) ; Let's Encrypt. + ## 2026-09-29 (38) — Frontière appliquée : chaque locataire entre et sort par sa propre adresse **Appliqué** (plan relu avant) : 47 créés, 2 retirés ; convergé, 0 écart, 336 règles ; pool