メインコンテンツへスキップ
  1. ブログ/

postfixのメールログを調査する方法

·
Linux メール Postfix
目次

初めに
#

メールの送受信において、「メールが届かない」「遅れて届く」といったトラブルはよくある問題です。

その原因を突き止めるためには、メールサーバーのログを確認する必要があります。

本記事では、Linux環境でMATとして採用される事の多いPostfixのメールログを調査する方法について解説します。

Postfixとは
#

Postfix(ポストフィックス)は、Linuxサーバーで広く使われているメール転送エージェント(MTA)となります。

外部とのメールの送受信を担当し、メール配送処理を行います。

セキュリティやパフォーマンスに優れ、設定も比較的シンプルなため、多くのサーバー環境で採用されています。

ログファイルの確認
#

Postfixが処理するメールの情報は、通常/var/log/maillogに出力されます。

ログファイルを確認することで、メールの受信・送信処理の流れを追うことが可能です。

以下は「cat」コマンドを利用した基本的な確認方法となります。

cat /var/log/maillog

※ログローテーション等を行っている場合は調査対象日のログをご確認ください。

メールキューID
#

ログを分析するうえで重要なのが、「キューID」です。

これはメールごとに割り振られる一意のIDで、ログ全体の流れをひとまとめにして追うことができます。

下記は同一キューの基本的なメールログ形式となります。

May 13 10:00:12 servername postfix/smtpd[12345]: BCDEFGHIJKL: client=example.net[198.51.100.2]
May 13 10:00:12 servername postfix/cleanup[54321]: BCDEFGHIJKL: message-id=<987654321.123456789@example.net>
May 13 10:00:13 servername postfix/qmgr[98765]: BCDEFGHIJKL: from=<sender2@example.net>, size=2000, nrcpt=1 (queue active)
May 13 10:00:14 servername postfix/pipe[13579]: BCDEFGHIJKL: to=<recipient2@example.org>, relay=virtual, delay=1.5, delays=0.7/0/0/0.8, dsn=2.0.0, status=sent (delivered via virtual service)
May 13 10:00:14 servername postfix/qmgr[98765]: BCDEFGHIJKL: removed

この一連の情報には差出や宛先などのアドレス情報や、配送時間、配送状態などがふくまれています。

以下はログに含まれる主な情報は以下となります。

要素 解説
client メールを送信している接続元の情報
from=<> 差出アドレス(Return-Path)
to=<> 宛先アドレス
status メールの配信状態
relay リレー情報
delay= 配送時間

メールが正常に送信/受信されたかどうかは「status」ステータスを確認する事で判断可能となります。

正常配信
#

正常にメールが配信されている場合は以下のようにsentが記述されます。

status=sent

配信失敗
#

配信に失敗している場合は以下のようにbouncedが記述されます。

またbouncedの後方に具体的な理由などが記述される場合もあります。

これらのエラー内容は利用しているpostfixのバージョンや宛先となるサーバーにより異なります。

status=bounced

一時的に失敗
#

配信が一時的に失敗、遅延している場合は以下のようにdeferredが記述されます。

postfixではdeferredの場合、設定値で指定された回数の特定の間隔で再送処理が行われます。

status=deferred

FROM/TOからの絞り込み
#

対象のFROM/TOアドレスが分かる場合は以下のようにgrepコマンドで絞り込み特定する事が可能です。

cat /var/log/maillog |grep "対象メールアドレス"

今回は例としてFROMが「sender2@example.net」と仮定し絞り込みを行います。

TOで絞る場合についても同様の手順で対応可能となります。

FROMアドレスにて絞り込んだ場合、下記のように表示されます。

$ cat /var/log/maillog |grep "sender2@example.net"
May 13 10:00:13 servername postfix/qmgr[98765]: BCDEFGHIJKL: from=<sender2@example.net>, size=2000, nrcpt=1 (queue active)

次に上記情報を元にキューIDで絞り込みを行い全体の流れを表示します。

cat /var/log/maillog |grep "BCDEFGHIJKL”

キューIDを元に検索した全体の流れは以下となります。

May 13 10:00:12 servername postfix/smtpd[12345]: BCDEFGHIJKL: client=example.net[198.51.100.2]
May 13 10:00:12 servername postfix/cleanup[54321]: BCDEFGHIJKL: message-id=<987654321.123456789@example.net>
May 13 10:00:13 servername postfix/qmgr[98765]: BCDEFGHIJKL: from=<sender2@example.net>, size=2000, nrcpt=1 (queue active)
May 13 10:00:14 servername postfix/pipe[13579]: BCDEFGHIJKL: to=<recipient2@example.org>, relay=virtual, delay=1.5, delays=0.7/0/0/0.8, dsn=2.0.0, status=sent (delivered via virtual service)
May 13 10:00:14 servername postfix/qmgr[98765]: BCDEFGHIJKL: removed

※複数のログが出力される場合は対象の時間に該当するログを確認してください。

日時/時間からの絞り込み
#

FROMやTOなどのアドレス情報が不明の場合は日時や時間での絞り込みが有効です。

下記のように指定する事で日時や時間をベースにした絞り込みを行う事が可能です。

cat /var/log/maillog |grep "日付” |grep "10:00"

ログが無い場合
#

FROMやTO、日時や時間にて検索した際に情報が存在しない場合は以下に該当している可能性があります。

  • サーバーまでメールが到達していない
  • 絞り込み条件が間違っている

関連記事

LinuxでIPアドレスを確認する方法
Linux コマンド
【初心者向け解説】AlmaLinuxでOSバージョンを確認する方法
Linux コマンド
Linuxの権限(パーミッション)を数字で表示する方法
Linux Bash
Linuxで指定した日から何日経過したか計算する方法
Linux コマンド
【初心者向け解説】SELinuxの状態を確認する方法
Linux SELinux セキュリティ
【初心者向け解説】grepコマンドでAND・OR検索を行う方法
Linux コマンド