#!/bin/bash # GENERE par Set-OPS (role serveur_web_frontal). Ne pas editer a la main. # # SONDE « frontal » — le reverse proxy public tient, son WAF est charge, et chaque # exposition publique repond a travers lui. # # Contrat : docs/supervision-conception.md (API des greffons Nagios) — une ligne, 0/1/2. # Mise en defaut PAR PARAMETRE : `serveur_web_frontal_waf_mode` (une valeur que le moteur # refuse fait echouer `nginx -t`). set -uo pipefail MODE='{{ serveur_web_frontal_waf_mode }}' EXPOSITIONS="{{ serveur_web_frontal_expositions | default([]) | map(attribute='fqdn') | unique | sort | join(' ') }}" systemctl is-active --quiet nginx || { echo "Le frontal (nginx) n'est pas actif : les services publics sont injoignables."; exit 2; } nginx -t >/dev/null 2>&1 \ || { echo "Le frontal sert, mais sa configuration sur disque est INVALIDE : le prochain demarrage echouera."; exit 2; } # LE WAF EST-IL VRAIMENT DANS LE CHEMIN ? Un module non charge, ou des regles absentes, # laissent passer tout le trafic sans rien dire : le frontal reste « vert ». conf=$(nginx -T 2>/dev/null) grep -q "ngx_http_modsecurity_module" <<<"${conf}" \ || { echo "Le module ModSecurity n'est pas charge : le frontal relaie SANS filtrer."; exit 2; } grep -q "modsecurity-crs/rules" '{{ serveur_web_frontal_waf_dir }}/main.conf' 2>/dev/null \ || { echo "Les regles OWASP CRS ne sont pas chargees : le WAF n'a rien a appliquer."; exit 2; } servies=0; en_defaut=() for n in ${EXPOSITIONS}; do code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 8 -H "Host: ${n}" http://127.0.0.1/ 2>/dev/null) if [[ "${code}" =~ ^[234][0-9][0-9]$ ]]; then servies=$((servies + 1)); else en_defaut+=("${n}=${code:-000}"); fi done if [[ -n "${en_defaut[*]:-}" ]]; then echo "Le frontal repond, mais des expositions publiques ne sont PAS servies : ${en_defaut[*]} (000 = silence, 5xx = amont en defaut). WAF ${MODE}." exit 2 fi if [[ -z "${EXPOSITIONS}" ]]; then echo "Frontal pret (WAF CRS en ${MODE}) : aucune exposition publique declaree pour l'instant." exit 0 fi echo "Frontal : ${servies} exposition(s) publique(s) servie(s), WAF CRS en ${MODE}."