Postfix/Spam
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
- Ihre IP-Adressen haben keine PTR-Einträge.
- Der Spammer gibt keinen gültigen Hostnamen in der HELO/EHLO-Klausel an.
- Sie fälschen die MAIL FROM-Adresse.
- 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.
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.
Fehlerbehebung
- 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.