Berechnen Sie, ob die Zustellung beim empfangenden Postfix-Mailserver erfolgreich oder fehlgeschlagen ist.

Berechnen Sie, ob die Zustellung beim empfangenden Postfix-Mailserver erfolgreich oder fehlgeschlagen ist.

Ich versuche, einen ungefähren Prozentsatz davon zu berechnen, wie viele E-Mails mein Mailserver für eine erfolgreiche Zustellung verarbeitet, im Vergleich dazu, wie viele E-Mails sofort gelöscht werden, weil sie von falsch konfigurierten Mailservern stammen, Spam usw. sind …

Ich habe zunächst die folgenden beiden Befehle im Verzeichnis /var/log/ ausgeführt (um Einträge im Maillog sowie ältere, herausrotierte Maillogs abzufangen):

grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l
7814

grep "NOQUEUE: reject: RCPT" * | wc -l
13338

Aber dann dachte ich, dass diese Einträge möglicherweise Duplikate enthalten (insbesondere die NOQUEUEs). Also habe ich den folgenden leicht modifizierten Befehl ausgeführt, um zu sehen, wie groß die Diskrepanz sein könnte.

grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l
8839

Wenn ich mir meine Maillog-Einträge anschaue, bekomme ich mehrere NOQUEUE-Einträge für Zustellversuche. Aber ich denke, das liegt daran, dass die sendenden Mailserver manchmal mehrere Zustellversuche unternehmen. Beispiel:

Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 450 4.7.1 Client host rejected: cannot find your reverse hostname, [112.198.103.178]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 454 4.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<112.198.103.178>
Aug 10 10:48:24 mail postfix/smtpd[7159]: disconnect from unknown[112.198.103.178]

Ich habe also zwei Fragen:

  1. Muss ich mir Sorgen machen, dass ich mit einem Grep von nur doppelte Einträge erwische NOQUEUE: reject: RCPT?
  2. Gibt es eine bessere Methode, die ich beim Filtern dieser Protokolleinträge und Ermitteln der richtigen Zahlen in Betracht ziehen sollte?
  3. grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -lWie kann ich für jede erfolgreiche Zustellung eine eindeutige Zeile festlegen? Wenn wir uns den Unterschied ansehen, grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -lkönnen wir erkennen, dass es einen Unterschied gibt.

Antwort1

  1. Dabei scheint es sich um separate Zustellversuche zu handeln und sie sollten daher auch als solche gezählt werden.

  2. Da ich davon ausging, dass so etwas schon einmal behandelt wurde, habe ich mir das munin postfix_mailstatsSkript angesehen, wie es dort gemacht wird. Es handelt sich um ein Perl-Skript, daher sind die regulären Ausdrücke Perl-kompatibel:

Dies sind erfolgreiche Lieferungen:

/ to=.*, status=sent /

Dies sind Ausschussware:

/postfix\/smtpd.*proxy-reject: \S+ (\S+)/
/postfix\/smtpd.*reject: \S+ \S+ \S+ (\S+)/
/postfix\/cleanup.* reject: (\S+)/

Der erfasste Teil des regulären Ausdrucks (in Klammern) ist der Ablehnungscode, der angibt, wie die Nachricht abgelehnt wurde.

  1. delivered to maildirist eine lokale Zustellung, das andere 250 .* from MTAeine Fernzustellung, also zwei unterschiedliche Zustellungsarten. Es ist also nicht verwunderlich, dass Sie für jede unterschiedliche Zahlen zählen.

verwandte Informationen