受信 Postfix メールサーバの配信成功と失敗を計算する

受信 Postfix メールサーバの配信成功と失敗を計算する

メール サーバーが処理して正常に配信されるメールの量と、誤って設定されたメール サーバーやスパムなどから送信されたメールとしてその場で破棄されるメールの量の大まかな割合を計算しようとしています。

まず、/var/log/ ディレクトリで次の 2 つのコマンドを実行しました (maillog 内のエントリと、ローテーションされた古い maillog をキャッチするため)。

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

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

しかし、これらのエントリは重複している可能性があると考えました (特に NOQUEUE)。そこで、矛盾がどの程度あるかを確認するために、わずかに変更した次のコマンドを実行しました。

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

メールログ エントリを見ると、配信試行に対して複数の NOQUEUE エントリが取得されています。ただし、これは送信メール サーバーが複数の配信を試行することがあるためだと思います。例:

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]

質問が2つあります。

  1. 単に の grep で重複エントリを検出することについて心配する必要がありますかNOQUEUE: reject: RCPT?
  2. これらのログ エントリをフィルター処理して正しい数値を算出する際に考慮すべき、より良い方法はありますか?
  3. 成功した配信ごとに一意の行を判別するにはどうすればよいですか。 と の違いを見るgrep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -lと、grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l違いがあることがわかります。

答え1

  1. これらは別々の配達試行であると思われるため、そのようにカウントする必要があります。

  2. この種の問題は既に解決されているはずだと仮定して、munin postfix_mailstatsスクリプトでどのように行われているかを確認しました。これは Perl スクリプトなので、正規表現は Perl と互換性があります。

成功した配達は次のとおりです:

/ to=.*, status=sent /

これらは拒否されます:

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

正規表現のキャプチャされた部分 (括弧内) は、メッセージがどのように拒否されたかを示す拒否コードです。

  1. delivered to maildirはローカル配送、 は250 .* from MTAリモート配送です。つまり、2 つの異なる配送タイプです。そのため、それぞれ異なる数をカウントしても不思議ではありません。

関連情報