#pMtaFilters
Milter (Sendmail-Milter-Protokoll) und MTA-Hooks (HTTP pro SMTP-Phase)
Vorhandene Filter lassen sich direkt in den SMTP-Dialog einhängen: Milter sprechen das Sendmail-Milter-Protokoll Version 6 (Rspamd über den Milter-Proxy, ClamAV-Milter, OpenDKIM, DLP-Produkte), MTA-Hooks sind einfache HTTP-Dienste, die pro Phase (CONNECT, EHLO, MAIL FROM, RCPT TO, DATA) ein JSON-Dokument erhalten und eine Entscheidung zurückgeben. Beide laufen für eingehende Mails (Port 25) und auf Wunsch auch für die Einlieferung (465/587). Eingerichtet wird unter Milter & MTA-Hooks (#pMtaFilters) mit Test-Knopf pro Eintrag.
Standardaktion bewusst wählen: "annehmen" (fail open) hält den Mailfluss bei einem Filterausfall am Laufen, "vorübergehend abweisen" (wie Postfix milter_default_action = tempfail) lässt Absender später erneut zustellen, bis der Filter wieder läuft. Für Virenscanner ist tempfail sicherer, für reine Bewertungsdienste accept. Quarantäne legt eingehende Mails im Junk-Ordner ab; bei der Einlieferung wird die Mail mit 550 abgewiesen.
Antwort eines MTA-Hooks (Stalwart-kompatibel)
Anfrage: context (stage, client, sasl, tls, server, queue, protocol), envelope (from, to) und bei DATA message (headers, contents, size). Signatur im Header X-Nextxch-Signature: sha256=HMAC über den Body.
POST https://dlp.intern/hook (X-Nextxch-Hook-Stage: data)
{
"action": "accept",
"modifications": [
{ "type": "addHeader", "name": "X-DLP-Status", "value": "clean" },
{ "type": "changeHeader", "index": 1, "name": "Subject", "value": "[extern] Angebot" },
{ "type": "deleteHeader", "index": 1, "name": "X-Internal-Route" }
]
}
{ "action": "reject", "response": { "status": 550, "enhancedStatus": "5.7.1", "message": "Vertrauliche Daten erkannt" } }
{ "action": "tempfail", "response": { "status": 451, "message": "Bitte später erneut versuchen" } }
{ "action": "quarantine" } { "action": "discard" }
Einstellungen, Standardwerte & Best Practices
| Einstellung / Ort | Funktion | Standardwert | Best Practice im Betrieb |
|---|---|---|---|
Milter-Adresse |
TCP oder Unix-Socket des Milters: inet:host:port, inet:port@host (Sendmail-Schreibweise), host:port oder unix:/pfad. | - |
Rspamd: inet:127.0.0.1:11332 (Proxy-Worker mit milter = yes). ClamAV-Milter: unix:/run/clamav/clamav-milter.ctl oder inet:127.0.0.1:7357. |
Phasen und Aktionen (Milter) |
Optionsaushandlung v6, Makros (j, {client_addr}, i, {auth_authen}, {mail_addr}, {rcpt_addr}), connect, helo, mail, rcpt, data, header, eoh, body, eom. Antworten: accept, continue, reject, tempfail, discard, Antwortcode, Quarantäne. Änderungen: Header hinzufügen, einfügen, ändern, Inhalt ersetzen, Empfänger hinzufügen/entfernen, Absender ändern. | alle angeboten |
Phasen, die der Milter abwählt (SMFIP_NO*), werden nicht gesendet; Phasen ohne Antwort (SMFIP_NR_*) werden nicht abgewartet. |
Zeitlimits |
Verbinden, je Befehl und für Inhalt/Ende der Nachricht getrennt einstellbar; Fortschrittsmeldungen (progress) verlängern das Inhaltslimit. | 5 s / 10 s / 60 s |
Für Virenscanner mit großen Anhängen das Inhaltslimit auf 120 bis 300 s erhöhen. |
MTA-Hook Phasen und Sicherheit |
Pro Hook wählbar: connect, ehlo, mail, rcpt, data. Optionaler Auth-Header (z. B. Authorization: Bearer ...) und HMAC-SHA256-Signatur; beide werden verschlüsselt gespeichert und nie angezeigt. | data |
Nur benötigte Phasen aktivieren: jeder Aufruf verlängert den SMTP-Dialog um die Antwortzeit des Hooks. Der Hook sollte in unter einer Sekunde antworten. |
Reihenfolge |
Milter und Hooks laufen nach dem Feld Reihenfolge; die erste Abweisung beendet die Kette. Bei DATA sieht jeder Filter die Nachricht mit den Änderungen der vorherigen. | Milter 100, Hooks 200 |
Schnelle, günstige Prüfungen (z. B. Reputation) vor teure (Virenscan) setzen. |