15.ログを採ってみよう

メールの送受信ができるようになり、いよいよメールサーバーをネットに接続できるようになった。
しかし、送れるはずのメールが相手に届かなかったり、相手が送ったメールが届いていなかったり、ネットワーク上のトラブルなのか、何が問題なのかなど、原因を探らないといけないことがある。
そういった時に役に立つのが、各種のログの採取だ。
不正なアクセスや、送れないメール、誤ったログイン情報、実際の送受信動作などを検証することができるのである。

メールクライアントから配送要求のためメールを受領したり
外部のSMTPからメールが受信される(届く)状況を検証するログ

SMTP受信ログ(inlog)

メールクライアントから配送要求のためメールを受領したり、外部のSMTPからメールが受信されたメールの基本ログ記録である。
外部のSMTPからの受信については、すぐに想像がつくが、内部ドメインからの内・外部への送信についても、いったん受領されるので、記録されることを知っておきたい。重要なログである。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [SMTP受信ログ]チェックボックスをオン
[適用]ボタンクリック後、EPSTRSを再起動

ログ記録は、[メール作業フォルダ]下の[inlog\<コンピュータ名>]フォルダに作成される。
-----------------------------------------------------------------------------------------------------------------
  メッセージID,        記録日時,       送信元 IP,   送信元アドレス,送信先アドレス
-----------------------------------------------------------------------------------------------------------------
<B0000097403@xxxxx.xxx.xxx> [11/Nov/2008:17:58:25] 192.168.XXX.XXX XXXX@XXXX.jp XXXX@XXXX.jp
-----------------------------------------------------------------------------------------------------------------

接続マシンログ(acceptlog)

SMTPに接続し、"MAIL FROM:"コマンドの実行を試みたサーバー及びクライアントのすべてのIPアドレスの記録。接続マシンログ(acceptlog)は、SMTP受信ログ(inlog)の前段階の処理についての記録になる。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [接続マシンログ]チェックボックスをオン
[適用]ボタンクリック後、EPSTRSを再起動

ログ記録は、[メール作業フォルダ]下の[acceptlog\<コンピュータ名>]フォルダに作成される。
SOCKETの接続があった時点で、"Client accept now."の行が記録され、引き続き、送信手順を行った結果、受領したメールは"ok"、ここで拒絶されたメールが"abort"と記録される。
受信されたメールは、SMTP受信ログ(inlog)に記録されるが、拒絶されたメールは、SMTP受信ログ(inlog)には記録されず、この接続マシンログ(acceptlog)とSMTP受信詳細ログ(receivelog)にその記録が残る。
また、プロトコルコマンドのやり取りの中で具体的に示すと、telnetでSMTPへ接続した段階でログには"Client accept now."の記録が残る。

接続マシンログ(acceptlog)の記録タイミング

Telnet <smtp server> smtp<CR>
220 xxxx SPA-PRO ESMTP Receiver (x.xx)....
Helo <domain><CR>
250 <xxxxx.xxx.jp> Hello .....
MAIL FROM: <xxxx@xxxx.xxxx><CR>
250 <xxxx@xxxx.xxxx>... Sender ok.
RCPT TO: <xxxx@xxxx.xxxx><CR>
250 <xxxx@xxxx.xxxx>... Recipient ok.
DATA
354 Start mail input;id <Bxxxx> end with <CRLF>.<CRLF>
  :
  :
  :
.<CR>
250 Message received ok.

←接続が発生した時"Client accept now."を記録



←@

←A




←メッセージ送出中


←B
@〜Bのいずれかの応答でメールの受信処理が中止された(拒絶された)とき abortを記録、一方Bまで進み、その後配送キューであるincomingフォルダに保管されたとき okを記録する

SMTP受信詳細ログ(receivelog)

SMTP受信詳細ログ(receivelog)は、EPSTRS(SMTP Reciver)の動作の詳細な記録。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [接続マシンログ]チェックボックスがオンの状態

接続マシンログ(acceptlog)を取得する設定であれば、そのままの状態で、さらにメール作業フォルダ下に "receivelog"という名前のフォルダを手動で作成する。
接続マシンログ(acceptlog)を取得していない状態のときは、いったん取得する設定に変更し、その後上記の名前のフォルダを作成、EPSTRSを再起動する。
ログ記録は、[メール作業フォルダ]下の[receivelog\<コンピュータ名>]フォルダに作成される。
SMTP受信詳細ログ(receivelog)は、記録内容が膨大になりやすいので、ログを採るときは注意が必要。
なお、ログが不要な場合は、フォルダ名の"receivelog"をリネームするだけで、記録されなくなる。
----------------------------------------------------------------------------------------------------------
    記録日時   ,スレッド・メモリ, 送受信内容・内部処理ステータス
----------------------------------------------------------------------------------------------------------
[30/Nov/2008:08:20:44], 00145008, 220 xxxx.xxx.jp 220 E-POST ESMTP Receiver .....
[30/Nov/2008:08:20:46], 00145008, helo
[30/Nov/2008:08:20:46], 00145008, 250 xxxx.xxx.jp Hello [xxx.xxx.xxx.xxx], pleased to meet you
[30/Nov/2008:08:20:49], 00145008, mail from: ????????
[30/Nov/2008:08:20:49], 00000000, Check MAIL FROM address = ????????
[30/Nov/2008:08:20:49], 00000000, user check status(1) = found local group (0)
[30/Nov/2008:08:20:49], 00000000, match!!
[30/Nov/2008:08:20:49], 00000000, user check status(2) = found Aliases
[30/Nov/2008:08:20:49], 00145008, 250 <????????>... Sender ok.
[30/Nov/2008:08:20:51], 00145008, rcpt to: ????????
[30/Nov/2008:08:20:51], 00000000, Check RCPT TO address = ????????
[30/Nov/2008:08:20:51], 00000000, user check status(1) = found local group (0)
[30/Nov/2008:08:20:51], 00000000, match!!
[30/Nov/2008:08:20:51], 00000000, user check status(2) = found Lists
[30/Nov/2008:08:20:51], 00145008, 250 <????????>... Recipient ok.
                 :
                 :
----------------------------------------------------------------------------------------------------------

メールフィルタ対象メールの保管

これは、厳密には記録ログというより、メールフィルタの対象となったメール自身を保管(隔離)する機能だ。メールフィルタ(mail.dat)にフィルタパターンが設定されていて、受領拒否されたメールメッセージと送受信エンベロープの各ファイルについて保管指定がされている場合のみ、フィルタの"Warning:"記述が付加された状態で、フォルダ内に丸ごと保管される。
記録を採るには
[E-Post Mail Control]
 → [メールフィルタ]
  → [メールフィルタ機能を使用する]チェックボックスをオン
その後、EPSTRSを再起動する

メールデータは、[メール作業フォルダ]下の[viruslog]フォルダにファイルが丸ごと保管される形で作成される。

メッセージデータ :Bxxxxxxxxx.MSG
送受信エンベロープ:Bxxxxxxxxx.RCP

以上のメールデータが1対の状態で保管される。

メールの配送状況を検証するログ

SMTP送信ログ(outlog)

EPSTDSサービス(SMTP Delivery Agent)による外部ドメイン宛へ送信したメールの基本記録。内部ドメイン宛は対象外なので、内部ドメイン宛の記録を取りたいときは、次のSMTPローカル送信ログを有効にする。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [SMTP送信ログ]チェックボックスをオン
[適用]ボタンクリック後、EPSTDSを再起動

ログ記録は、[メール作業フォルダ]下の[outlog\<コンピュータ名>]フォルダに作成される。
--------------------------------------------------------------------------------------------------------------------
   メッセージID,        記録日時 ,     宛先メールサーバ , 送信元アドレス , 送信先アドレス
--------------------------------------------------------------------------------------------------------------------
B0000055688@xxxxx.xxx.xxx sent on [01/Mar/2008:10:29:51] to xxxx.xxxx.xxx from xxx@xxxx.xxx.jp to xxxx@xxxx.jp
--------------------------------------------------------------------------------------------------------------------

SMTPローカル送信ログ(outlocallog)

EPSTDSサービス(SMTP Delivery Agent)による内部ドメイン宛への配送を行った記録。書式はSMTP送信ログ(outlog)と同一だ。
ログ記録を採るには、以下レジストリのキーを手動で作成し、値を 1 と入力する。[E-Post Mail Control]画面上には設定場所がないので注意。

 HKEY_LOCAL_MACHINE
  SYSTEM
   ->CurrentControlSet
    ->Services
     ->EPSTDS
      ->MailSendLocallogEnabled
       (DWORD) Dafult 0:記録しない,1:記録する

レジストリエディタを閉じた後、EPSTDSを再起動する。

ログ記録は、[メール作業フォルダ]下の[outlocallog\<コンピュータ名>]フォルダに作成される。
--------------------------------------------------------------------------------------------------------------------
   メッセージID,        記録日時 ,     宛先メールサーバ , 送信元アドレス , 送信先アドレス
--------------------------------------------------------------------------------------------------------------------
B0000055688@xxxxx.xxx.xxx sent on [01/Mar/2008:10:29:51] to xxxx.xxxx.xxx from xxx@xxxx.xxx.jp to xxxx@xxxx.jp
--------------------------------------------------------------------------------------------------------------------

配送時の詳細ログ(senderlog)

EPSTDSサービス(SMTP Delivery Agent)の詳細な動作の記録。
配送時の詳細ログ(senderlog)は、主として外部ドメイン宛への配送、一部の内部ドメイン宛への配送動作の詳細記録。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [配送時の詳細ログ] チェックボックスをオン
[適用]ボタンクリック後、EPSTDSを再起動

ログ記録は、[メール作業フォルダ]下の[senderlog\<コンピュータ名>]フォルダに作成される。
配送時の詳細ログ(senderlog)は、記録内容が膨大になりやすいので、ログを採るときは注意が必要。
-----------------------------------------------------------------------------------------------
メッセージID  送受信内容・内部処理ステータス
-----------------------------------------------------------------------------------------------
[B0000097013] [xxx.xxx.jp] GetTryServer:(ltime(12709270733)-otime(12709270733))/240=(0)
[B0000097013] RetryDomain:(ltime(127092707339140000)-nlast(127092707335337904))/Status=1
[B0000097013] SendGlbalMail:domain=xxx@xxx.xxx.jp
[B0000097013] ConnectHost:domain=xxx@xxx.xxx.jp
[B0000097013] getaddrinfo:domain=ns1.xxx.xxx.jp
[B0000097013] ConnectHost: winsock connect success.
[B0000097013] ConnectHost: retrun mscok (170)
[B0000097013] SendMailMess
[B0000097013] SendMailMess:220 xxx.xxx.jp E-POST ESMTP Receiver ......
[B0000097013] SendMailMess:HELO xxx.xxx.jp
[B0000097013] SendMailMess:250 xxx.xxx.jp Hello [xxx.xxx.xxx.xxx], pleased to meet you
[B0000097013] SendMailMess:MAIL From:
[B0000097013] SendMailMess:250 ... Sender ok.
[B0000097013] SendMailMess:RCPT To:
[B0000097013] SendMailMess:250 ... Recipient ok.
[B0000097013] SendMailMess:DATA
[B0000097013] SendMailMess:354 Start mail input;id end with .
[B0000097013] SendData complete.
[B0000097013] SendMailMess:250 Message received ok.
[B0000097013] SendMailMess:QUIT
[B0000097013] SendMailMess:221 xxx.xxx.jp closing connection.
[B0000097013] SendMailMess:return=1
[B0000097013] SendGlbalMail:return code=1
[B0000097013] outlog() thread=1.
             :
             :
-----------------------------------------------------------------------------------------------

配送失敗ログ(faillog)

EPSTDSサービス(SMTP Delivery Agent)が外部ドメイン宛への配送を実行し、何らかの理由で最終的に配送失敗処理されたメールの記録。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [配送失敗ログ] チェックボックスをオン
[適用]ボタンクリック後、EPSTDSを再起動

ログ記録は、[メール作業フォルダ]下の[faillog\<コンピュータ名>]フォルダに作成される。
------------------------------------------------------------------------------------------------------------------
    メッセージID,      記録日時,        送信元アドレス , 送信先アドレス , 理由コード&理由※
------------------------------------------------------------------------------------------------------------------
B0000055688@xxxxx.xxx.xxx sent on [01/Mar/2008:10:29:51] from xxx@xxxx.xxx.jp to xxxx@xxxx.jp [550 User Unknown]
------------------------------------------------------------------------------------------------------------------
※[理由コード&理由] は、相手MTA側の応答による送信拒否コード&メッセージに従って記録される。理由コードは、相手MTA側が発行したもの

ローカルユーザーのメールボックスの接続を検証するログ

POP3ログ(pop3log)

POP3サーバへの接続状況の基本記録。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [POP3ログ] チェックボックスをオン
[適用]ボタンクリック後、EPSTPOP3Sを再起動

ログ記録は、[メール作業フォルダ]下の[pop3log\<コンピュータ名>]フォルダに作成される。
-----------------------------------------------------------------------------------------------------------
 アカウント   接続したIP コマンド 記録日時
-----------------------------------------------------------------------------------------------------------
xxxxx@xxxx.jp from 192.168.0.4 APOP xxxxx@xxxx.jp xxxxxxxxxxxxxxxxxxxxxxxxxxxxx [02/Dec/2008:18:19:14]
xxxxx@xxxx.jp from 192.168.0.4 STAT [02/Dec/2008:18:19:14]
xxxxx@xxxx.jp from 192.168.0.4 UIDL [02/Dec/2008:18:19:14]
xxxxx@xxxx.jp from 192.168.0.4 QUIT [02/Dec/2008:18:19:14]
         :
         :
-----------------------------------------------------------------------------------------------------------

POP3の詳細ログ(receivepop3)

POP3サーバへの接続時の詳細な動作記録。
ログ記録を採るには、以下レジストリキーを手動で作成し、値を 1 と入力する。

 HKEY_LOCAL_MACHINE
  ->SYSTEM
   ->CurrentControlSet
    ->Services
     ->EPSTPOP3S
      ->AcceptlogEnabled
       (DWORD) 0:ログを残さない,1:ログを残す

レジストリエディタを閉じた後、EPSTPOP3Sを再起動する。
さらに、[メール作業フォルダ]下に"receivepop3"というフォルダを手動作成する。

ログ記録は、[メール作業フォルダ]下の[receivepop3\<コンピュータ名>]フォルダに作成される。
-----------------------------------------------------------------------------------------------------------
 記録日時     スレッド・メモリ 送受信内容・内部処理ステータス
-----------------------------------------------------------------------------------------------------------
[09/Dec/2008:11:52:36], 0015cfe0, +OK E-POST POP3 Server.....
[09/Dec/2008:11:52:36], 0015d02c, USER xxxx@xxxx.jp
         :
         :
-----------------------------------------------------------------------------------------------------------

IMAP4ログ(imap4log)

IMAP4サーバへの接続状況の基本記録。
ログ記録を採るには
[E-Post Mail Control]
 → [ログ設定]
  → [IMAP4ログ] チェックボックスをオン
[適用]ボタンクリック後、EPSTIMAP4Sを再起動

ログ記録は、[メール作業フォルダ]下の[imap4log\<コンピュータ名>]フォルダに作成される。
-----------------------------------------------------------------------------------------------------------
 記録日時       アカウント    接続したIP コマンド
-----------------------------------------------------------------------------------------------------------
[31/May/2008:07:57:47] xxxxx@xxxx.jp from 192.168.0.4 AUTHENTICATE CRAM-MD5 Success
[31/May/2008:07:57:47] xxxxx@xxxx.jp from 192.168.0.4 NAMESPACE -
[31/May/2008:07:57:47] xxxxx@xxxx.jp from 192.168.0.4 LIST "" "INBOX"
[31/May/2008:07:57:47] xxxxx@xxxx.jp from 192.168.0.4 STATUS "INBOX" (UIDVALIDITY)
[31/May/2008:07:58:31] xxxxx@xxxx.jp from 192.168.0.4 LOGOUT -
         :
         :
-----------------------------------------------------------------------------------------------------------

IMAP4詳細ログ(receiveimap4)

IMAP4サーバへの接続時の詳細な動作記録。
ログ記録を採るには、以下レジストリキーを手動で作成し、値を 1 と入力する。

 HKEY_LOCAL_MACHINE
  ->SYSTEM
   ->CurrentControlSet
    ->Services
     ->EPSTIMAP4S
      ->AcceptlogEnabled
       (DWORD) 0:ログを残さない,1:ログを残す

レジストリエディタを閉じた後、EPSTIMAP4Sを再起動する。
さらに、[メール作業フォルダ]下に"receiveimap4"というフォルダを手動作成する。

ログ記録は、[メール作業フォルダ]下の[receiveimap4<コンピュータ名>]フォルダに作成される。
-----------------------------------------------------------------------------------------------------------
 記録日時     スレッド・メモリ 送受信内容・内部処理ステータス
-----------------------------------------------------------------------------------------------------------
[09/Dec/2008:11:51:53], 00146288, * OK E-POST IMAP4rev1 Server........
[09/Dec/2008:11:51:53], 00146288, 0000 CAPABILITY
[09/Dec/2008:11:51:53], 00146288, * CAPABILITY IMAP4 IMAP4rev1 NAMESPACE AUTH=CRAM-MD5 AUTH=LOGIN
[09/Dec/2008:11:51:53], 00146288, 0000 OK CAPABILITY completed
[09/Dec/2008:11:51:53], 00146288, 0001 LOGIN "xxxxxx" "xxxxxxx"
[09/Dec/2008:11:51:53], 00146288, 0001 OK LOGIN completed
         :
         :
-----------------------------------------------------------------------------------------------------------

スクリプトで行う定期的なログ削除の自動化

定期的に行うログ削除の自動化

ログを採取したまま放っておくと、いつしかログのファイルでディスクは一杯になってしまうので、定期的に削除する必要が出てくる。
定期的に手動で作成することができるのであれば、それが望ましいが、定期的に行うべきログ削除を自動化したい場合は、OSにある「タスクスケジューラー」で毎日数日前のログファイルの削除を行うプログラムを作成し、スケジュールしておくとよい。
たとえば、以下のようなファイル削除を実行するスクリプトを VBScript(logclean.vbs)を使って作成する。ログ採取の状態、たとえばフォルダの位置や名称などを確認した上で、スクリプトを作成すればよい。
その後、スケジュールでスクリプト実行が可能なように、さらにバッチファイル(logclean.bat)を作成する。タスクスケジューラーに(logclean.bat)をドラックアンドドロップするとスケジュールが作成される。この時、スケジュール作成の実行アカウントは、当然ながら Administrator で行う。


開始時刻を変更するために、[スケジュール]を開く。


開始時刻を変更したら、パスワードを再入力して完了。


[logclean.vbs]


Set objFS=createobject("Scripting.FileSystemObject")
Dim MyDate, MyStr, MyFn

REM 三日前日付を算出
MyDate = Date()-3

REM 三日前のログファイル名を作成
MyStr = Mid(MyDate, 3,2) + Mid(MyDate,6,2) + Mid(MyDate,9,2) + ".log"
rem MsgBox MyStr

REM 削除するファイル pop3log をフルパスに指定
MyFn = "C:\mail\pop3log\[マシン名]\" + MyStr
rem MsgBox MyStr + "を削除します。"

REM ファイル削除実行
objFS.DeleteFile(MyFn)

[logclean.bat]


C:\Windows\system32\cscript.exe "C:\Program Files\epost\ms\logclean.vbs"

[scraplog.vbs]


REM ログファイルの分割
On Error Resume Next
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

REM 分割サイズ 1MBに設定
scrap = 1000000

REM 前日付を算出
MyDate = Date()-1

REM 前日のログファイル名を作成
InFile = Mid(MyDate, 3,2) + Mid(MyDate,6,2) + Mid(MyDate,9,2) + ".log"

REM 分割するログファイルを作成
no = 1
OutFile = Mid(MyDate, 3,2) + Mid(MyDate,6,2) + Mid(MyDate,9,2) + "-" + CStr(no) +".log"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If Err.Number = 0 Then
 Set objInFile = objFSO.OpenTextFile(InFile)
 If Err.Number = 0 Then
  nLen = 0
  Set objOutFile = objFSO.OpenTextFile(OutFile, 2, True)
  Do While objInFile.AtEndOfStream <> True
   mData = objInFile.ReadLine
   n = n + Len(mData)
   objOutFile.WriteLine mData
   If n > scrap then
    REM 分割するログファイルを作成
    objOutFile.Close
    n = 0
    no = no + 1
    OutFile = Mid(MyDate, 3,2) + Mid(MyDate,6,2) + Mid(MyDate,9,2) + "-" + CStr(no) +".log"
    Set objOutFile = objFSO.OpenTextFile(OutFile, 2, True)
   End If
  Loop
  objOutFile.Close
  objInFile.Close
 End If
End If


書籍『E-Post Mail Server完全ガイド』ご案内