Set-OPS-Public/roles/serveur_web_frontal
Daniel Allaire 5f23201075 frontal : page 404 du locataire pour les noms qu il ne publie pas
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 18:37:00 -04:00
..
defaults frontal : page 404 du locataire pour les noms qu il ne publie pas 2026-09-29 18:37:00 -04:00
handlers Rôles web : renommer web_frontal/dorsal -> serveur_web_frontal/dorsal (convention) 2026-07-05 18:49:31 -04:00
meta web frontal = reverse proxy + WAF ; le dorsal porte les sites 2026-09-29 16:48:42 -04:00
tasks frontal : page 404 du locataire pour les noms qu il ne publie pas 2026-09-29 18:37:00 -04:00
templates frontal : page 404 du locataire pour les noms qu il ne publie pas 2026-09-29 18:37:00 -04:00
README.md web frontal = reverse proxy + WAF ; le dorsal porte les sites 2026-09-29 16:48:42 -04:00

serveur_web_frontal

Reverse proxy et WAF devant les services web PUBLICS du locataire. C'est la porte publique : la frontière redirige l'adresse publique que le site attribue au locataire (80/443) vers lui ; il filtre et relaie. Il ne sert rien lui-même — les sites et les applications vivent sur le web dorsal (serveur_web_dorsal).

L'edge (serveur_nginx) est l'autre porte : les services internes (*.internal), pour la zone d'administration. Les deux ne se remplacent pas.

Ce que le rôle fait

  1. nginx + ModSecurity v3 (libnginx-mod-http-modsecurity) + OWASP CRS (modsecurity-crs), tous paquets Debian, tout libre ;
  2. compose le WAF (/etc/nginx/setops-waf/main.conf) : moteur, mode, CRS et ses exclusions — l'inclusion livrée par Debian ne charge que le moteur ;
  3. un vhost par exposition publique : les FQDN que applications.yml expose dans un domaine dont plan/domaines.yml désigne ce frontal (edge: serveur_web_frontal) — la même dérivation que l'edge ;
  4. un serveur par défaut qui refuse tout nom inconnu (return 444) ;
  5. la sonde frontal : nginx actif et configuration valide, WAF chargé et CRS présent, chaque exposition publique servie à travers lui.

Le WAF

serveur_web_frontal_waf_mode: DetectionOnly d'abord : le CRS journalise ce qu'il aurait bloqué (/var/log/nginx/modsec_audit.log) sans rien refuser. On lit, on ajuste les exclusions pour les applications réelles, puis On. Éprouvé le 2026-09-29 (Debian 13, nginx 1.26, CRS 3.3.7) : une injection SQL est journalisée (942100) en détection, refusée (403) en blocage ; une requête saine passe dans les deux cas.

TLS

En clair (80) tant que le certificat Let's Encrypt des noms publics n'est pas en place.

Validation

ansible-lint profil production + --syntax-check ; sonde frontal.