Postfix/Warteschlangen
Postfix: Mailwarteschlange ansehen, flushen und leeren
Alle ausgehenden eMails werden normalerweise in gewisse “Mailqueues” abgelegt und dort versendet.
- Konnte eine eMail nicht erfolgreich versendet werden, bleibt diese eMail weiterhin in der Warteschlange.
- Nach einer gewissen Zeit wird erneut versucht, diese eMail zu versenden.
- Es kommt häufig vor, dass Benutzer in einen Forum einfach falsche (nicht existierende) eMail Adressen eingeben und der Mailserver versucht, die eMail dennoch abzusenden.
- Dadurch wächst die Mailwarteschlange stetig an.
Dafür gibt es drei wichtige Befehle, die man kennen sollte:
Mailwarteschlange ansehen
mailq
Mailwarteschlange flushen (Mails erneut versuchen zu versenden)
postfix flush
Mailwarteschlange leeren
postsuper -d ALL
Postfix Befehle
Installierte Version anzeigen
# postconf mail_version
Eigene Konfiguration anzeigen
# postconf -n
Standard Konfiguration anzeigen
# postconf -d
Mailwarteschlage anzeigen
# mailq
Anzahl der Mails in der Warteschlange anzeigen
# mailq | tail -1
Mailqueue abarbeiten
# postqueue -f
Einzelne Mails löschen
# postsuper -d QueueID
Alle Mails aus der Queue löschen (Vorsicht walten lassen)
# postsuper -d ALL
Mails in tabellenform anzeigen
# qshape
Einzelne Mail ansehen
# postcat -q QueueID
Bestimmte Mails einer Adresse löschen
$ postqueue -p|grep 'email@beispiel.de'|awk {'print $1'} | grep -v "(host"|tr -d '*!'|postsuper -d -
Postfix Logs ansehen (Ubuntu)
# tailf /var/log/mail.log
Mail Queue in Textdatei umleiten
# mailq > /tmp/mailtext.txt
Postfix Konfiguration neu laden
# systemctl reload postfix
Mails auswerten und Statistiken erstellen
Hier Verweise ich auf den Pflogsumm Artikel, welcher immer noch Gültigkeit hat.
# apt install pflogsumm
Postfix Mail-Queue aufräumen
Die Mail-Queue ist voll von Spam E-Mails, mit diesem Beitrag gehen wir dagegen vor und räumen auf. Postfix liefert eigene Mittel um die Warteschlange zu säubern.
E-Mails auflisten
Mit dem Befehl listen wir die Mail-Queue auf
mailq
oder
postqueue -p
Inhalt einer E-Mail anzeigen
53FB7BF0650 ist die Mail ID
postcat -q 53FB7BF0650
E-Mails ausliefern
- Alle E-Mails ausliefern
postqueue -f
- Einzelne E-Mail ausliefern
postqueue -i 53FB7BF0650
E-Mails löschen
Einzelne E-Mails löschen
53FB7BF0650 ist die Mail ID
postsuper -d 53FB7BF0650
Alle E-Mails löschen
postsuper -d ALL
MAILER-DAEMON löschen
Das sind meistens E-Mails ohne gültigen Empfangsserver.
postqueue -p | grep MAILER-DAEMON | awk '{print $1}' | tr -d '*' | postsuper -d -
Dr.
- Web Status Meldungen löschen
Die Status Meldungen von [https://adminforge.de/antivir/dr-web/dr-web-antivirus-update-e-mail-abschalten/ Dr.
- Web wurden deaktiviert], nun folgt das Säubern der Mail-Queue.
postqueue -p | grep DrWEB | awk {'print $1'} | sed s/*//g | postsuper -d -
Connection refused löschen
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /Connection refused/ { print $1 } \' | tr -d '*!' | postsuper -d -
Empfänger löschen
Ihr könnt @yahoo.com durch jeden beliebigen Wert ersetzen.
postqueue -p | tail -n +2 | awk 'BEGIN { RS = "" } /@yahoo.com/ { print $1 } \' | tr -d '*!' | postsuper -d -
Spammer aus Postfix Warteschlange entfernen
Situation
- Spammer versendet SPAMs über unseren Mail-Server.
- Wahrscheinlich hat ein User ein schwaches Kennwort verwendet, welches vielleicht auch noch bei mehreren Diensten benutzt wurde.
Natürlich bleibt das Verhalten nicht lange unbemerkt.
- Und es werden alle relevanten Maßnahmen ergriffen.
- Kennwort des betroffenen Account ändern
- Warteschlange von den SPAM Mails und den Mail Delivery Meldungen befreien
- Server aus den Blacklisten befreien
Das Kennwort ist schnell geändert.
- Dabei sollte das neue Kennwort eine gewisse Komplexität haben.
Doch wie befreit man die Mail- Queue eines Postfix Server?
Die komplette Warteschlange zu löschen, ist keine Option, also muss eine andere Lösung her:
mailq | grep ABC@SPAMMER.de | cut -d" " -f1 | tr -d '*!' | postsuper -d -
Nachdem die Queue wieder sauber ist, können wir schauen, auf welchen Blacklisten unserer Server gelandet ist
- z.B. über https://mxtoolbox.com/blacklists.aspx
Postfix Mailqueue
Normalerweise muss man an der Mailqueue nichts machen, aber es kann vorkommen, dass man Einfluss nehmen muss.
- Ein Anstoßen einer Email in der Queue oder eine Mail aus der Queue löschen oder möglicherweise sogar die Mailqueue anhalten.
- Das funktioniert mit folgenden Befehlen:
Befehl | Beschreibung |
mailq | Anzeigen der Mailqueue |
postsuper -d ALL | Alle Emails aus der Mailqueue löschen |
postsuper -d [ID] | Eine einzelne Email löschen |
postsuper -h ALL | Die Mailqueue anhalten (keine Auslieferung mehr. |
postsuper -H ALL | Die Mailqueue weiterlaufen lassen |
postsuper -h [ID] | Eine einzelne Mail aus der Queue anhalten |
postsuper -H [ID] | Eine einzelne Mail aus der Queue weiterlaufen lassen |
postqueue -f | Postfix anweisen alle Mails aus der Queue sofort auszuliefern |
Nun kann es sein, dass man alle Mails, die von oder an eine Adresse kommen/gehen gelöscht werden.
- Dazu muss man auf die RegExp zurückgreifen.
mailq | tail +2 | awk 'BEGIN { RS = "" } / user@huschi\.net$/ { print $1 } ' \ | tr -d '*!' | postsuper -d -
oder
for i in `mailq | egrep "^[0-9A-F]" | grep 'MAILER-DAEMON' | cut -c1-12 | sed s/\*//g` ; \ do echo "delete msg: $i" ; postsuper -d $i ; done
Ansonsten ist das Tool "pfqueue" noch interessant.
Mail-Queue bearbeiten
- Problem
Manchmal will man etwas Einfluss auf die Mail-Queue haben
- Das Webmin-Postfix Modul ist standardmäßig installiert und bietet eine gute Oberfläche zum Verwalten der Mail-Queue
- Mail-Queue ansehen
sicherheitshalber mit less
mailq | less
- Anzahl der Mails in der Queue
mailq | egrep '^--'
- gesamte Mail-Queue löschen
postsuper -d ALL
- einzelne Mails aus der Queue löschen
mailq | less
- die entsprechende queue_id merken/kopieren
postsuper -d ID
- Trickreicher wird es wenn man alle Emails von oder zu einer Adresse löschen möchte
mailq | tail +2 | awk 'BEGIN { RS = "" } / user@huschi\.net$/ { print $1 } ' \ | tr -d '*!' | postsuper -d -
- oder auch so:
for i in `mailq | egrep "^[0-9A-F]" | grep 'MAILER-DAEMON' | cut -c1-12 | sed s/\*//g` ; \ do echo "delete msg: $i" ; postsuper -d $i ; done
Emails auf "hold" legen
Damit verbleiben die Emails in der Queue und werden nicht automatisch weiter verarbeitet:
- Alle Mails auf "hold"
postsuper -h ALL
- Einzelne Mails auf "hold"
postsuper -h ID
- Alle Mails von "hold" wieder releasen
postsuper -H ALL
- Einzelne Mails releasen
postsuper -H ID
Wenn man mal zu viele E-Mails auf der Halde liegen hat, möchte man eventuell, dass Postfix nun mal anfängt auszuliefern:
postqueue -f
Nachrichten aus der Postfix Warteschlange (mailq) löschen
Bevor Postfix die Nachrichten verschickt, werden diese in der Queue (Warteschlange) abgelegt.
- Wenn Nachrichten nicht sofort zugestellt werden können, verweilen sie in der Queue.
- Mit dem Postfix Kommando postsuper löscht man Nachrichten aus der Warteschlange.
- Bevor wir eine Nachricht löschen, sollten wir alle E-Mails der Warteschlange auflisten:
mailq
Jetzt erhältst Du alle Mails die in der Warteschlange sind.
- In der ersten Spalte der Auflistung befindet sich die Queue ID.
- Mit der Queue ID kannst Du einzelne Nachrichten aus der Warteschlange entfernen:
postsuper -d <Queue ID>
Um alle Nachrichten zu löschen:
postsuper -d ALL
Mail in Postfix Queue zu Empfänger umleiten
Postfix E-Mail bleibt in der Warteschlange hängen, die E-Mail soll nun an einen anderen Empfänger umgeleitet werden!
- Dieses Szenario kann in Erscheinung treten, wenn zum ursprünglichen Empfänger keine E-Mails zugestellt werden können, zum Beispiel mit Erreichen der Mailbox Speicher Limite, oder der Server mit Fehler antwortet.
Hier kann es hilfreich sein, die E-Mail vorübergehend an einen anderen Empfänger zu senden.
- Der Beitrag zeigt die Schritte, um eine in der Postfix Queue verbleibende E-Mail an einen alternativen Empfänger zu senden.
Mail aus Postfix Queue senden
Zuerst sucht man in der Postfix Queue die Queue-ID der betreffenden E-Mail, diese man an eine andere Empfänger Adresse senden möchte.
$ postqueue -p | grep 'john@example.org' -B 2
- Der Parameter -B 2 gibt zusätzlich zwei Zeilen vor gesuchter Parse aus.
Die Ausgabe kann in etwa wie die folgende aussehen.
BCD2C3035D31! 37023 Thu Feb 17 08:59:55 suite102@mailings.daydeal.net (connect to 12.34.56.78[12.34.56.78]:25: Connection timed out) john@example.org
Hier wurde eine E-Mail an john@example.org gesendet, die ich nun an eine andere Adresse zustellen möchte.
- Die Queue-ID ist BCD2C3035D31 die wir im weiteren Verlauf benötigen.
Alternativ lassen sich auch alle E-Mails jeder Postfix Queue auflisten.
$ mailq
Um zu verhindern, dass Postfix versucht die E-Mail in der Zwischenzeit auszuliefern, setzen wir diese in Wartestellung mit -h auf on hold.
$ postsuper -h BCD2C3035D31 postsuper: BCD2C3035D31: placed on hold postsuper: Placed on hold: 1 message
- Die E-Mails werden mit on hold nicht gelöscht.
- Das Ausrufezeichen (!) gibt an, das die Nachricht in Wartestellung ist.
Nun extrahiert man die E-Mail und speichert sie in eine temporäre Datei.
$ postcat -qbh BCD2C3035D31 > /tmp/email.eml
Nachdem die E-Mail extrahiert ist, kann man diese an einen anderen Empfänger als das Original senden.
$ sendmail -f john@example.org mike@domain.org < /tmp/email.eml
Die E-Mail wird von john@example.org an mike@domain.org gesendet.
Die Postfix Deffered Queue nach aufgeschobenen E-Mails durchsuchen.
$ postqueue -vp
Nachdem die Zustellung an die neue E-Mail-Adresse bestätigt wurde, kann die E-Mail aus der Postfix Warteschlange gelöscht werden.
$ postsuper -d BCD2C3035D31 postsuper: BCD2C3035D31: removed postsuper: Deleted: 1 message
Die temporäre Datei /tmp/email.eml löschen.
$ rm -f /tmp/email.eml
Hilfreiche Postfix Kommandos
In die E-Mail schauen mit postcat.
$ postcat -vq BCD2C3035D31
E-Mails freigeben, die in die Warteschleife gelegt wurden.
$ postsuper -H BCD2C3035D31 postsuper: BCD2C3035D31: released from hold postsuper: Released from hold: 1 message
Warteschlange leeren, es wird versucht, alle in der Warteschlange befindlichen E-Mails zuzustellen.
$ postqueue -f
Alle E-Mails in der Postfix deffered queue löschen.
$ postsuper -d ALL deferred