2026-07-05 18:12:19 -04:00
|
|
|
---
|
|
|
|
|
# =========================================================================
|
2026-09-29 16:48:42 -04:00
|
|
|
# serveur_web_frontal — REVERSE PROXY + WAF devant les services web PUBLICS du locataire.
|
|
|
|
|
#
|
|
|
|
|
# L'EDGE ET LE FRONTAL SONT DEUX PORTES (2026-09-29). L'edge (`serveur_nginx`) expose les
|
|
|
|
|
# services INTERNES (`*.internal`) a la zone d'administration. Le frontal expose ce que le
|
|
|
|
|
# locataire publie sur l'Internet : la frontiere redirige l'adresse publique du locataire
|
|
|
|
|
# (80/443) vers lui, il filtre (WAF) et relaie vers le service — le plus souvent le web
|
|
|
|
|
# DORSAL, qui porte les sites et les applications. Le frontal ne sert rien lui-meme.
|
|
|
|
|
#
|
|
|
|
|
# SES VHOSTS NE SE DECLARENT PAS ICI : ils derivent des expositions dont le domaine PUBLIC
|
|
|
|
|
# le designe (`plan/domaines.yml`, champ `edge: serveur_web_frontal`) — la meme derivation
|
|
|
|
|
# que l'edge (`expositions_des_applications`), filtree sur ce groupe.
|
2026-07-05 18:12:19 -04:00
|
|
|
# =========================================================================
|
2026-09-29 16:48:42 -04:00
|
|
|
serveur_web_frontal_paquets:
|
|
|
|
|
- nginx
|
|
|
|
|
- libnginx-mod-http-modsecurity # le connecteur nginx de ModSecurity v3
|
|
|
|
|
- modsecurity-crs # OWASP Core Rule Set
|
2026-07-05 18:12:19 -04:00
|
|
|
|
2026-09-29 16:48:42 -04:00
|
|
|
serveur_web_frontal_groupe: "serveur_web_frontal"
|
|
|
|
|
serveur_web_frontal_publier_expositions: true
|
2026-07-05 18:12:19 -04:00
|
|
|
|
2026-09-29 16:48:42 -04:00
|
|
|
# --- LE WAF --------------------------------------------------------------------------
|
|
|
|
|
#
|
|
|
|
|
# `DetectionOnly` D'ABORD : le CRS journalise ce qu'il aurait bloque
|
|
|
|
|
# (`/var/log/nginx/modsec_audit.log`) sans rien refuser. On lit, on ajuste les exclusions
|
|
|
|
|
# pour les applications reelles, PUIS on passe a `On`. Un WAF bloquant pose a l'aveugle
|
|
|
|
|
# casse les formulaires legitimes, et on finit par le desactiver.
|
|
|
|
|
#
|
|
|
|
|
# Eprouve le 2026-09-29 sur le vrai systeme (Debian 13, nginx 1.26, CRS 3.3.7) : une
|
|
|
|
|
# injection SQL en requete rend 200 et est journalisee (942100, 949110) en detection ;
|
|
|
|
|
# 403 en blocage ; une requete saine passe dans les deux cas.
|
|
|
|
|
serveur_web_frontal_waf_mode: "DetectionOnly" # ou "On"
|
|
|
|
|
serveur_web_frontal_waf_dir: "/etc/nginx/setops-waf"
|
supervision : les huit derniers roles, et deux defauts que l epreuve a trouves
Les 33 roles serveur_* declarent maintenant une sonde. Les huit qui manquaient
sont ceux dont la verite ne ressemble pas a « ce service repond-il ».
Quatre marqueurs du site : ce que tasks/main.yml verifie UNE FOIS au deploiement
cesse d etre vrai sans que rien ne tombe. La racine du cache se retrouve chainee,
la forge du genome repond en n ayant plus rien dedans, un locataire n est plus
admis a resoudre, l isolation d un depot glisse.
serveur_ops_site ne sert rien : il detient un pouvoir. La sonde verifie que la
carte est la, que la voute du site est chiffree et que sa cle est en 0600 — sans
lire le contenu d aucun des trois.
serveur_icingaweb2 surveille la vitrine de la supervision elle-meme : si la
console meurt, tout reste vert et l exploitant est aveugle.
DEFAUT 1 — quatre gabarits qu Ansible aurait refuse de rendre. Jinja lit le
{# de ${#tableau[@]} comme un debut de commentaire. Le depot connaissait le
remede et l appliquait la ou quelqu un s etait fait prendre, nulle part ailleurs.
P76 rend desormais chaque gabarit de role, avec les delimiteurs qu Ansible en
tirerait — pas une recherche de motif.
DEFAUT 2 — la doctrine promettait 54 greffons et citait check_pgsql. La flotte a
monitoring-plugins-basic : 53, sans check_pgsql ni check_dns ni check_ldap. Le
paquet qui les porte traine samba et snmp sur chaque machine. Un greffon absent
sort en 127, qui n est pas un code Nagios.
21 controles negatifs sur les machines reelles du site. ansible-lint production
0/91, harnais 75 OK.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-14 15:43:52 -04:00
|
|
|
|
2026-09-29 16:48:42 -04:00
|
|
|
# Taille maximale d'une requete relayee (televersements).
|
|
|
|
|
serveur_web_frontal_taille_max_corps: "16m"
|
|
|
|
|
|
|
|
|
|
# Un amont declare sur un de ces ports se parle en TLS (comme a l'edge).
|
|
|
|
|
serveur_web_frontal_ports_tls: [443, 8443]
|
2026-09-29 18:37:00 -04:00
|
|
|
|
|
|
|
|
# --- LA PAGE 404 DU FRONTAL (2026-09-29) ----------------------------------------------------
|
|
|
|
|
#
|
|
|
|
|
# Ce que recoit une requete pour un nom que le frontal ne publie pas : une visite de l'adresse
|
|
|
|
|
# publique sans nom, un nom inconnu. Vide = la connexion est fermee sans reponse (444). Un
|
|
|
|
|
# chemin (sur le controleur, dans le depot du locataire) = cette page, avec le statut 404.
|
|
|
|
|
# C'est un CONTENU du locataire : il vit dans son depot, pas dans ce role.
|
|
|
|
|
serveur_web_frontal_page_404: ""
|
|
|
|
|
serveur_web_frontal_racine_404: "/var/www/setops-frontal"
|
|
|
|
|
# La page peut porter ses styles et scripts en ligne ; rien d'exterieur n'est autorise.
|
|
|
|
|
serveur_web_frontal_page_404_csp: >-
|
|
|
|
|
default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline';
|
|
|
|
|
script-src 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
|