Chapitre 18 Transport & défense de la messagerie Admin : #pMtaFilters

Milters (protocole milter de Sendmail) et hooks MTA (HTTP par étape SMTP)

Les filtres existants se branchent directement dans le dialogue SMTP : les milters parlent le protocole milter de Sendmail version 6 (Rspamd via son proxy milter, ClamAV-milter, OpenDKIM, produits DLP) ; les MTA hooks sont de simples services HTTP qui reçoivent un document JSON par étape (CONNECT, EHLO, MAIL FROM, RCPT TO, DATA) et renvoient une décision. Les deux s'appliquent au courrier entrant (port 25) et, en option, à la soumission (465/587). Configurez-les sous Milters & MTA hooks (#pMtaFilters), chaque entrée disposant d'un bouton de test.

Conseil d'exploitation & note d'architecture

Choisissez délibérément l'action par défaut : "accept" (fail open) maintient le flux de courrier lorsqu'un filtre est hors service, "tempfail" (comme milter_default_action = tempfail de Postfix) fait réessayer les expéditeurs plus tard, jusqu'au retour du filtre. Pour les antivirus, tempfail est plus sûr ; pour les services de scoring, accept. Quarantine place le courrier entrant dans le dossier Courrier indésirable ; à la soumission, le message est rejeté avec 550.

Réponse de hook MTA (compatible Stalwart)

Requête : context (stage, client, sasl, tls, server, queue, protocol), envelope (from, to) et, à l'étape DATA, message (headers, contents, size). Signature dans l'en-tête X-Nextxch-Signature : sha256=HMAC sur le corps.

Référence / configuration
POST https://dlp.internal/hook   (X-Nextxch-Hook-Stage: data)

{
  "action": "accept",
  "modifications": [
    { "type": "addHeader", "name": "X-DLP-Status", "value": "clean" },
    { "type": "changeHeader", "index": 1, "name": "Subject", "value": "[external] Offer" },
    { "type": "deleteHeader", "index": 1, "name": "X-Internal-Route" }
  ]
}

{ "action": "reject", "response": { "status": 550, "enhancedStatus": "5.7.1", "message": "Confidential data detected" } }
{ "action": "tempfail", "response": { "status": 451, "message": "Please try again later" } }
{ "action": "quarantine" }      { "action": "discard" }

Paramètres, valeurs par défaut & bonnes pratiques

Paramètre / emplacement Description Valeur par défaut Bonne pratique en production
Milter-Adresse Socket TCP ou Unix du milter : inet:host:port, inet:port@host (notation Sendmail), host:port ou unix:/path. - Rspamd : inet:127.0.0.1:11332 (worker proxy avec milter = yes). ClamAV-milter : unix:/run/clamav/clamav-milter.ctl ou inet:127.0.0.1:7357.
Phasen und Aktionen (Milter) Négociation des options v6, macros (j, {client_addr}, i, {auth_authen}, {mail_addr}, {rcpt_addr}), connect, helo, mail, rcpt, data, header, eoh, body, eom. Réponses : accept, continue, reject, tempfail, discard, code de réponse, quarantaine. Modifications : ajouter, insérer et modifier des en-têtes, remplacer le corps, ajouter/supprimer des destinataires, changer l'expéditeur. alle angeboten Les étapes que le milter désactive (SMFIP_NO*) ne sont pas envoyées ; les étapes sans réponse (SMFIP_NR_*) ne sont pas attendues.
Zeitlimits Connexion, par commande et pour le contenu/la fin du message, définis séparément ; les réponses de progression prolongent le délai du contenu. 5 s / 10 s / 60 s Augmentez le délai de contenu à 120 à 300 s pour les antivirus traitant de grosses pièces jointes.
MTA-Hook Phasen und Sicherheit Par hook : connect, ehlo, mail, rcpt, data. En-tête d'authentification facultatif (par ex. Authorization: Bearer ...) et signature HMAC-SHA256 ; tous deux sont stockés chiffrés et jamais affichés. data N'activez que les étapes dont vous avez besoin : chaque appel ajoute le temps de réponse du hook au dialogue SMTP. Le hook doit répondre en moins d'une seconde.
Reihenfolge Les milters et hooks s'exécutent selon leur champ order ; le premier rejet met fin à la chaîne. Au stade DATA, chaque filtre voit le message avec les modifications des précédents. Milter 100, Hooks 200 Placez les vérifications rapides et peu coûteuses (par ex. réputation) avant les plus coûteuses (analyse antivirus).