Postfix/Spam

Aus Foxwiki

topic - Kurzbeschreibung

Beschreibung

Anhang

Siehe auch

Dokumentation

Links

Projekt
Weblinks

TMP

Blockieren Spam mit Postfix

Postfix kann Spam blockieren, bevor er in Ihre Mailbox gelangt, und so Bandbreite und Speicherplatz sparen.

Merkmale von Spam

Diese Spams sind leicht zu blockieren

  1. Ihre IP-Adressen haben keine PTR-Einträge.
  2. Der Spammer gibt keinen gültigen Hostnamen in der HELO/EHLO-Klausel an.
  3. Sie fälschen die MAIL FROM-Adresse.
  4. Sie senden E-Mails nach einer fehlgeschlagenen Zustellung im Allgemeinen nicht erneut.

Seriöse E-Mail-Server sollten diese Merkmale nicht aufweisen.

Mit folgenden Maßnahmen können ca. 90 % der Spam-Mails blockiert werden

  • So werden 93%~95% der E-Mails weltweit am SMTP-Gateway abgelehnt und landen nie im Posteingang oder im Spam-Ordner

Fehlender PTR-Eintrag

Der PTR-Eintrag ordnet eine IP-Adresse einem Domänennamen zu. Er ist das Gegenstück zum A-Eintrag. Unter Linux können Sie den mit einer IP-Adresse verbundenen Domänennamen abfragen, indem Sie den folgenden Befehl ausführen:

host <IP-Adresse>

Der folgende Befehl gibt beispielsweise den Hostnamen des Mailservers von Google zurück.

host 209.85.217.172

Ausgabe:

172.217.85.209.in-addr.arpa Domainname Zeiger mail-ua0-f172.google.com.

Aufgrund der Verbreitung von Spam verlangen viele Mailserver (wie Gmail, gmx.com, gmx.net, facebook.com), dass SMTP-Clients über gültige PTR-Einträge verfügen, die mit ihren IP-Adressen verknüpft sind. Jeder Mailserver-Administrator sollte PTR-Einträge für seine SMTP-Server einrichten. Wenn der SMTP-Client einen PTR-Eintrag hat, finden Sie im Postfix-Protokoll eine Zeile wie die folgende.

Verbindung von mail-ua0-f172.google.com[209.85.217.172]

Wenn der SMTP-Client keinen PTR-Eintrag hat, wird der Hostname als unbekannt identifiziert.

verbinden von unbekannt[120.41.196.220]

Um E-Mails ohne PTR-Records herauszufiltern, öffnen Sie die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile in smtpd_sender_restrictions ein. Diese Direktive lehnt eine E-Mail ab, wenn die Client-IP-Adresse keinen PTR-Eintrag hat.

reject_unknown_reverse_client_hostname

Beispiel:

smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unbekannter_umgekehrter_Client_Hostname

Speichern und schließen Sie die Datei. Starten Sie anschließend Postfix neu, damit die Änderung wirksam wird.

sudo systemctl restart postfix

Hostnamensbeschränkungen

HELO/EHLO-Hostnamensbeschränkungen

Einige Spammer geben im SMTP-Dialog keinen gültigen HELO/EHLO-Hostnamen an. Dabei kann es sich um nicht voll qualifizierte Domänennamen handeln, oder ein Domänenname existiert nicht oder nur für ein internes Netzwerk. Ein Spammer, der eine Amazon EC2-Instanz zum Versenden von Spam verwendet, wird beispielsweise auf meinem Server wie folgt protokolliert:

Aug 16 04:21:13 email postfix/smtpd[7070]: connect from ec2-54-237-201-103.compute-1.amazonaws.com[54.237.201.103]
Aug 16 04:21:13 email policyd-spf[7074]: prepend Received-SPF: None (mailfrom) identity=mailfrom; client-ip=54.237.201.103; helo=ip-172-30-0-149.ec2.internal; envelope-from=superdiem@carpaythe.tk; receiver=<UNKNOWN>

Wie Sie sehen können, lautet der HELO-Hostname ip-172-30-0-149.ec2.internal , der nur im internen AWS-Netzwerk gültig ist. Er hat weder einen gültigen A-Eintrag noch einen MX-Eintrag.

Um die Einschränkung von HELO/EHLO-Hostnamen zu aktivieren, bearbeiten Sie die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie zunächst die folgende Zeile ein, damit der Client einen HELO/EHLO-Hostnamen angeben muss.

smtpd_helo_erforderlich = yes

Dann fügen Sie die folgenden 3 Zeilen hinzu, um smtpd_helo_restrictions zu aktivieren.

smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated

Verwenden Sie die folgende Zeile, um Clients abzulehnen, die einen ungültigen HELO/EHLO-Hostnamen angeben.

reject_invalid_helo_hostname

Verwenden Sie die folgende Zeile, um nicht vollständig qualifizierte HELO/EHLO-Hostnamen zurückzuweisen.

reject_non_fqdn_helo_hostname

Um E-Mails abzulehnen, wenn der HELO/EHLO-Hostname weder einen DNS-A-Eintrag noch einen MX-Eintrag hat, verwenden Sie

reject_unknown_helo_hostname

Etwa so:

smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_invalid_helo_hostname
ablehnen_nicht_fqdn_helo_hostname
reject_unbekannter_helo_Hostname

Speichern und schließen Sie die Datei. Dann laden Sie Postfix neu.

sudo systemctl reload postfix

Beachten Sie, dass die meisten legitimen Mailserver zwar einen gültigen A-Eintrag für den HELO/EHLO-Hostnamen haben, dass aber gelegentlich ein legitimer Mailserver diese Anforderung nicht erfüllt. Sie müssen sie mit check_helo_access auf eine Whitelist setzen.

smtpd_helo_required = yes
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
check_helo_access hash:/etc/postfix/helo_access
reject_invalid_helo_hostname
ablehnen_nicht_fqdn_helo_hostname
reject_unknown_helo_hostname

Dann müssen Sie die Datei /etc/postfix/helo_access erstellen.

sudo nano /etc/postfix/helo_access

Nehmen Sie den HELO/EHLO-Hostnamen des legitimen Mailservers wie folgt in die Whitelist auf.

optimus-webapi-prod-2.localdomain OK
va-massmail-02.rakutenmarketing.com OK

Wenn Sie nicht wissen, welche Hostnamen Sie auf die Whitelist setzen sollen, kopieren Sie einfach die beiden obigen Zeilen, die die einzigen Zeilen in meiner helo_access-Datei sind. Sie können später jederzeit weitere Rechnernamen hinzufügen. Speichern und schließen Sie die Datei. Führen Sie dann den folgenden Befehl aus, um die Datei /etc/postfix/helo_access.db zu erstellen.

sudo postmap /etc/postfix/helo_access

Und laden Sie Postfix neu.

sudo systemctl reload postfix

Ungültige A-Records

Ein seriöser E-Mail-Server sollte auch einen gültigen A-Eintrag für seinen Hostnamen haben. Die vom A-Eintrag zurückgegebene IP-Adresse sollte mit der IP-Adresse des E-Mail-Servers übereinstimmen. Um E-Mails von Hosts herauszufiltern, die keinen gültigen A-Record haben, bearbeiten Sie die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgenden zwei Zeilen in smtpd_sender_restrictions ein.

reject_unknown_reverse_client_hostname
reject_unbekannter_Client_Hostname

Beispiel:

smtpd_sender_restrictions =
permit_mynetworks
zulassen_sasl_authentifiziert
reject_unbekannter_umgekehrter_Client_Hostname
reject_unbekannter_Client_Hostname

Speichern und schließen Sie die Datei. Starten Sie anschließend Postfix neu, damit die Änderung wirksam wird.

sudo systemctl restart postfix

Beachten Sie, dass reject_unknown_client_hostname kein HELO vom SMTP-Client benötigt. Es holt den Hostnamen aus dem PTR-Eintrag und prüft dann den A-Eintrag.

Ungültige FROM-Domäne

FROM-Domäne ohne MX- oder A-Eintrag

Die MAIL FROM Adresse ist auch als Umschlag von Adresse bekannt. Manche Spammer verwenden eine nicht existierende Domain in der MAIL FROM-Adresse. Wenn ein Domainname keinen MX-Eintrag hat, findet Postfix den A-Eintrag der Hauptdomain und sendet E-Mails an diesen Host. Wenn die Absenderdomäne weder einen MX- noch einen A-Eintrag hat, kann Postfix keine E-Mails an diese Domäne senden. Warum also nicht E-Mails abweisen, auf die man nicht antworten kann?

Um diese Art von Spam herauszufiltern, bearbeiten Sie die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile in smtpd_sender_restrictions ein. Sie lehnt E-Mails ab, wenn der Domainname der Adresse, die mit dem Befehl MAIL FROM angegeben wurde, weder einen MX- noch einen A-Eintrag hat.

reject_unbekannter_absender_domain

Beispiel:

smtpd_sender_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unbekannte_absender_domäne
reject_unbekannter_umgekehrter_Client_Hostname
reject_unbekannter_Client_Hostname

Speichern und schließen Sie die Datei. Starten Sie anschließend Postfix neu, damit die Änderung wirksam wird.

sudo systemctl restart postfix

Beachten Sie, dass ich diese Einschränkung über andere reject-Einschränkungen gesetzt habe. Meiner Erfahrung nach funktioniert sie nicht, wenn sie unter anderen reject-Einschränkungen steht. (Vielleicht ist das nur auf meinem E-Mail-Server so.)

Greylisting

Wie vom SMTP-Protokoll gefordert, muss jeder legitime SMTP-Client in der Lage sein, E-Mails erneut zu senden, wenn die Zustellung fehlschlägt. (Standardmäßig ist Postfix so konfiguriert, dass es fehlgeschlagene E-Mails mehrmals sendet, bevor es den Absender darüber informiert, dass die Nachricht nicht zugestellt werden konnte.) Viele Spammer senden in der Regel nur einmal und versuchen es nicht noch einmal.

Postgrey ist ein Greylisting Policy Server für Postfix. Benutzer von Debian und Ubuntu können postgrey aus dem Standard-Repository installieren.

sudo apt install postgrey

CentOS/RHEL-Benutzer können es aus dem EPEL-Repository installieren.

sudo dnf install epel-release
sudo dnf install postgrey

Sobald es installiert ist, starten Sie es mit systemctl.

sudo systemctl start postgrey

Aktivieren Sie den Autostart beim Booten.

sudo systemctl enable postgrey

Unter Debian und Ubuntu lauscht es am TCP-Port 10023 auf localhost (sowohl IPv4 als auch IPv6).

sudo netstat -lnpt | grep postgrey

Unter CentOS/RHEL lauscht Postgrey an einem Unix-Socket (/var/spool/postfix/postgrey/socket).

Als Nächstes müssen wir die Hauptkonfigurationsdatei von Postfix bearbeiten, damit sie den Greylisting Policy Server verwendet.

sudo nano /etc/postfix/main.cf

Fügen Sie die folgende Zeile in smtpd_recipient_restrictions ein, wenn Sie Debian oder Ubuntu verwenden.

check_policy_service inet:127.0.0.1:10023

Wenn Sie CentOS/RHEL verwenden, müssen Sie stattdessen die folgende Zeile hinzufügen.

check_policy_service unix:/var/spool/postfix/postgrey/socket

Falls Sie es nicht wissen, die Direktive check_policy_service unix:private/policyd-spf im obigen Screenshot veranlasst Postfix, den SPF-Record auf der Domain des Absenders zu überprüfen. Für diese Direktive müssen Sie das Paket postfix-policyd-spf-python installieren und konfigurieren.

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

sudo systemctl restart postfix

Von nun an wird Postgrey eine E-Mail ablehnen, wenn das Absender-Tripel (Absender-IP-Adresse, Absender-E-Mail-Adresse, Empfänger-E-Mail-Adresse) neu ist. Die folgende Logmeldung in /var/log/mail.log zeigt ein neues Absendertriplett an. Die Aktion "greylist" bedeutet, dass diese E-Mail-Nachricht abgelehnt wurde.

postgrey[1016]: action=greylist, reason=new, client_name=unknown, client_address=117.90.24.148/32, sender=pnccepjeu@rhknqj.net, recipient=xiao@linuxbabe.com

Meiner Erfahrung nach verwenden chinesische E-Mail-Spammer gerne eine gefälschte, seltsam aussehende und zufällig generierte Absenderadresse für jede E-Mail, so dass das Hinzufügen dieser gefälschten E-Mail-Adressen zur schwarzen Liste sie nicht aufhalten wird. Andererseits versuchen sie nie, eine abgelehnte E-Mail mit derselben Absenderadresse erneut zu versenden, was bedeutet, dass Greylisting sehr effektiv sein kann, um diese Art von Spam zu stoppen.

Problembehebung

Fehlerbehebung unter Debian & Ubuntu

Wenn Sie den folgenden Fehler im Mail-Log (/var/log/mail.log) sehen

warning: connect to 127.0.0.1:10023: Verbindung verweigert
warning: problem talking to server 127.0.0.1:10023: Verbindung verweigert

Das Problem ist, dass postgrey nicht läuft. Sie müssen 127.0.0.1 als Abhöradresse in der /etc/default/postgrey Datei angeben. Ändern Sie also die folgende Zeile

POSTGREY_OPTS="--inet=10023"

in .

POSTGREY_OPTS="--inet=127.0.0.1:10023"

Starten Sie dann postgrey neu.

sudo systemctl restart postgrey

Prüfen Sie, ob er lauscht:

sudo netstat -lnpt | grep 10023

Benutzererfahrungen verbessern

Greylisting kann zu einer schlechten Erfahrung für den Endbenutzer führen, da der Benutzer mehrere Minuten warten muss, bis die E-Mail ankommt. Um diese schlechte Erfahrung zu minimieren, können Sie eine Whitelist erstellen und einen zweiten MX-Eintrag verwenden, der auf denselben Host verweist.

Whitelist

Postgrey wird mit zwei Whitelist-Dateien ausgeliefert (/etc/postgrey/whitelist_clients und /etc/postgrey/whitelist_recipients). Erstere enthält eine Liste von Hostnamen und letztere eine Liste von Empfängeradressen.

Standardmäßig sind die Mailserver von Google auf der Whitelist. Egal, ob der Absender eine @gmail.com-Adresse oder eine andere Adresse verwendet, solange der Absender den Mailserver von Google verwendet, wird Postgrey die E-Mail nicht zurückweisen. Die folgende Zeile in meiner /var/log/mail.log Datei zeigt dies.

postgrey[1032]: action=pass, reason=client whitelist, client_name=mail-yb0-f190.google.com

Hinweis: Sie können die Logs von postgrey auch mit diesem Befehl sudo journalctl -u postgrey einsehen.

Sie können andere Hostnamen in der Datei /etc/postgrey/whitelist_clients hinzufügen, wie z.B.

facebook.com
bounce.twitter.com
blogger.com
email.medium.com

Sie können diese Hostnamen mit einem Tool namens pflogsumm ermitteln, auf das ich später in diesem Artikel eingehen werde. Speichern und schließen Sie die Datei und starten Sie Postgrey neu.

sudo systemctl restart postgrey

Einen weiteren MX-Hostnamen mit der gleichen IP-Adresse anlegen

Sie können mehr als einen MX-Eintrag für Ihren Domänennamen wie unten angegeben erstellen.

Eintragstyp Name Mailserver Priorität
MX @ mail.ihredomain.de 0
MX @ mail2.ihredomain.de 5

Der Absender versucht es mit dem ersten Mailserver (mit Priorität 0). Wenn mail.yourdomain.com die E-Mail durch Greylisting zurückweist, würde der Absender sofort den zweiten Mailserver (mit Priorität 5) versuchen.

Wenn die beiden Mailserver-Hostnamen dieselbe IP-Adresse haben, wird die E-Mail beim Versuch des Absenders, den zweiten Mailserver-Hostnamen zu erreichen, sofort akzeptiert (wenn alle anderen Prüfungen erfolgreich sind), und die Endbenutzer bemerken die durch das Greylisting verursachte Verzögerung nicht.

Beachten Sie, dass Sie dazu eine sehr kleine Verzögerungszeit wie 1 Sekunde in /etc/default/postgrey (Debian & Ubuntu) oder /etc/sysconfig/postgrey (CentOS/RHEL) einstellen müssen. Die Verzögerungszeit teilt dem SMTP-Client mit, wie viele Sekunden er warten soll, bevor er erneut sendet. Wenn die Verzögerungszeit nicht klein genug ist, würde die zweite E-Mail-Zustellung trotzdem abgelehnt werden.

Debian/Ubuntu

POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=1"

CentOS/RHEL

OSTGREY_DELAY="--delay=1"

Starten Sie Postgrey neu.

sudo systemctl restart postgrey

Beachten Sie auch, dass nicht alle Mailserver sofort den zweiten MX-Host ausprobieren würden.

Blacklists

Öffentliche Echtzeit-Blacklists verwenden Es gibt Spam-E-Mails, die von Servern gesendet werden, die einen gültigen Hostnamen und einen gültigen PTR-Eintrag haben und die graue Liste durchlaufen können. In diesem Fall können Sie Blacklists verwenden, um Spam abzuweisen. Es gibt viele öffentliche Echtzeit-Blacklists (RBL), auch bekannt als DNSBLs (DNS-basierte Listen). Mit Echtzeit ist gemeint, dass sich die Liste ständig ändert. Eine IP-Adresse oder ein Domänenname kann heute auf der Liste stehen und morgen nicht mehr, so dass Sie je nach Zeitpunkt der Abfrage unterschiedliche Ergebnisse erhalten.

Sie können mehrere Blacklists verwenden, um Spam zu blockieren. Gehen Sie zu https://www.debouncer.com und mxtoolbox.com , geben Sie die Domäne und IP-Adresse des Spammers ein, um zu sehen, welche Blacklists ihn blockieren, und dann können Sie diese Blacklists verwenden. Ich habe zum Beispiel herausgefunden, dass die Spammer von einer der folgenden Blacklists blockiert werden:

  • dbl.spamhaus.org
  • zen.spamhaus.org
  • multi.uribl.com
  • ivmURI
  • InvaluementURI

So kann ich die folgenden Konfigurationen in der /etc/postfix/main.cf Datei hinzufügen. Einige öffentliche Blacklisting-Dienste verlangen eine monatliche Gebühr. Im Moment benutze ich den kostenlosen Dienst von spamhaus.org.

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
check_policy_service unix:private/policyd-spf,
check_policy_service inet:127.0.0.1:10023,
reject_rhsbl_helo dbl.spamhaus.org,
reject_rhsbl_reverse_client dbl.spamhaus.org,
reject_rhsbl_sender dbl.spamhaus.org,
reject_rbl_client zen.spamhaus.org

Wo:

  • rhs steht für die rechte Seite, d.h. den Domainnamen.

reject_rhsbl_helo bewirkt, dass Postfix E-Mails zurückweist, wenn der HELO- oder EHLO-Hostname des Clients auf der schwarzen Liste steht. reject_rhsbl_reverse_client: weist die E-Mail zurück, wenn der ungeprüfte Reverse-Client-Hostname auf der schwarzen Liste steht. Postfix holt den Client-Hostnamen aus dem PTR-Eintrag. Wenn der Hostname auf der schwarzen Liste steht, wird die E-Mail zurückgewiesen. reject_rhsbl_sender sorgt dafür, dass Postfix E-Mails zurückweist, wenn die MAIL FROM Domain auf der Blacklist steht. reject_rbl_client: Dies ist eine IP-basierte Blacklist. Wenn die Client-IP-Adresse auf der schwarzen Liste steht, wird die E-Mail zurückgewiesen.

Einige Spammer verwenden Googles Mailserver, so dass reject_rhsbl_helo unwirksam ist, aber die meisten von ihnen verwenden ihre eigenen Domainnamen im MAIL FROM-Header, so dass reject_rhsbl_sender wirksam ist.

Eine Whitelist erstellen

Manchmal gibt es legitime E-Mail-Server, die auf der schwarzen Liste stehen. Sie können eine Whitelist erstellen, damit diese nicht blockiert werden. Erstellen Sie die folgende Datei.

sudo nano /etc/postfix/rbl_override

Nehmen Sie in dieser Datei die Domänennamen wie folgt in die Whitelist auf.

dripemail2.com OK //Diese Domain gehört zu drip.com
mlsend.com OK //Diese Domain gehört zum E-Mail-Marketingdienst mailerlite

Speichern und schließen Sie die Datei. Führen Sie dann den folgenden Befehl aus, um die Datei rbl_override.db zu erstellen.

sudo postmap /etc/postfix/rbl_override

Bearbeiten Sie die Hauptkonfigurationsdatei von Postfix.

sudo nano /etc/postfix/main.cf

Fügen Sie in smtpd_recipient_restrictions die folgende Zeile ein.

check_client_access hash:/etc/postfix/rbl_override,

Wie unten. Sie sollte oberhalb der anderen RBL-Prüfungen platziert werden.

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
check_policy_service unix:private/policyd-spf,
check_policy_service inet:127.0.0.1:10023,
check_client_access hash:/etc/postfix/rbl_override,
reject_rhsbl_helo dbl.spamhaus.org,
reject_rhsbl_reverse_client dbl.spamhaus.org,
reject_rhsbl_sender dbl.spamhaus.org,
reject_rbl_client zen.spamhaus.org

Laden Sie Postfix neu, damit die Änderungen wirksam werden.

sudo systemctl reload postfix

Verwendung einer öffentlichen Whitelist zur Verringerung von False Positive

Das Führen einer privaten Whitelist ist manchmal notwendig, aber Sie können auch öffentliche Whitelists verwenden, von denen die bekannteste dnswl.org ist. Derzeit gibt es nur eine Whitelist für IP-Adressen. Die Whitelist für Domänennamen befindet sich im Beta-Stadium. Um sie zu benutzen, fügen Sie die folgende Zeile in smtpd_recipient_restrictions ein.

permit_dnswl_client list.dnswl.org=127.0.[0..255].[1..3],

Wie unten. Sie sollte oberhalb der reject_rbl_client Prüfung platziert werden.

smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
check_policy_service unix:private/policyd-spf,
check_policy_service inet:127.0.0.1:10023,
check_client_access hash:/etc/postfix/rbl_override,
reject_rhsbl_helo dbl.spamhaus.org,
reject_rhsbl_reverse_client dbl.spamhaus.org,
reject_rhsbl_sender dbl.spamhaus.org,
permit_dnswl_client list.dnswl.org=127.0.[0..255].[1..3],
reject_rbl_client zen.spamhaus.org

Eine weitere bekannte Whitelist ist swl.spamhaus.org, die Sie ebenfalls zu Ihrer Konfiguration hinzufügen können.

permit_dnswl_client swl.spamhaus.org,

Es ist unmöglich, dass eine IP-Adresse gleichzeitig in der Whitelist und der Blacklist von Spamhaus aufgeführt ist. Wenn Sie also nur die Blacklist von Spamhaus in Postfix verwenden, ist es nicht notwendig, die Whitelist von Spamhaus zu überprüfen.

Postfix-Spamfilter

Hier ist ein Screenshot meiner Postfix-Spamfilter.

Sie fragen sich vielleicht, warum in den ersten beiden Konfigurationsschnipseln kein Komma steht. Nun, Sie können Werte in der Postfix-Konfigurationsdatei mit Leerzeichen, Zeilenumbruch oder Komma trennen. Wenn Sie einen Parameter mit einem Komma versehen (smptd_recipient_restrictions wie im obigen Screenshot), dann stellen Sie sicher, dass alle übrigen Werte mit einem Komma getrennt werden.

Postfix Log Report

Pflogsumm ist ein großartiges Tool, um eine Zusammenfassung der Postfix Logs zu erstellen. Installieren Sie es unter Ubuntu mit:

sudo apt install pflogsumm

Unter CentOS/RHEL wird pflogsumm durch das Paket postfix-perl-scripts bereitgestellt.

sudo dnf install postfix-perl-scripts

Verwenden Sie den folgenden Befehl, um einen Bericht für heute zu erstellen. (Beachten Sie, dass unter CentOS/RHEL die Mailprotokolldatei /var/log/maillog ist).

sudo pflogsumm -d today /var/log/mail.log

Erzeugen Sie einen Bericht für den gestrigen Tag.

sudo pflogsumm -d gestern /var/log/mail.log

Wenn Sie einen Bericht für diese Woche erstellen möchten.

sudo pflogsumm /var/log/mail.log

Um "Problem"-Berichte (Bounces, Deferees, Warnungen, Rejects) vor den "normalen" Statistiken auszugeben, verwenden Sie das --problems-first Flag.

sudo pflogsumm -d today /var/log/mail.log --problems-first

Um die E-Mail-Adresse des Absenders an jeden Eintrag im Reject-Bericht anzuhängen, verwenden Sie das Flag --rej-add-from.

sudo pflogsumm -d today /var/log/mail.log --rej-add-from

Um den vollständigen Grund für die Ablehnung in den Zusammenfassungen anzuzeigen, verwenden Sie die Option --verbose-msg-detail.

sudo pflogsumm -d today /var/log/mail.log --rej-add-from --verbose-msg-detail

Sie können einen Cron-Job hinzufügen, damit pflogsumm jeden Tag einen Bericht an Ihre E-Mail-Adresse sendet.

sudo crontab -e

Fügen Sie die folgende Zeile ein, die jeden Tag um 4:00 Uhr morgens einen Bericht erzeugt.

0 4 * * * /usr/sbin/pflogsumm -d gestern /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q

Um den Bericht per E-Mail zu erhalten, fügen Sie die folgende Zeile über allen Cron-Jobs ein.

MAILTO="ihre-email-adresse"

Achten Sie auf den Abschnitt message reject detail, in dem Sie sehen können, aus welchem Grund die E-Mails abgelehnt wurden und ob es irgendwelche Fehlalarme gab. Die Ablehnungen der Greylist können Sie getrost ignorieren.

Wenn die Variable MAILTO bereits gesetzt wurde, Sie aber möchten, dass die Postfix-Protokollzusammenfassung an eine andere E-Mail-Adresse gesendet wird, können Sie die folgende Zeile in Ihren Cron-Job einfügen.

0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q | mutt -s "Postfix log summary" your-email-address

Die Ausgabe des pflogsumm-Befehls wird an mutt, einen Mail-Benutzer-Agenten für die Kommandozeile, weitergeleitet, der die Ausgabe als E-Mail-Text verwendet und an die von Ihnen am Ende angegebene E-Mail-Adresse sendet. Natürlich müssen Sie mutt auf Ihrem Linux-Server installieren.

sudo apt install mutt

oder

sudo dnf install mutt

OpenDMARC

E-Mails ablehnen, die die DMARC-Prüfung nicht bestehen

DMARC (Domain-based Message Authentication, Reporting and Conformance) ist ein Internet-Standard, der es Domain-Besitzern ermöglicht, zu verhindern, dass ihre Domain-Namen von E-Mail-Spoofern verwendet werden. Bitte lesen Sie eine der folgenden Anleitungen, um OpenDMARC einzurichten.

  • OpenDMARC mit Postfix auf Ubuntu einrichten, um E-Mail-Spoofing zu verhindern
  • OpenDMARC mit Postfix auf CentOS/RHEL einrichten, um E-Mail-Spoofing zu verhindern

Sei kein Open Relay!

Mailserver, die E-Mails im Namen einer beliebigen Person an ein beliebiges Ziel weiterleiten, werden als Open Relay bezeichnet. Am Anfang ist das eine gute Sache. Im Laufe der Zeit wurden offene Relays von Spammern missbraucht, und heute stehen sie oft auf der schwarzen Liste. Die folgende Zeile in der Datei /etc/postfix/main.cf verhindert, dass Ihr E-Mail-Server ein Open Relay ist.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

Diese Zeile weist Postfix an, E-Mails nur von Clients in vertrauenswürdigen Netzwerken, von Clients, die sich mit SASL authentifiziert haben, oder an Domänen weiterzuleiten, die als autorisierte Relay-Ziele konfiguriert sind. Sie sollte nach der Installation von Postfix bereits in der Hauptkonfigurationsdatei enthalten sein.

fail2ban

Wie man die SMTP-AUTH-Flut von Spammern stoppt

Nach einiger Zeit wusste der Spammer, dass er meinen Spam-Filter nicht überwinden kann. Er begann, meinen E-Mail-Server mit SMTP-AUTH-Verbindungen zu überfluten. In meiner /var/log/mail.log Datei kann ich die folgenden Meldungen finden.

Dec 14 09:58:37 email postfix/smtpd[22095]: connect from unknown[117.86.35.119]
Dec 14 09:58:37 email postfix/smtpd[22119]: lost connection after AUTH from unknown[114.232.141.99]
Dec 14 09:58:37 email postfix/smtpd[22119]: disconnect von unbekannt[114.232.141.99] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:37 email postfix/smtpd[22119]: connect von unbekannt[180.120.191.91]
Dec 14 09:58:38 email postfix/smtpd[22095]: Verbindungsabbruch nach AUTH von unknown[117.86.35.119]
Dec 14 09:58:38 email postfix/smtpd[22095]: trennte die Verbindung von unknown[117.86.35.119] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:38 email postfix/smtpd[22119]: Verbindung nach AUTH von unknown[180.120.191.91] verloren
Dec 14 09:58:38 email postfix/smtpd[22119]: disconnect von unbekannt[180.120.191.91] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:38 email postfix/smtpd[22095]: Verbindung von unbekannt[49.67.68.34]
Dec 14 09:58:39 email postfix/smtpd[22106]: Verbindungsabbruch nach AUTH von unknown[180.120.192.199]
Dec 14 09:58:39 email postfix/smtpd[22106]: trennte die Verbindung von unknown[180.120.192.199] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:39 email postfix/smtpd[22095]: Verbindung verloren nach AUTH von unknown[49.67.68.34]
Dec 14 09:58:39 email postfix/smtpd[22095]: disconnect von unbekannt[49.67.68.34] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:39 email postfix/smtpd[22119]: connect von unbekannt[121.226.62.16]
Dec 14 09:58:39 email postfix/smtpd[22119]: connection lost after AUTH from unknown[121.226.62.16]
Dec 14 09:58:39 email postfix/smtpd[22119]: disconnect von unbekannt[121.226.62.16] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:39 email postfix/smtpd[22106]: connect von unbekannt[58.221.55.21]
Dec 14 09:58:40 email postfix/smtpd[22106]: connection lost after AUTH from unknown[58.221.55.21]
Dec 14 09:58:40 email postfix/smtpd[22106]: trennt die Verbindung von unknown[58.221.55.21] ehlo=1 auth=0/1 commands=1/2
Dec 14 09:58:47 email postfix/smtpd[22095]: Verbindung von unbekannt[121.232.65.223]
Dec 14 09:58:47 email postfix/smtpd[22095]: connection lost after AUTH from unknown[121.232.65.223]
Dec 14 09:58:47 email postfix/smtpd[22095]: disconnect von unbekannt[121.232.65.223] ehlo=1 auth=0/1 commands=1/2

Postfix ist so konzipiert, dass es auch unter schwierigen Bedingungen läuft. Es verwendet eine begrenzte Menge an Speicher, so dass solche Angriffe viel weniger effektiv sind. Ich möchte jedoch nicht, dass sie in meinem Mailprotokoll erscheinen, und wir sollten smtpd-Prozesse für legitime SMTP-Clients aufsparen, anstatt Zeit mit Spambots zu verschwenden. Um diese Art von Flood-Attacken zu stoppen, können Sie fail2ban verwenden, eine Reihe von Server- und Client-Programmen, die Brute-Force-Authentifizierungsversuche einschränken. Installieren Sie fail2ban aus dem Ubuntu-Standard-Repository.

sudo apt install fail2ban

Nachdem es installiert ist, wird es automatisch gestartet, wie Sie mit

sudo systemctl status fail2ban

Das Programm fail2ban-server, das in fail2ban enthalten ist, überwacht die Logdateien und gibt Ban- und Unban-Befehle aus. Standardmäßig würde es die IP-Adresse eines Clients für 10 Minuten sperren, wenn der Client die Authentifizierung 5 Mal nicht bestanden hat. Das Verbot wird durch Hinzufügen von iptables-Firewall-Regeln erreicht. Sie können die iptables-Regeln überprüfen, indem Sie den folgenden Befehl ausführen.

sudo iptables -L

Um fail2ban für den Postifx SMTP AUTH Angriff zu aktivieren, fügen Sie die folgenden Zeilen in die /etc/fail2ban/jail.local Datei ein. Wenn die Datei nicht existiert, dann erstellen Sie diese Datei.

[postfix-flood-attack]
aktiviert = true
bantime = 10m
filter = postfix-flut-angriff
action = iptables-multiport[name=postfix, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve", protocol=tcp]
logpath = /var/log/mail.log

Sie können die Bantime auf etwas wie 30m oder 12h ändern, um den bösen Akteur für längere Zeit zu sperren. Wenn Sie Ihre eigene IP-Adresse auf die Whitelist setzen möchten, fügen Sie die folgende Zeile ein, um fail2ban anzuweisen, Ihre IP-Adresse zu ignorieren. Ersetzen Sie 12.34.56.78 durch Ihre eigene IP-Adresse. Mehrere IP-Adressen werden durch Leerzeichen getrennt.

ignoreip = 127.0.0.1/8 ::1 12.34.56.78

Standardmäßig ist eine maximale Anzahl von Fehlversuchen von 5 erlaubt. Nach 5 Fehlversuchen wird der Client gesperrt. Um eine benutzerdefinierte Anzahl von Fehlversuchen anzugeben, fügen Sie die folgende Zeile hinzu. Ändern Sie die Zahl nach Ihren Wünschen.

maxretry = 4

Speichern und schließen Sie die Datei. Erstellen Sie dann die Datei mit den Filterregeln.

sudo nano /etc/fail2ban/filter.d/postfix-flood-attack.conf

In dieser Datei legen wir fest, dass die IP-Adresse gesperrt werden soll, wenn die "lost connection after AUTH from" gefunden wird.

[Definition]
failregex = lost connection after AUTH from (.*)\[<HOST>\]
ignoreregex =

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

sudo systemctl restart fail2ban

In der fail2ban-Protokolldatei (/var/log/fail2ban.log) finde ich die folgende Meldung, die besagt, dass die IP-Adresse 114.223.221.55 gesperrt wurde, weil die Authentifizierung 5 Mal fehlgeschlagen ist.

2018-12-14 09:52:15,598 fail2ban.filter [21897]: INFO [postfix-flood-attack] 114.223.211.55 gefunden - 2018-12-14 09:52:15
2018-12-14 09:52:16,485 fail2ban.filter [21897]: INFO [postfix-flood-attack] Gefunden 114.223.211.55 - 2018-12-14 09:52:16
2018-12-14 09:52:20,864 fail2ban.filter [21897]: INFO [postfix-flood-attack] Gefunden 114.223.211.55 - 2018-12-14 09:52:20
2018-12-14 09:52:21,601 fail2ban.filter [21897]: INFO [postfix-flood-attack] Gefunden 114.223.211.55 - 2018-12-14 09:52:21
2018-12-14 09:52:22,102 fail2ban.filter [21897]: INFO [postfix-flood-attack] Gefunden 114.223.211.55 - 2018-12-14 09:52:22
2018-12-14 09:52:22,544 fail2ban.actions [21897]: NOTICE [postfix-flood-attack] Ban 114.223.211.55

Ich kann auch meine iptables überprüfen.

sudo iptables -L

Ausgabe:

Kette f2b-postfix (1 Referenzen)
Ziel prot opt Quelle Ziel
REJECT all -- 195.140.231.114.broad.nt.js.dynamic.163data.com.cn überall reject-with icmp-port-unreachable
RETURN all -- irgendwo irgendwo

Dies zeigt an, dass fail2ban eine iptables-Regel eingerichtet hat, die Verbindungen von 195.140.231.114.broad.nt.js.dynamic.163data.com.cn ablehnt, was ein vom Spammer verwendeter Hostname ist.

Wenn Sie eine IP-Adresse manuell blockieren möchten, führen Sie den folgenden Befehl aus. Ersetzen Sie 12.34.56.78 durch die IP-Adresse, die Sie blockieren möchten.

sudo iptables -I INPUT -s 12.34.56.78 -j DROP

Wenn Sie UFW (iptables-Frontend) verwenden, dann führen Sie aus

sudo ufw insert 1 deny from 12.34.56.78 to any

Wiederholungsabsender stoppen

Wie man Wiederholungsabsender stoppt, die den Postfix-Check nicht bestanden haben

Einige Spammer verwenden automatisierte Tools, um Spam zu versenden. Sie ignorieren die Ablehnungsmeldung von Postfix und verschicken weiter Spam. Manchmal kann ich zum Beispiel die folgende Meldung im Postfix-Zusammenfassungsbericht sehen.

504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<123123@linuxbabe.com> to=<martinlujan997@gmail.com> proto=ESMTP helo= (total: 1)
1 185.191.228.36
504 5.5.2 : Helo-Befehl abgelehnt: benötigt vollqualifizierten Hostnamen; from=<123456@linuxbabe.com> to=<martinlujan997@gmail.com> proto=ESMTP helo= (total: 1)
1 185.191.228.36
504 5.5.2 : Helo-Befehl abgelehnt: benötigt vollqualifizierten Hostnamen; from=<3vrgfqblaepzfoieznbfntmrpqyix@linuxbabe.com> to=<martinlujan997@gmail.com> proto=ESMTP helo= (total: 1)
1 185.191.228.36
504 5.5.2 : Helo-Befehl abgelehnt: benötigt vollqualifizierten Hostnamen; from=<6khdgqr6j@linuxbabe.com> to=<martinlujan997@gmail.com> proto=ESMTP helo= (total: 1)
1 185.191.228.36
504 5.5.2 : Helo-Befehl abgelehnt: benötigt vollqualifizierten Hostnamen; from=<a1b2c3d4@linuxbabe.com> to=<martinlujan997@gmail.com> proto=ESMTP helo= (total: 1)
1 185.191.228.36
504 5.5.2 : Helo-Befehl abgelehnt: benötigt vollqualifizierten Hostnamen; from=<abuse@linuxbabe.com> to=<martinlujan997@gmail.com> proto=ESMTP helo= (insgesamt: 1)

Dieser Spammer sendet weiter Spam und ignoriert die Postfix-Reject-Meldung: Helo-Befehl abgelehnt: benötigt vollqualifizierten Hostnamen. Um dieses Verhalten zu unterbinden, können wir auch Fail2ban verwenden, indem wir die folgenden Zeilen in die /etc/fail2ban/jail.local Datei einfügen.

[postfix]
enabled = true
maxretry = 3
bantime = 1h
filter = postfix
logpath = /var/log/mail.log

Das [postfix]-Gefängnis verwendet den eingebauten Filter, der mit Fail2ban geliefert wird (/etc/fail2ban/filter.d/postfix.conf). Speichern und schließen Sie die Datei. Starten Sie anschließend Fail2ban neu.

sudo systemctl restart fail2ban

Jetzt muss der Spammer 1 Stunde warten, bevor er wieder auf Ihren Mailserver eindrischt.

DNS-Suchvorgänge beschleunigen

Lokalen DNS-Resolver laufen lassen, um DNS-Suchvorgänge zu beschleunigen

Wie Sie sehen können, muss Postfix DNS-Einträge nachschlagen, um jeden SMTP-Dialog zu analysieren. Um die DNS-Suche zu beschleunigen, können Sie einen lokalen DNS-Resolver ausführen, indem Sie die folgenden Anleitungen befolgen.

  • Eigenen BIND-DNS-Resolver unter Debian ausführen

Und die meisten DNS-Blacklists haben ein Abfragelimit. Der Betrieb eines eigenen lokalen DNS-Resolvers zum Zwischenspeichern von DNS-Einträgen kann Ihnen helfen, unter dem Abfragelimit zu bleiben.

  1. https://www.linuxbabe.com/mail-server/block-email-spam-postfix