Set-OPS-Public/roles/serveur_rspamd/templates/sonde-filtrage.sh.j2
Daniel Allaire 6b6a56ab3f sondes filtrage et edge : elles verifient le service rendu ; l edge refuse les noms inconnus
filtrage soumet GTUBE ; edge interroge chaque exposition en local. Sans serveur
par defaut, un nom inconnu recevait Keycloak : 000-defaut.conf (444, rejet TLS).
Garde test_sondes_syntaxe : chaque gabarit de sonde se rend en bash valide.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 19:40:26 -04:00

34 lines
2 KiB
Django/Jinja

#!/bin/bash
# GENERE par Set-OPS (role serveur_rspamd). Ne pas editer a la main.
#
# SONDE « filtrage » — Le filtrage du courrier repond-il, et ANALYSE-T-IL vraiment ?
#
# UN FILTRE MUET NE BLOQUE PAS LE COURRIER — IL LE LAISSE PASSER. Postfix qui n'obtient
# pas de verdict de rspamd delivre sans filtrer, ou differe : dans les deux cas le service
# de courriel a l'air sain pendant que le pourriel entre ou que la file grossit.
#
# REPONDRE N'EST PAS FILTRER (2026-09-28). Cette sonde s'arretait a `/ping` — la meme
# question que celle qui a laisse `tableaux` au vert pendant que Grafana n'affichait rien.
# Un rspamd dont les regles ne se chargent plus, ou dont le moteur d'analyse est tombe,
# repond encore `pong`. On lui fait donc ANALYSER un message : GTUBE, le message de test
# standard que tout filtre doit rejeter (score maximal, action `reject`). Rien n'est envoye,
# rien n'est livre : rspamc soumet le texte au moteur et lit le verdict.
#
# Mise en defaut PAR PARAMETRE : `serveur_rspamd_sonde_attendu` (chaine introuvable) pour
# la premiere etape, `serveur_rspamd_sonde_action` pour la seconde.
set -uo pipefail
ping=$(curl -s --max-time 8 http://127.0.0.1:11334/ping 2>/dev/null | tr -d '[:space:]')
[[ "${ping}" == "{{ serveur_rspamd_sonde_attendu }}" ]] \
|| { echo "rspamd ne repond pas a /ping (${ping:-rien}) — le courrier passe sans filtre, ou attend."; exit 2; }
GTUBE='XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X'
verdict=$(printf 'Subject: sonde Set-OPS\n\n%s\n' "${GTUBE}" | timeout 10 rspamc 2>&1)
action=$(printf '%s' "${verdict}" | awk -F': ' '/^Action:/{print $2; exit}')
score=$(printf '%s' "${verdict}" | awk -F': ' '/^Score:/{print $2; exit}')
if [[ "${action}" != "{{ serveur_rspamd_sonde_action }}" ]]; then
echo "rspamd repond, mais N'ANALYSE PLUS : le message de test GTUBE rend « ${action:-aucun verdict} » au lieu de « {{ serveur_rspamd_sonde_action }} » — le pourriel entrerait. ${verdict:0:80}"
exit 2
fi
echo "Filtrage actif : le message de test GTUBE est rejete (score ${score})."
exit 0