Spamfilter für Postfix
Spam Scanner filtert einen Postfix-Server in etwa fünf Minuten. Er läuft als MilterMail-Filter: ein Protokoll von Sendmail, das auch Postfix verwendet und mit dem ein separates Programm jede Nachricht während der SMTP-Sitzung prüfen kann., sodass Postfix ihn während der SMTP-Sitzung zu jeder Nachricht fragt und Spam abweisen kann, bevor er angenommen wird.
Installieren und starten#
npm install --global spamscanner
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"--auth prüft SPFSender Policy Framework: ein DNS-Eintrag, der die Server auflistet, die für eine Domain E-Mails senden dürfen., DKIMDomainKeys Identified Mail: eine Signatur über eine Nachricht, geprüft mit einem öffentlichen Schlüssel aus dem DNS des Absenders., DMARCEine DNS-Richtlinie, die Empfängern sagt, was mit E-Mails geschehen soll, die sich auf eine Domain berufen, aber die SPF- und DKIM-Ausrichtung nicht bestehen. und ARCAuthenticated Received Chain: Signaturen, die Authentifizierungsergebnisse über weiterleitende Server hinweg mitführen.; --subject-tag kennzeichnet Spam im Betreff. Jede Nachricht erhält die Header X-Spam-Flag, X-Spam-Score, X-Spam-Status und X-Spam-Action, und jeder X-Spam-*-Header, den der Absender eingefügt hat, wird zuerst entfernt.
Postfix anbinden#
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_protocol = 6
milter_default_action = acceptsudo postfix reloadmilter_default_action = accept lässt E-Mails ungefiltert durch, wenn der Milter nicht läuft; tempfail bittet Absender stattdessen, es erneut zu versuchen.
Spam während der SMTP-Sitzung abweisen#
spamscanner milter --port 7831 --auth --rejectNachrichten ab dem Ablehnungsschwellenwert (15 Punkte) werden mit 451 4.7.1 Message rejected as spam abgewiesen. Ein 451 ist temporär: Der Absender behält die Nachricht und versucht es erneut, sodass eine falsche Entscheidung eine Verzögerung kostet, keine verlorene Nachricht. Sobald die Ergebnisse stimmen, macht --reject-code 550 die Ablehnung dauerhaft.
Ohne Milter#
Ein Content-Filter läuft, nachdem Postfix eine Nachricht angenommen hat: Postfix leitet sie per Pipe an spamscanner filter weiter, das Header hinzufügt und sie zurückgibt. Während der Sitzung wird nie etwas abgewiesen, und ein Fehler verzögert die Zustellung immer, statt eine Unzustellbarkeitsnachricht auszulösen. Einrichtung des Content-Filters
Spam in den Junk-Ordner#
Mit Dovecot legt eine Sieve-Regel markierte E-Mails ab:
require ["fileinto"];
if header :is "X-Spam-Flag" "YES" { fileinto "Junk"; stop; }Gegen ein echtes Postfix getestet#
Die End-to-End-Tests des Projekts betreiben Postfix mit dem Milter und dem Content-Filter: Ham wird mit Headern zugestellt und ein gefälschtes X-Spam-Flag entfernt, Spam wird markiert, und GTUBEGeneric Test for Unsolicited Bulk Email: eine feste Zeichenkette, die jeder Spamfilter als Spam behandelt, für Tests. wird während der SMTP-Sitzung mit 550 abgewiesen.
Weiter: die vollständige Anleitung zu Postfix und Sendmail, mit einer systemd-Unit und INPUT_MAIL_FILTER für Sendmail.