Postfix/SpamAssassin

Aus Foxwiki
Version vom 25. Juli 2023, 13:40 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Postfix und SpamAssassin == ; E-Mail-Spam mit Postfix und SpamAssassin Content Filter blockieren Tipps und Tricks zum Blockieren von E-Mail-Spam * Mit Postfix und SpamAssassin (SA) den Header und den Body von E-Mails überprüft SpamAssassin ist ein kostenloses, quelloffenes, flexibles und leistungsfähiges Tool zur Spam-Bekämpfung. == E-Mail-Header- und Body-Checks mit Postfix SMTP-Server == Postfix bietet 4 einfache Parameter zur Inhaltsprüfung.…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Postfix und SpamAssassin

E-Mail-Spam mit Postfix und SpamAssassin Content Filter blockieren

Tipps und Tricks zum Blockieren von E-Mail-Spam

  • Mit Postfix und SpamAssassin (SA) den Header und den Body von E-Mails überprüft

SpamAssassin ist ein kostenloses, quelloffenes, flexibles und leistungsfähiges Tool zur Spam-Bekämpfung.

E-Mail-Header- und Body-Checks mit Postfix SMTP-Server

Postfix bietet 4 einfache Parameter zur Inhaltsprüfung.

  • header_checks
  • mime_header_checks
  • nested_header_checks
  • body_checks

Postfix prüft alle eingehenden E-Mails, wenn einer der oben genannten Parameter verwendet wird. Jeder Parameter verweist auf eine Nachschlagetabelle, die Muster für reguläre Ausdrücke und Aktionen enthält. Die Muster werden mit Zeichenketten in den E-Mail-Nachrichten (Header und Body) verglichen. Wenn Postfix eine Übereinstimmung findet, wird die angegebene Aktion ausgeführt. Die Überprüfung von Header und Body erfolgt durch den Postfix cleanup-Daemon.

Es gibt hauptsächlich zwei Arten von regulären Ausdrücken, die von Postfix verwendet werden können.

regexp: POSIX regulärer Ausdruck

  • PCRE: Perl-kompatibler regulärer Ausdruck

Postfix unterstützt POSIX reguläre Ausdrücke, aber PCRE ist viel schneller. Um PCRE in Postfix zu verwenden, müssen Sie das Paket postfix-pcre installieren.

sudo apt install postfix-pcre

Führen Sie den folgenden Befehl aus und Sie werden sehen, dass pcre jetzt unterstützt wird.

postconf -m

Header Checks

Um header_checks in Postfix zu aktivieren, öffnen Sie die Hauptkonfigurationsdatei.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile am Ende der Datei ein.

header_checks = pcre:/etc/postfix/header_checks

Speichern und schließen Sie die Datei. Anschließend müssen Sie die Nachschlagedatei /etc/postfix/header_checks mit einem Kommandozeilen-Editor wie Nano erstellen.

sudo nano /etc/postfix/header_checks

Sie können die Überprüfung mit regulären Ausdrücken wie folgt hinzufügen.

/kostenloses Hypothekenangebot/ REJECT
/Reparieren Sie Ihren Kredit/ REJECT

Der linke Schlüssel ist ein regulärer Ausdruck, der von zwei Schrägstrichen eingeschlossen ist. Wenn eine der Zeichenfolgen auf der linken Seite in einer der Kopfzeilen einer E-Mail-Nachricht vorkommt (am ehesten in der Betreffzeile), wird die Nachricht im SMTP-Dialog abgelehnt. Standardmäßig wird bei der Prüfung regulärer Ausdrücke nicht zwischen Groß- und Kleinschreibung unterschieden.

Sie können auch DISCARD anstelle von REJECT verwenden.

/Kostenloses Hypothekenangebot/ DISCARD
/Reparieren Sie Ihren Kredit/ DISCARD

Dies veranlasst Postfix, eine erfolgreiche Zustellung zu melden und die Nachricht stillschweigend zu verwerfen. DISCARD lässt es so aussehen, als wäre die Nachricht zugestellt worden, obwohl sie einfach weggeworfen wurde. Ich verwende DISCARD oft, wenn ich nicht möchte, dass der Spammer erfährt, dass ich eine bestimmte Phrase für eingehende E-Mails blockiert habe. DISCARD kann auch nützlich sein, um das Problem der Rückstreuung zu minimieren. Wenn die E-Mail-Adresse eines unschuldigen Benutzers als Absenderadresse verwendet wird, können Sie eine erfolgreiche Zustellung behaupten, so dass der unschuldige Benutzer keine Bounce-Nachrichten erhält.

Einige dumme Spammer verwenden mehrere E-Mail-Adressen in der An:-Kopfzeile, anstatt Blind Carbon Copy (BCC) zu verwenden. Wenn Sie sicher sind, dass eine E-Mail-Adresse keine E-Mails mit mehreren Empfängern in der An:-Kopfzeile akzeptiert, können Sie die folgenden Zeilen hinzufügen, um solche E-Mails zu verwerfen.

/To:.*(gmail.com|yahoo.com|outlook|hotmail.com).*you@yourdomain.com/ DISCARD
/Zu:.*you@yourdomain.com.*(gmail.com|yahoo.com|outlook|hotmail.com)/ DISCARD

Die obigen Zeilen prüfen, ob eine Gmail/Yahoo/Outlook/Hotmail-Adresse und Ihre Domänen-E-Mail-Adresse gleichzeitig in der Zu:-Kopfzeile stehen. Wenn ja, wird die E-Mail verworfen. Die beiden Zeichen .* sind ein Platzhalter in regulären Ausdrücken, der mit beliebigen Zeichen kombiniert werden kann.

Dasselbe können Sie auch mit der Cc: (carbon copy) Kopfzeile machen, wenn Sie sicher sind, dass eine E-Mail-Adresse keine E-Mails mit mehreren Empfängern in der Cc: Kopfzeile annimmt

/Cc:.*(gmail.com|yahoo.com|outlook|hotmail.com).*you@yourdomain.com/ DISCARD
/Cc:.*you@yourdomain.com.*(gmail.com|yahoo.com|outlook|hotmail.com)/ DISCARD

Einige Spammer verwenden leere E-Mail-Adressen in der From: oder To: Kopfzeile, Sie können die folgenden Prüfungen hinzufügen.

/An:.*<>/ ABLEHNEN
/Von:.*<>/ DISCARD

Sobald Sie die Datei header_checks lookup bearbeitet haben, müssen Sie die Indexdatei erstellen.

sudo postmap /etc/postfix/header_checks

Starten Sie anschließend Postfix neu, damit die Änderungen wirksam werden.

sudo systemctl restart postfix

Body-Checks

Zusätzlich zu den Header-Checks kann Postfix auch den Body einer E-Mail-Nachricht überprüfen. Um body_checks in Postfix zu aktivieren, öffnen Sie die Hauptkonfigurationsdatei.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile am Ende der Datei ein.

body_checks = pcre:/etc/postfix/body_checks

Speichern und schließen Sie die Datei. Anschließend müssen Sie die Nachschlagedatei /etc/postfix/body_checks erstellen.

sudo nano /etc/postfix/body_checks

Sie können die Überprüfung mit regulären Ausdrücken wie folgt hinzufügen.

/Kostenloses Hypothekenangebot/ REJECT
/repair your credit/ REJECT

Sie können DISCARD statt REJECT verwenden.

/Kostenloses Hypothekenangebot/ DISCARD
/Reparieren Sie Ihren Kredit/ DISCARD

Die durch den Parameter body_checks angegebenen Muster werden in jeder Zeile des Nachrichtentextes überprüft. Wenn eine der Zeichenfolgen auf der linken Seite im Text einer E-Mail-Nachricht erscheint, wird die Nachricht zurückgewiesen oder verworfen. Sobald Sie die Bearbeitung der body_checks lookup-Datei abgeschlossen haben, müssen Sie die Indexdatei erstellen.

sudo postmap /etc/postfix/body_checks

Starten Sie anschließend Postfix neu, damit die Änderungen wirksam werden.

sudo systemctl restart postfix

SpamAssassin-Inhaltsfilter

Die eingebaute Inhaltskontrolle in Postfix ist sehr einfach. Es gibt jedoch keine Möglichkeit, einzelne Nachrichten auf die Whitelist zu setzen, die Sie möglicherweise empfangen möchten, obwohl sie Ausdrücke enthalten, die eine Ablehnung auslösen, und Sie möchten möglicherweise eine E-Mail-Nachricht nicht aufgrund einer einzigen Regel ablehnen oder verwerfen. Für eine anspruchsvollere Analyse müssen wir einen speziellen Inhaltsfilter (wie SpamAssassin) verwenden, der speziell für die Erkennung von Spam entwickelt wurde.

SpamAssassin ist ein punktebasiertes System. Es prüft E-Mail-Nachrichten anhand einer großen Anzahl von Regeln, im Gegensatz zu einer einzelnen Regel in Postfix. Jede Regel erhöht oder verringert die Punktzahl der Nachricht. Wenn die Punktzahl hoch genug ist (standardmäßig 5,0), wird die Nachricht als Spam eingestuft.

SpamAssassin installieren

Hinweis: Wenn Sie iRedMail zum Einrichten Ihres Mailservers verwendet haben, ist SpamAssassin bereits zusammen mit Amavis installiert, das SpamAssassin-Regeln lesen kann. Sie brauchen die Anweisungen in diesem Abschnitt nicht zu befolgen.

Führen Sie den folgenden Befehl aus, um SpamAssassin aus dem Standard-Debian/Ubuntu-Software-Repository zu installieren. Spamc ist der Client für den SpamAssassin-Daemon zur Spamfilterung.

sudo apt install spamassassin spamc

Während der Installation werden automatisch der Benutzer und die Gruppe debian-spamd angelegt. Die vom Paket spamassassin installierte Binärdatei heißt spamd, die auf dem TCP-Port 783 des lokalen Rechners lauscht.

Standardmäßig ist der spamassassin systemd Dienst deaktiviert, Sie können den automatischen Start beim Booten aktivieren mit:

sudo systemctl enable spamassassin

Dann starten Sie SpamAssassin.

sudo systemctl start spamassassin

SpamAssassin mit Postfix SMTP Server als Milter einbinden

Es gibt mehrere Möglichkeiten, SpamAssassin in Postfix zu integrieren. Ich ziehe es vor, SpamAssassin über die Sendmail-Milter-Schnittstelle zu verwenden, da ich so eine E-Mail zurückweisen kann, wenn sie eine sehr hohe Punktzahl wie z.B. 8 erreicht, so dass sie nie vom Empfänger gesehen wird.

Installieren Sie die spamass-filter Pakete aus dem Debian/Ubuntu Standard Software Repository.

sudo apt install spamass-milter

Bearbeiten Sie anschließend die Datei /etc/postfix/main.cf und fügen Sie die folgenden Zeilen am Ende der Datei ein.

# Milter-Konfiguration
milter_default_action = akzeptieren
milter_protokoll = 6
smtpd_milters = local:spamass/spamass.sock
nicht_smtpd_milters = $smtpd_milters

Wenn Sie OpenDKIM und OpenDMARC konfiguriert haben, dann sollten diese Zeilen wie unten aussehen. Die Reihenfolge ist wichtig.

# Milter-Konfiguration
milter_default_action = akzeptieren
milter_protokoll = 6
smtpd_milters = local:opendkim/opendkim.sock,local:opendmarc/opendmarc.sock,local:spamass/spamass.sock
nicht_smtpd_milters = $smtpd_milters

Wenn Sie OpenDMARC nicht konfiguriert haben, dann sollten Sie local:opendmarc/opendmarc.sock, aus smtpd_milters entfernen.

Speichern und schließen Sie die Datei. Öffnen Sie nun die Datei /etc/default/spamass-milter und suchen Sie die folgende Zeile.

#OPTIONS="${OPTIONS} -r 15"

Entfernen Sie den Kommentar in dieser Zeile und ändern Sie 15 in Ihre bevorzugte Ablehnungszahl, z. B. 8.

OPTIONS="${OPTIONS} -r 8"

Wenn die Punktzahl einer bestimmten E-Mail über 8 liegt, wird sie von Spamassassin zurückgewiesen und Sie finden eine Meldung wie die folgende in der Datei /var/log/mail.log, die anzeigt, dass sie zurückgewiesen wurde.

milter-reject: END-OF-MESSAGE 5.7.1 Von SpamAssassin blockiert

Wenn Sie möchten, dass der Absender einen anderen Ablehnungstext sieht, dann fügen Sie die Option -R (reject text) wie folgt hinzu.

OPTIONS="-u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE"

Speichern und schließen Sie die Datei. Starten Sie Postfix und Spamass Milter neu, damit die Änderungen wirksam werden.

sudo systemctl restart postfix spamass-milter

Hinweis: iRedMail-Benutzer müssen den SpamAssassin-Dienst starten, um spamass-milter verwenden zu können.

sudo systemctl start spamassassin
sudo systemctl enable spamassassin

Überprüfung von E-Mail-Kopf und -Text mit SpamAssassin

SpamAssassin wird mit vielen Regeln zur Spamerkennung im Verzeichnis /usr/share/spamassassin/ ausgeliefert. Erlauben Sie mir, einige der Regeln zu erklären.

In der Datei /usr/share/spamassassin/20_head_tests.cf finden Sie die folgenden zwei Zeilen.

header MISSING_HEADERS eval:check_for_missing_to_header()
describe MISSING_HEADERS Fehlt bis: header

Die erste Zeile prüft, ob die Kopfzeile To: in einer E-Mail-Nachricht vorhanden ist. Die zweite Zeile, die optional ist, erklärt, was die erste Zeile tut. Die Großbuchstaben sind der Name dieses Tests.

Mit den folgenden 3 Zeilen wird geprüft, ob in der E-Mail-Nachricht eine Kopfzeile Date: vorhanden ist.

header __HAS_DATE existiert:Datum
meta MISSING_DATE !__HAS_DATE
describe MISSING_DATE Fehlendes Datum: header

Und diese 3 Zeilen dienen zum Testen, ob in der E-Mail-Nachricht eine From:-Überschrift vorhanden ist.

header __HAS_FROM existiert:From
meta MISSING_FROM !__HAS_FROM
describe MISSING_FROM Fehlender From: Header

Vielleicht möchten Sie den mit SpamAssassin gelieferten Cron-Job verwenden, um die Regeln von SpamAssassin täglich automatisch zu aktualisieren. Wenn dies der Fall ist, öffnen Sie die Datei /etc/default/spamassassin und ändern Sie CRON=0 in CRON=1.

Benutzerdefinierte Punktzahl für bestehende Regeln festlegen

In den Dateien 50_scores.cf und 72_scores.cf können Sie die Standardwerte für verschiedene Tests sehen. Wenn Sie der Meinung sind, dass die Standardpunktzahl für einen bestimmten Test zu niedrig oder zu hoch ist, können Sie eine eigene Punktzahl in der Datei /etc/spamassassin/local.cf festlegen.

sudo nano /etc/spamassassin/local.cf

Zum Beispiel verlangt RFC 5322, dass jede E-Mail-Nachricht die Header-Felder From: und Date: haben muss. Ich kann also eine sehr hohe Punktzahl festlegen, wenn eines der beiden Felder in einer E-Mail-Nachricht fehlt, indem ich die folgenden zwei Zeilen in der Datei local.cf anhänge.

Wertung MISSING_FROM 5.0
score MISSING_DATE 5.0

Obwohl das To:-Header-Feld in RFC 5322 nicht zwingend vorgeschrieben ist, ziehe ich es vor, eine hohe Punktzahl festzulegen, wenn es in einer E-Mail-Nachricht fehlt, da ich noch nie eine legitime E-Mail ohne dieses Header-Feld gesehen habe.

Wertung MISSING_HEADERS 3.0

Einige Spammer verwenden zwei E-Mail-Adressen im From: Header-Feld wie unten.

Von: "tonywei_darefly_mold@aliyun.com" <sales10@darefly-mould.com>

Ich denke, dass die Standardbewertung für diese Art von E-Mail zu niedrig ist. Ich bevorzuge den Wert 3,0.

Wertung PDS_FROM_2_EMAILS 3.0

Es gibt Spammer, die leere Nachrichten ohne Betreff und ohne Textteile im Textkörper versenden. Ich setze die Punktzahl für diese Art von E-Mails auf 5,0, so dass sie im Spam-Ordner landen. Warum sollte man sie lesen, wenn sie leer ist?

Wertung EMPTY_MESSAGE 5.0

Andere Spammer fordern Sie oft auf, eine Lesebestätigung zu senden. Für diese Art von E-Mail setze ich die Punktzahl auf 2,0.

Wertung FREEMAIL_DISPTO 2.0

Einige Spammer verwenden unterschiedliche Domänennamen in der From: und Reply-To: Kopfzeile, ich gebe ihnen eine 3,5 Punktzahl.

Wertung FREEMAIL_FORGED_REPLYTO 3.5

Ich habe auch einige Spammer gesehen, die nicht existierende Domänennamen im From:-Headerfeld verwenden. Für diese Art von E-Mails habe ich einen Wert von 5,0 festgelegt.

Wertung DKIM_ADSP_NXDOMAIN 5.0

Zu guter Letzt fälschen viele Spammer die gmail.com-Domäne im From:-Headerfeld. Ich habe diese Art von E-Mail mit 2,5 Punkten bewertet.

Wertung FORGED_GMAIL_RCVD 2.5

Hinzufügen eigener Regeln

Sie können eigene SpamAssassin-Regeln in der Datei /etc/spamassassin/local.cf hinzufügen.

sudo nano /etc/spamassassin/local.cf

Kopfzeilenregeln

Einige Spammer verwenden zum Beispiel dieselbe E-Mail-Adresse in der From: und To: Kopfzeile, Sie können die folgenden Zeilen am Ende der Datei hinzufügen, um solche E-Mails zu bewerten.

header FROM_SAME_AS_TO ALL=~/\nFrom: ([^\n]+)\nTo: \1/sm
Beschreibung FROM_SAME_AS_TO Die Absenderadresse ist die gleiche wie die Empfängeradresse.
Wertung FROM_SAME_AS_TO 2.0

Einige Spammer verwenden eine leere Adresse für die Envelope From Adresse (auch bekannt als Return Path Header). Obwohl dies für das Versenden von Bounce-Nachrichten legitim ist, ziehe ich es vor, diese Art von E-Mail mit einer Bewertung zu versehen.

Kopfzeile EMPTY_RETURN_PATH ALL =~ /<>/i
beschreibt EMPTY_RETURN_PATH leere Adresse im Return Path Header.
Wertung EMPTY_RETURN_PATH 3.0

Wenn Sie OpenDMARC auf Ihrem Mailserver konfiguriert haben, können Sie nun die folgenden Zeilen hinzufügen, um E-Mails, die die DMARC-Prüfung nicht bestehen, mit Punkten zu versehen.

header CUSTOM_DMARC_FAIL Authentication-Results =~ /dmarc=fail/
describe CUSTOM_DMARC_FAIL Diese E-Mail hat die DMARC-Prüfung nicht bestanden
Wertung CUSTOM_DMARC_FAIL 3.0

Der obige Code weist SpamAssassin an zu prüfen, ob der Header Authentication-Results die Zeichenfolge "dmarc=fail" enthält. Falls gefunden, wird die Punktzahl um 3,0 erhöht.

Body-Regeln

Sie können SpamAssassin anweisen, die Punktzahl einer E-Mail zu erhöhen, wenn eine bestimmte Phrase im Textkörper gefunden wird. Zum Beispiel verwenden viele Spammer die E-Mail-Adresse des Empfängers in der ersten Zeile des Textes, wie unten dargestellt.

Hallo xiao@linuxbabe.com
Hallo xiao@linuxbabe.com
Liebe xiao@linuxbabe.com

Ich möchte nicht mit Leuten sprechen, die sich nicht die Mühe machen, meinen Namen in die erste Zeile der E-Mail zu schreiben. Also habe ich eine Regel in SpamAssassin erstellt, um diese Art von E-Mails zu filtern.

body BE_POLITE /(hi|hello|dear) xiao\@linuxbabe\.com/i
describe BE_POLITE In dieser E-Mail wird kein richtiger Name für den Empfänger verwendet
bewerte BE_POLITE 5.0

Reguläre Ausdrücke in SpamAssassin unterscheiden standardmäßig zwischen Groß- und Kleinschreibung. Sie können die Option i am Ende hinzufügen, um die Groß- und Kleinschreibung zu ignorieren.

Negative Wertungen hinzufügen

Sie können gute E-Mails auch mit einer negativen Bewertung versehen, um die Zahl der Fehlalarme zu verringern. Zum Beispiel stellen mir viele meiner Blog-Leser Fragen zu Linux, und ich glaube nicht, dass Spammer Wörter wie Debian, Ubuntu, Linux Mint in den E-Mail-Text einfügen würden, also habe ich die folgende Regel erstellt

body GOOD_EMAIL /(debian|ubuntu|linux mint|centos|red hat|RHEL|OpenSUSE|Fedora|Arch Linux|Raspberry Pi|Kali Linux)/i
beschreibe GOOD_EMAIL Ich glaube nicht, dass Spammer diese Wörter in den E-Mail-Text einfügen würden.
GOOD_EMAIL bewerten -4.0

Wenn der E-Mail-Text den Namen einer Linux-Distribution enthält, wird ein negativer Wert (-4,0) hinzugefügt.

Es gibt einige häufig vorkommende Phrasen, die in legitimen Bounce-Nachrichten enthalten sind, so dass ich diesen E-Mail-Nachrichten eine negative Bewertung hinzufügen kann.

body BOUNCE_MSG /(Unzustellbare E-Mail an den Absender zurückgesandt|Unzustellbar|Auto-Reply|Automatische Antwort)/i
describe BOUNCE_MSG Benachrichtigungen über unzustellbare Mails oder automatische Antworten
Wertung BOUNCE_MSG -1.5

Beachten Sie, dass die Body-Regeln auch den Betreff als erste Zeile des Body-Inhalts enthalten.

Meta-Regeln

Zusätzlich zu den Header- und Body-Regeln gibt es auch Meta-Regeln. Metaregeln sind Kombinationen von anderen Regeln. Sie können eine Metaregel erstellen, die ausgelöst wird, wenn zwei oder mehr andere Regeln zutreffen. Zum Beispiel erhalte ich gelegentlich E-Mails, in denen steht, dass der Absender sich um eine Stelle bewerben möchte und ein Lebenslauf beigefügt ist. Ich habe auf meiner Website nie gesagt, dass ich Leute einstellen muss. Der Anhang wird zur Verbreitung von Viren verwendet. Ich habe die folgende Metaregel erstellt, um diese Art von E-Mail zu filtern.

body __RESUME /(C.V|Resume)/i
meta RESUME_VIRUS (__RESUME && __MIME_BASE64)
describe RESUME_VIRUS Der Anhang enthält einen Virus.
score RESUME_VIRUS 5.5

Die erste Unterregel __RESUME prüft, ob der E-Mail-Text das Wort C.V. oder Resumee enthält. Die zweite Unterregel __MIME_BASE64 ist bereits in der Datei /usr/share/spamassassin/20_body_tests.cf wie folgt definiert, so dass ich sie in der Datei local.cf nicht erneut definieren muss. Diese Regel testet, ob die E-Mail-Nachricht einen base64-Anhang enthält.

rawbody __MIME_BASE64 eval:check_for_mime('mime_base64_count')
describe __MIME_BASE64 Enthält einen base64-Anhang

Meine Metaregel RESUME_VIRUS wird ausgelöst, wenn beide Unterregeln wahr sind, und fügt der E-Mail-Nachricht eine Punktzahl von 5,5 hinzu. Beachten Sie, dass die Unterregel oft mit einem doppelten Unterstrich beginnt, so dass sie für sich genommen keine Wertung hat.

Sie haben nun gelernt, wie man eine Punktzahl hinzufügt, wenn eine Zeichenfolge gefunden wird. Was ist, wenn Sie eine Punktzahl hinzufügen möchten, wenn eine Zeichenfolge nicht in den E-Mail-Kopfzeilen vorhanden ist? Nun, Sie können den Operator ! verwenden. Ich habe zum Beispiel gesehen, dass Spammer ein einzelnes Wort in der From: Adresse verwenden. Ich habe die folgenden Zeilen hinzugefügt, um diese Art von E-Mails zu erkennen.

Kopfzeile __AT_IN_FROM From =~ /\@/
meta NO_AT_IN_FROM !__AT_IN_FROM
Wertung NO_AT_IN_FROM 4.0

Die erste Zeile prüft, ob das Zeichen @ in der From: Kopfzeile vorhanden ist. Die zweite Zeile definiert eine Metaregel, die ausgelöst wird, wenn !__AT_IN_FROM wahr ist. Die Regel !__AT_IN_FROM ist das Gegenteil der ersten Header-Regel, d.h. wenn kein @-Zeichen in der From: Adresse vorhanden ist, wird die Meta-Regel ausgelöst.

Sie können auch die folgenden Zeilen einfügen, um zu prüfen, ob ein Punkt in der From: Adresse vorhanden ist.

header __DOT_IN_FROM From =~ /\./
meta NO_DOT_IN_FROM !__DOT_IN_FROM
Wertung NO_DOT_IN_FROM 4.0

Whitelist

Sie können den Parameter whitelist_from verwenden, um eine bestimmte E-Mail-Adresse oder Domäne zu Ihrer Whitelist von Spamassassin hinzuzufügen. Fügen Sie zum Beispiel die folgenden zwei Zeilen am Ende der Datei local.cf ein.

whitelist_from xiao@linuxbabe.com
whitelist_from *@canonical.com

Ein Absender, der auf der Whitelist steht, hat eine Standardbewertung von -100. Sie werden immer noch von den SpamAssassin-Regeln geprüft, aber es ist sehr schwer für sie, einen Wert von 5,0 zu erreichen.

Schwarze Liste

Um einen Absender auf eine schwarze Liste zu setzen, verwenden Sie den Parameter blacklist_from, der das gleiche Format wie whitelist_from hat.

blacklist_from spam@example.com
blacklist_from *@example.org

Syntaxprüfung und Neustart

Nachdem Sie die Datei local.cf gespeichert haben. Sie sollten den spamassassin-Befehl im Lint-Modus ausführen, um zu prüfen, ob es Syntaxfehler gibt.

sudo spamassassin --lint

Starten Sie dann SpamAssassin neu, damit die Änderungen wirksam werden. (Wenn Sie Amavis mit Spamassasin wie in iRedMail verwenden, müssen Sie nur Amavis neu starten: sudo systemctl restart amavis)

sudo systemctl restart spamassassin

SpamAssassins eingebaute Whitelist

Es ist erwähnenswert, dass SpamAssassin mit einer eigenen Whitelist ausgeliefert wird. Es gibt mehrere Dateien im Verzeichnis /usr/share/spamassassin/, die 60_whitelist im Dateinamen enthalten. Diese Dateien enthalten die integrierte Whitelist von SpamAssassin. Die Datei 60_whitelist_spf.cf enthält zum Beispiel eine Liste von Adressen, die Mails senden, die oft (fälschlicherweise) als Spam gekennzeichnet werden.

Spam in den Junk-Ordner verschieben

Hinweis: Bei iRedMail ist dies bereits voreingestellt.

Ich werde Ihnen zeigen, wie Sie Spam mit dem Dovecot IMAP-Server und dem Sieve-Plugin in den Junk-Ordner verschieben können. Diese Methode erfordert, dass eingehende E-Mails über den Dovecot "deliver" LDA (local delivery agent) an den Nachrichtenspeicher geliefert werden. Wenn Sie den folgenden Text in der /var/log/mail.log Datei finden können, ist diese Anforderung erfüllt.

postfix/lmtp

oder

über den Dovecot-Dienst zugestellt

Führen Sie den folgenden Befehl aus und installieren Sie dovecot-sieve aus dem Ubuntu Software Repository.

sudo apt install dovecot-sieve

Dieses Paket installiert zwei Konfigurationsdateien im Verzeichnis /etc/dovecot/conf.d/: 90-sieve.conf und 90-sieve-extprograms.conf. Öffnen Sie die Datei 15-lda.conf.

sudo nano /etc/dovecot/conf.d/15-lda.conf

Fügen Sie das Sieve-Plugin zum Local Delivery Agent (LDA) hinzu.

protocol lda {
    # Durch Leerzeichen getrennte Liste der zu ladenden Plugins (Standard ist global mail_plugins).
    mail_plugins = $mail_plugins sieve
}

Speichern und schließen Sie die Datei. Wenn Sie die Datei 20-lmtp.conf im Verzeichnis /etc/dovecot/conf.d/ finden, dann sollten Sie auch das Sieve-Plugin in dieser Datei wie folgt aktivieren.

protocol lmtp {
      mail_plugins = quota sieve
}

Bearbeiten Sie die Datei /etc/dovecot/conf.d/10-mail.conf.

sudo nano /etc/dovecot/conf.d/10-mail.conf

Sieve-Skripte werden im Home-Verzeichnis des jeweiligen Benutzers gespeichert. Wenn Sie meinem PostfixAdmin-Tutorial gefolgt sind und virtuelle Mailbox-Domänen verwenden, müssen Sie mail_home für die virtuellen Benutzer aktivieren, indem Sie die folgende Zeile in die Datei einfügen, da virtuelle Benutzer standardmäßig keine Home-Verzeichnisse haben.

mail_home = /var/vmail/%d/%n

Speichern und schließen Sie die Datei. Öffnen Sie dann die Datei 90-sieve.conf.

sudo nano /etc/dovecot/conf.d/90-sieve.conf

Gehen Sie zu Zeile 79 und fügen Sie die folgende Zeile ein, die Sieve anweist, das Skript SpamToJunk.sieve immer vor allen benutzerspezifischen Skripten auszuführen.

sieve_before = /var/mail/SpamToJunk.sieve

Speichern und schließen Sie die Datei. Erstellen Sie dann das sieve-Skript.

sudo nano /var/mail/SpamToJunk.sieve

Fügen Sie die folgenden Zeilen hinzu, die Dovecot anweisen, alle E-Mail-Nachrichten mit dem X-Spam-Flag: YES-Header in den Junk-Ordner zu verschieben.

require "fileinto";

if header :contains "X-Spam-Flag" "YES"
{
   fileinto "Junk";
   stop;
}

Speichern und schließen Sie die Datei. Wir können dieses Skript kompilieren, damit es schneller läuft.

sudo sievec /var/mail/SpamToJunk.sieve

Jetzt gibt es eine Binärdatei, die als /var/mail/SpamToJunk.svbin gespeichert ist. Starten Sie abschließend dovecot neu, damit die Änderungen wirksam werden.

sudo systemctl restart dovecot

Maximale Größe der Nachricht festlegen

Standardmäßig prüft SpamAssassin keine Nachrichten mit Anhängen, die größer als 500 KB sind, wie die folgende Zeile in der Datei /var/log/mail.log zeigt.

spamc[18922]: übersprungene Nachricht, größer als die maximale Nachrichtengröße (512000 Bytes)

Der Standardwert max-size ist auf 512000 (Bytes) eingestellt. Ein hoher Wert könnte die Serverlast erhöhen, aber ich denke, dass die Standardgröße ein wenig zu klein ist. Um die maximale Größe zu erhöhen, editieren Sie die Datei /etc/default/spamass-milter und fügen Sie die folgenden Zeilen am Ende ein.

#Spamc-Optionen
OPTIONS="${OPTIONS} -- --max-size=5120000"

Die leere ---Option weist spamass-milter an, alle übrigen Optionen an spamc zu übergeben, das die --max-size-Option versteht. Ich habe die Größe auf 5000KB erhöht. Speichern und schließen Sie die Datei. Starten Sie dann spamass-milter neu.

sudo systemctl restart spamass-milter

Wie man individuelle Benutzereinstellungen konfiguriert

Vielleicht möchten Sie individuelle Regeln für E-Mails festlegen, die an eine bestimmte Adresse auf dem Mailserver gesendet werden. Mir gefällt diese Funktion sehr gut. Ich habe eine Kontakt-E-Mail-Adresse für diesen Blog, die nur dazu dient, mit den Lesern in Kontakt zu bleiben. Da ich die Kontakt-E-Mail-Adresse nicht anderweitig verwende, kann ich spezielle Regeln zur Spam-Filterung erstellen, die nur für diese Kontakt-E-Mail-Adresse gelten.

Bearbeiten Sie zunächst die Hauptkonfigurationsdatei von SpamAssassin.

sudo nano /etc/spamassassin/local.cf

Fügen Sie die folgende Zeile zu den allow_user_rules hinzu.

allow_user_rules 1

Speichern und schließen Sie die Datei. Als nächstes bearbeiten Sie die Umgebungsdatei von SpamAssassin.

sudo nano /etc/default/spamassassin

Suchen Sie die folgende Zeile.

OPTIONS="--create-prefs --max-children 5 --helper-home-dir"

Wir müssen sie ändern in

OPTIONS="--create-prefs --max-children 5 --helper-home-dir --nouser-config --virtual-config-dir=/var/vmail/%d/%l/spamassassin --username=vmail"

Wo:

  • --nouser-config: Deaktiviert die Konfigurationsdatei pro Benutzer für lokale Unix-Benutzer.

--virtual-config-dir: gibt das Konfigurationsverzeichnis für virtuelle Benutzer an. Der Platzhalter %d steht für den Domänenteil der E-Mail-Adresse und %l für den lokalen Teil der E-Mail-Adresse. --username: Führen Sie spamd als den Benutzer vmail aus.

Speichern und schließen Sie die Datei. Starten Sie anschließend SpamAssassin neu.

sudo systemctl restart spamassassin

Standardmäßig sendet der spamass-milter nur den lokalen Teil der E-Mail-Adresse an SpamAssassin. Wir müssen dafür sorgen, dass er die vollständige E-Mail-Adresse sendet. Bearbeiten Sie die Konfigurationsdatei von spamass-milter.

sudo nano /etc/default/spamass-milter

Suchen Sie die folgende Zeile.

OPTIONS="-u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE"

Fügen Sie die folgende Option zu dieser Zeile hinzu.

-e ihredomain.de

Etwa so:

OPTIONS="-e yourdomain.com -u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE"

Die Option -e bewirkt, dass spamass-milter die vollständige E-Mail-Adresse an SpamAssassin weitergibt. Ersetzen Sie yourdomain.com durch Ihren echten Domänennamen. Speichern und schließen Sie die Datei. Starten Sie dann spamass-milter neu.

sudo systemctl neu starten spamass-milter

Senden Sie nun eine E-Mail von Gmail, Hotmail usw. an Ihre Domänen-E-Mail-Adresse. Sie werden feststellen, dass das spamassassin-Verzeichnis automatisch unter dem Verzeichnis /var/vmail/yourdomain.com/username/ erstellt wird.

cd /var/vmail/ihredomain.de/benutzername/spamassassin/

Sie können einen Kommandozeilen-Editor verwenden, um hier die Einstellungsdatei für jeden Benutzer zu erstellen. Diese Datei muss als user_prefs benannt werden.

sudo nano user_prefs

Sie können in dieser Datei genau wie in der Datei /etc/spamassassin/local.cf eigene Regeln hinzufügen.

Ich habe zum Beispiel festgestellt, dass viele Spammer ihre E-Mails mit einem Abmeldelink abschließen, über den man den zukünftigen Kontakt abbrechen kann. Ich habe ihre Spam-Mails nicht abonniert, und ich glaube nicht, dass der Abmeldelink meine E-Mail-Adresse aus ihrer Kontaktdatenbank entfernen wird. Deshalb verwende ich SpamAssassin, um diese Art von E-Mails zu bewerten. Die folgende Regel fügt E-Mails, die das Wort "unsubscribe" oder seine Variationen im Textkörper enthalten, eine Punktzahl von 3,0 hinzu. (Ich benutze die Kontakt-E-Mail-Adresse dieses Blogs nicht, um irgendetwas online zu abonnieren.)

body SUBSCRIPTION_SPAM /(unsubscribe|u n s u b s c r i b e|Un-subscribe)/i
describe SUBSCRIPTION_SPAM Ich habe Ihre Spam nicht abonniert.
Wertung SUBSCRIPTION_SPAM 3.0

Manchmal enthält der E-Mail-Text nicht das Wort "unsubscribe", sondern einen List-Unsubscribe-Header, was bedeutet, dass der Spammer meine Kontakt-E-Mail-Adresse ohne meine Zustimmung zu seiner Mailingliste hinzugefügt hat. Auch diese Art von E-Mail kann ich mit der folgenden Regel bewerten.

header LIST_UNSUBSCRIBE ALL =~ /List-Unsubscribe/i
describe LIST_UNSUBSCRIBE Ich habe mich nicht in Ihre Mailingliste eingetragen.
Wertung LIST_UNSUBSCRIBE 2.0

Ich habe ein Mailjet-Konto mit einer anderen E-Mail-Adresse eingerichtet. Einige Spammer gehen davon aus, dass ich meine Kontakt-E-Mail-Adresse verwendet habe, um ein Mailjet-Konto einzurichten, und versuchen daher, sich als Mailjet-Kundendienst auszugeben, um mich dazu zu bringen, mein Passwort auf einer gefälschten Mailjet-Anmeldeseite einzugeben. Ich kann diese Art von E-Mail wie folgt erkennen.

header MAILJET_IMPOSTER From =~ /mailjet/i
describe MAILJET_IMPOSTER Ich habe kein Mailjet-Konto für diese E-Mail-Adresse.
Wertung MAILJET_IMPOSTER 2.5

Die obigen Zeilen prüfen, ob der Absender:-Header das Wort mailjet enthält. Wenn es gefunden wird, wird es mit 2,5 Punkten bewertet.

Gelegentlich erhalte ich E-Mails von chinesischen Spammern, deren Absender:-Domainname keine Vokalbuchstaben (a, e, i, o, u) enthält. Der Spammer verwendet den cdjcbzclyxgs.xyz-Domänennamen. Für eine normale Person/Einrichtung ist es fast unmöglich, Domänennamen ohne Vokalbuchstaben zu verwenden, wenn man bedenkt, dass viele Top-Level-Domänen bereits Vokalbuchstaben enthalten (.com, .net, .org, .co, .io, .shop, .dev, usw.), daher gebe ich dieser Art von E-Mail eine sehr hohe Punktzahl wie unten. Der Standardwert ist 0,5.

Wertung FROM_DOMAIN_NOVOWEL 4.0

Manche Spam-E-Mails enthalten viele Bilder, aber nur sehr wenig Text. Der Standardwert für diese Art von E-Mails ist 1,9, aber ich ziehe es vor, einen hohen Wert für meine Kontakt-E-Mail-Adresse festzulegen.

Wertung HTML_IMAGE_RATIO_02 4.0

Ich habe auch eine Spam-E-Mail mit meiner E-Mail-Adresse in der Betreffzeile erhalten, also kann ich ihr eine hohe Punktzahl zuweisen.

header SUBJECT_SPAM Betreff =~ /xiao\@linuxbabe.com/i
describe SUBJECT_SPAM Der Betreff enthält meine E-Mail-Adresse.
Wertung SUBJECT_SPAM 4.0

Einige Spammer verwenden BCC (Blind Carbon Copy), um andere Empfänger zu verschleiern. Ich möchte solche E-Mails nicht erhalten. Deshalb habe ich die folgende Regel aufgestellt. Wenn mein Domänenname nicht in der Kopfzeile To: steht, füge ich 3.0 an die E-Mail an.

Kopfzeile __DOMAIN_IN_TO To =~ /linuxbabe.com/
meta DOMAIN_NOT_IN_TO !__DOMAIN_IN_TO
Wertung DOMAIN_NOT_IN_TO 3.0

Schließen Sie nach dem Hinzufügen der benutzerdefinierten Regeln die Datei und führen Sie den folgenden Befehl aus, um die Syntax zu überprüfen. Eine stille Ausgabe bedeutet, dass es keinen Syntaxfehler gibt.

sudo spamassassin --lint

Starten Sie abschließend SpamAssassin neu, damit die Änderungen wirksam werden.

sudo systemctl restart spamassassin

Nun können Sie die Benutzereinstellungen testen, indem Sie Test-E-Mails von anderen E-Mail-Diensten an Ihre eigene Domain-E-Mail-Adresse senden.

Whitelisting für bestimmte E-Mail-Adressen

Angenommen, Sie haben eine E-Mail-Adresse, die E-Mails von einigen wenigen E-Mail-Adressen akzeptiert, und Sie möchten alle anderen Absender blockieren. Das ist sehr einfach zu bewerkstelligen. Gehen Sie in das Verzeichnis /var/vmail/yourdomain.com/username/spamassassin/ und erstellen Sie die Datei user_prefs. Dann fügen Sie erlaubte E-Mail-Adressen zur Whitelist hinzu.

whitelist_from *@Ihre-eigene-Domäne.com
whitelist_from someboday@gmail.com

Als nächstes fügen Sie alle Domains zur Blacklist hinzu.

blacklist_from *

Speichern und schließen Sie die Datei. Starten Sie SpamAssassin neu, damit die Änderungen wirksam werden.

sudo systemctl restart spamassassin

Ablehnen oder Bounce

Wenn ein empfangender SMTP-Server während der SMTP-Konversation feststellt, dass er die Nachricht nicht annimmt, weist er die Nachricht zurück. Es kommt vor, dass der SMTP-Server eine Nachricht annimmt und später feststellt, dass sie nicht zugestellt werden kann, weil der vorgesehene Empfänger nicht existiert oder es ein Problem bei der endgültigen Zustellung gibt. In diesem Fall sendet der SMTP-Server, der die Nachricht angenommen hat, diese an den ursprünglichen Absender zurück, indem er einen Fehlerbericht sendet, der in der Regel auch den Grund enthält, warum die ursprüngliche Nachricht nicht zugestellt werden konnte.

Sie sollten Spam nicht zurückschicken, da die E-Mail-Adresse in der Return-path:-Kopfzeile oder From:-Kopfzeile wahrscheinlich nicht existiert oder die E-Mail-Adresse einer unschuldigen Person ist, so dass die zurückgeschickte Nachricht wahrscheinlich an die E-Mail-Adresse einer unschuldigen Person geht, was das Problem der Rückstreuung verursacht. Anstatt den Spam zu bouncen, sollten Sie Spam während des SMTP-Dialogs zurückweisen, bevor die E-Mail akzeptiert wird. In diesem Artikel wurde nicht gezeigt, wie Sie eine Spam-Nachricht abweisen. Sie sollten sich diese Regel merken, wenn Sie selbst Spam-Filter-Regeln erstellen wollen. Im Zweifelsfall sollten Sie Ihre Spam-Filter-Regeln testen, um zu sehen, ob sie Bounce-Nachrichten erzeugen.

URIBL_BLOCKED

Standardmäßig aktiviert SpamAssassin die URIBL-Regel, die prüft, ob eine E-Mail-Nachricht Links enthält, die von URIBL als Spam identifiziert werden. Dies ist eine sehr effektive Anti-Spam-Maßnahme. Es kann jedoch sein, dass Sie an der Abfrage von URIBL gehindert werden. Überprüfen Sie die rohen E-Mail-Header einer eingehenden E-Mail-Nachricht und suchen Sie den X-Spam-Status-Header.

X-Spam-Status: No, score=-92.2 required=5.0 tests=DATING_SPAM,DKIM_SIGNED,
	DKIM_VALID,HTML_FONT_LOW_CONTRAST,HTML_MESSAGE,SPF_PASS,
	SUBSCRIPTION_SPAM,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_IN_WHITELIST
	autolearn=no autolearn_force=no version=3.4.2

Wenn Sie in dieser Kopfzeile URIBL_BLOCKED finden, bedeutet dies, dass Sie für die Abfrage von URIBL gesperrt sind. Meistens liegt es daran, dass Sie keinen eigenen lokalen DNS-Resolver verwenden. Sie können den folgenden Befehl auf Ihrem Mailserver ausführen, um zu testen, welchen DNS-Server Sie zur Abfrage von URIBL verwenden.

host -tTXT 2.0.0.127.multi.uribl.com

Beispielhafte Ausgabe:

2.0.0.127.multi.uribl.com beschreibender Text "127.0.0.1 -> Query Refused. Siehe http://uribl.com/refused.shtml für weitere Informationen [Ihre DNS IP: xx.xx.xx.xx]"

Um diesen Fehler zu beheben, müssen Sie Ihren eigenen lokalen DNS-Resolver auf Ihrem Mailserver ausführen.

  • Eigenen BIND DNS Resolver unter Debian ausführen
  • Eigenen BIND-DNS-Resolver unter Ubuntu 18.04, 16.04 ausführen
  • Eigener BIND DNS Resolver unter Ubuntu 20.04
  • Eigener BIND-DNS-Resolver unter CentOS/RHEL

Sobald Ihr lokaler DNS-Resolver in Betrieb ist, testen Sie URIBL erneut.

host -tTXT 2.0.0.127.multi.uribl.com

Wenn Sie die folgende Ausgabe sehen, bedeutet dies, dass Sie jetzt URIBL abfragen dürfen.

2.0.0.127.multi.uribl.com beschreibender Text "permanenter Testpunkt"

Von nun an werden eingehende E-Mail-Nachrichten nicht mehr das URIBL_BLOCKED-Tag im X-Spam-Status-Header haben.

Ausgehendes Spam verhindern

Die Header- und Body-Checks von Postfix können auch dazu verwendet werden, ausgehenden Spam zu verhindern. Wenn Sie zum Beispiel nicht wollen, dass Ihr E-Mail-Server E-Mails an eine bestimmte E-Mail-Adresse sendet, können Sie die folgende Zeile in /etc/postfix/header_checks einfügen.

/^To:.*fake.*/ DISCARD

Die obige Zeile prüft, ob der An:-Header das Wort fake enthält. Wenn es gefunden wird, wird die E-Mail verworfen. Ich zeige hier nur ein einfaches Beispiel. Dies kann nützlich sein, wenn Sie ein Kontakt- oder Anmeldeformular auf Ihrer Website haben und einige Besucher gefälschte E-Mail-Adressen im Formular verwenden, um Spam auf Ihrem E-Mail-Server zu erzeugen.

Speichern und schließen Sie die Datei. Führen Sie dann den folgenden Befehl aus, um die Hash-Tabelle neu zu erstellen.

sudo postmap /etc/postfix/header_checks

Laden Sie Postfix neu, damit die Änderung wirksam wird.

sudo systemctl reload postfix

Löschen von E-Mail-Headern für ausgehende E-Mails

Sie können smtp_header_checks verwenden, um E-Mail-Kopfzeilen zu löschen, die sensible Informationen enthalten könnten. smtp_header_checks wird nur angewandt, wenn Postfix als SMTP-Client fungiert, hat also keinen Einfluss auf eingehende E-Mails.

Wenn Sie zum Beispiel nicht möchten, dass der Empfänger weiß, dass Sie SpamAssassin auf Ihrem Mailserver verwenden, können Sie die Datei /etc/postfix/smtp_header_checks erstellen

sudo nano /etc/postfix/smtp_header_checks

Und fügen Sie die folgenden Zeilen in die Datei ein. Dies weist Postfix an, den X-Spam-Status und X-Spam-Checker-Version Header aus der E-Mail-Nachricht zu löschen, wenn E-Mails gesendet werden.

/^X-Spam-Status:/ IGNORE
/^X-Spam-Prüfer-Version:/ IGNORE

Speichern und schließen Sie die Datei. Bearbeiten Sie anschließend die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile am Ende der Datei ein.

smtp_header_checks = pcre:/etc/postfix/smtp_header_checks

Speichern und schließen Sie die Datei. Führen Sie anschließend den folgenden Befehl aus.

sudo postmap /etc/postfix/smtp_header_checks

Laden Sie Postfix neu, damit die Änderung wirksam wird.

sudo systemctl reload postfix

Andere Leckerbissen

Das spamassassin-Paket auf Debian/Ubuntu wird mit einem Cron-Job (/etc/cron.daily/spamassassin) ausgeliefert, der die Regelsätze täglich mit dem Befehl sa-update automatisch aktualisiert.

SpamAssassin 4.0 enthält ein HashBL-Plugin, das überprüfen kann, ob eine Bitcoin-Adresse im E-Mail-Text von Betrügern verwendet wurde. Außerdem gibt es ein neues Plugin namens "Ole Macro", das prüfen kann, ob eine E-Mail einen Office-Anhang mit einem Makro enthält. Dieses Plugin versucht zu erkennen, ob das angehängte Makro bösartig ist oder nicht.

  1. https://www.linuxbabe.com/mail-server/block-email-spam-check-header-body-with-postfix-spamassassin