ビジネスチャットが普及し始めている昨今においても企業における連絡手段としてメールはいまだ中核的なポジションを占めており、様々な情報がメールでやり取りされます。
ユーザーは頻繁にメールを送り、相手に100%届くものと信じています。
メールが届かなかったとき、受け取れなかった場合には管理者へ問い合わせが投げられ、管理者は原因の究明と事象の復旧を迫られます。
今回はExchangeOnlineにおけるメールログの調査方法について説明します。
メールの追跡、 監査、電子情報開示
ExchangeOnlineにおいてメール関係で管理者が調査できることは大きく分けてメッセージの追跡、メールボックスの監査、電子情報開示の3つです。
この記事ではメッセージの追跡について解説します。
- メッセージの追跡
- ExchangeOnlineで送受信したメールを送信者や受信者などを指定してステータスを調査します。
- メールボックスの監査
- メールボックスを指定してそのメールボックス上でどういった操作が行われたかを取得します。
- 監査を利用するためにはあらかじめメールボックスの監査設定を実施している必要があります。
- 電子情報開示
- 主に法的訴訟対応等の目的でメールボックス内のアイテムを調査します。
- 利用にはExchangeOnline Plan1 + ExchangeOnlineArchivingもしくはExchangeOnline Plan2のライセンスが必要です。
メッセージの追跡
Exchange管理者はExchange管理コンソールの「メールフロー」→「メッセージ追跡」を利用するか、PowerShellから調査が可能です。
ここではPowerShellからの調査について説明します。
Get-MessageTrace
PowerShellでExchangeOnlineに接続し、上記のコマンドを実施すると直近48時間のすべての送受信メールの情報が取得できます。
ただし、これだけですと膨大なメールの量がヒットし、既定での取得上限となっている1000通分を超えてしまうのでいくつかオプションを紹介します。
- RecipientAddress
- 受信者のアドレスです。カンマ区切りもしくは配列を渡せば複数名指定可能です。
- SenderAddress
- 送信者のアドレスです。受信者と同じく複数名指定可能です。
- StartDate
- 追跡する期間の開始日です。調査日から遡って30日以内である必要がありますが、10日前までしか検索してくれません。
- EndDate
- 追跡する期間の終了日です。
- PageSize
- 取得するメールの数です。既定で1000通分のメールしか調査してくれないのでそれより多くなる場合は最大値の5000を設定するといいでしょう。
- 5000通を超える場合は下記Pageオプションと合わせると漏れがありません。
- Page
- 検索した全データは上記PageSizeによって規定で1000通、最大で5000通で分割されそれを超えると2ページ目、という扱いになります。
- すべてのデータを取得したい場合はfor文などでページ数をインクリメントして変数に追加してやると漏れがありません。
- Status
- 配信ステータスを指定することが可能です。例えば正常に受信されたメッセージだけを取得したい場合はDeliveredを指定します。
Get-MessageTrace サンプル
例えば、2019/4/1 – 2019/4/10の間にsender@example.com からrecipient@example.comに送付されたメールを検索する場合は以下のコマンドで取得可能です。
コマンド
Get-MessageTrace -StartDate 2019/4/1 -EndDate 2019/4/10 -SenderAddress sender@example.com -RecipientAddress recipient@example.com
結果(サンプル)
Message Trace ID : xxxxxxxx-b182-4d11-16b6-08d6bc083af8
Message ID : <xxxxxxxxxxxxx26D3407B2A0866F1F67968D2C0@xxxxxxxxxxxxx.jpnprd01.prod.outlook.com>
Received : 2019/04/08 9:54:45
Sender Address : sender@example.com
Recipient Address : recipient@example.com
From IP : 12.34.56.78
To IP :
Subject : test
Status : Delivered
Size : 26490
より多数のメールから目的のメールを見つけるためにはコマンドにパイプをつないでWhere-Objectしたり、一度CSVにエクスポートしたりすることで容易に目的のメールを見つけることができるかと思います。
Get-MessageTraceDetail
Get-MessageTraceのみでもメールが届いたのか・届いていないかはわかりますがGet-MessageTraceDetailでより詳細な情報を取得できます。
取得には個々のメールのMessageTraceIDが必要になるのでGet-MessageTraceである程度対象を絞ってから取得するのがいいでしょう。
Get-MessageTraceDetail サンプル
先ほどのGet-MessageTraceで取得したメールをより詳細に調査するためには以下のコマンドを実行します。
コマンド
Get-MessageTraceDetail -StartDate 2019/4/1 -EndDate 2019/4/10 -SenderAddress sender@example.com -RecipientAddress recipient@example.com -MessageTraceID xxxxxxxx-b182-4d11-16b6-08d6bc083af8
結果(サンプル)
Date Event Detail
---- ----- ------
2019/04/08 9:54:45 受信 メッセージが TY2xxxxxxxxxx によって TLS1.2 と AES256 を使用して受信され...
2019/04/08 9:54:46 配信 メッセージはフォルダー TEST に正常に配信されました。
Detail欄に格納されている情報がより詳細なメッセージの情報です。配信のステータスや配信先のフォルダ名、振り分けルールが記載されていたり、不達になっている場合はエラーメッセージから不達の原因を推測することができます。
Start-HistoricalSearch
Get-MessageTraceDetailより詳細なログ、もしくは10日より前のログを調査したい場合はこちらのコマンドを利用します。結果が出るまで数時間ほどかかることが多く、結果は管理コンソール上に保管されるのでそのURLにアクセスしてダウンロードする形になります。
Start-HistoricalSearchでは主に以下のオプションを利用して調査を実施します。
- RecipientAddress
- Get-MessageTrace等と同様です。
- SenderAddress
- Get-MessageTrace等と同様です。
- StartDate
- 調査日から遡って90日前までの指定が可能です。
- EndDate
- 調査日から遡って90日前までの指定が可能です。
- ReportTitle
- 一つの検索につき必ずタイトルをつける必要があります。
- ReportType
- 取得するレポートのタイプを指定します。複数のタイプがあるのですが純粋なメールの調査であればMessageTraceまたはMessageTraceDetailのどちらかで問題ありません。
- NotifyAddress
- 調査が完了した際に通知メールを送付するアドレスを指定します。
- 指定するアドレスはExchangeOnlineの承認済みドメインである必要があります。
Start-HistoricalSearch サンプル
Get-MessageTraceDetailのサンプルと同様の調査をするためには以下のコマンドを実行します。
コマンド
Start-HistoricalSearch -StartDate 2019/4/1 -EndDate 2019/4/10 -SenderAddress sender@example.com -RecipientAddress recipient@example.com -ReportTitle test -ReportType MessageTraceDetail -NotifyAddress notify@example.com
結果(サンプル)
JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription
----- ---------- ----------- ------ ---- --------- ----------------
xxxxxxxx-9fd1-4125-85cb-3e4cc0df260c 2019/04/12 4:42:13 test NotStarted 0
Start-HistoricalSearchはコマンドを叩いてすぐに結果が返ってくるわけではなく、数十分~数時間ほどかけてサーバ側で調査して結果をファイルとして提供する形になります。
あらかじめNotifyAddressを指定しておけば調査完了時にメールで通知してくれますが、指定しない場合は調査の進捗状況を確認する必要があります。
コマンド
Get-HistoricalSearch -JobId xxxxxxxx-9fd1-4125-85cb-3e4cc0df260c
結果(サンプル)
JobId SubmitDate ReportTitle Status Rows ErrorCode ErrorDescription
----- ---------- ----------- ------ ---- --------- ----------------
xxxxxxxx-9fd1-4125-85cb-3e4cc0df260c 2019/04/12 4:42:13 test InProgress 0
Statusの欄が”Done”に変われば調査が完了し、FileURLから調査結果のCSVファイルを取得可能です。Get-HistoricalSearchを実行し、StatusがDoneになり、Rowsが0でなければFileURL欄に調査結果の格納されたファイルのURLが記載されています。
RunspaceId : xxxxxxxx-59f9-43be-90c8-36f822afc4b7
JobId : xxxxxxxx-9fd1-4125-85cb-3e4cc0df260c
Identity : xxxxxxxx-9fd1-4125-85cb-3e4cc0df260c
SubmitDate : 2019/04/12 4:42:13
ReportTitle : test
Status : Done
Rows : 1
FileRows : 1
ErrorCode :
ErrorDescription :
FileUrl : https://admin.protection.outlook.com/ExtendedReport/Download?Type=OnDemandReport&RequestID=xx
xxxxxx-9fd1-4125-85cb-3e4cc0df260c
ReportStatusDescription : Complete – Ready for download
ReportType : MessageTraceDetail
NotifyAddress : {notify@example.com}
StartDate : 2019/04/01 9:00:00
EndDate : 2019/04/10 9:00:00
DeliveryStatus : All
SenderAddress : {sender@example.com}
RecipientAddress : {recipient@example.com}
OriginalClientIP :
MessageID : {}
DLPPolicy : {}
TransportRule : {}
Locale : ja-JP
Direction : All
CompletionDate : 2019/04/12 5:22:42
EstimatedCompletionTime :
JobProgress :
EncryptionType :
EncryptionTemplate :
IsSaved : False
NumOfBlocks : 0
CompressFile : False
NotifyAddressを指定して調査を実行した場合には指定したアドレスにファイルへのリンクが付いたメールが届くため、直接ファイルをダウンロードすることが可能です。ただし、Exchange管理者権限がないユーザーもダウンロードできるため十分に注意してください。
以上