はじめに
このドキュメントでは、Eメールセキュリティアプライアンス(ESA)でメールループを特定する方法について説明します。
背景説明
メールループは、3回以上挿入された同じメッセージIDを持つメッセージによって示すことができます。メールループは、CPU高使用、配信速度の低下、全体的なパフォーマンスの問題の症状を引き起こす可能性があります。通常、メッセージIDを複数回挿入することはループを示しますが、問題が原因で複数回挿入される場合や、同じメッセージIDを持つ同じスパムメッセージを繰り返し挿入し続ける、ずさんなスパマーである場合もあります。
より一般的には、メールのループは、ネットワーク上でメール・サーバからメール・サーバへと無限に広がる同じメッセージまたは一連のメッセージを送信するメール・インフラストラクチャの問題によって引き起こされます。 これらのメッセージは非常に長い間このような方法で楽しむことができますが、ネットワーク帯域幅にとっても、発生したESAの処理コストにとっても良いことではありません。
解決方法
メールループを特定するのは、問題の可能性があると思われる場合は、通常はかなり簡単です。ただし、注意して確認する必要があります。
システムのコマンドラインインターフェイス(CLI)にログインし、次のコマンドのいずれか、または両方を実行すると、次のような利点があります。
grep "Subject" mail_logs
grep "Message-ID" mail_logs
特にMessage-IDの検索では、まったく同じIDの繰り返しインスタンスが見つかった場合、メールループが発生していることがわかります。 ただし、同じメッセージを再び呼び出すメールサーバの1つがMessage-IDヘッダーを有用に変更または削除している可能性があるため、これでは不十分な場合があります。 Message-IDチェックで何も識別できない場合は、Subjectチェックを試してみてください。
メッセージIDによってループメッセージを見つけることができたと仮定すると、メッセージとその親接続(ICID)に関するその他の情報も見つける必要があります。 同じログ行にMessage-IDとMIDがある場合は、次の操作を実行できます。
grep -e "MessageID_I_found" -e "MID 123456" mail_logs
結果の出力から、関連するICIDとDCIDを見つけ、次の操作を実行できます。
grep -e "MessageID_I_found" -e "MID 123456" -e "ICID 1234567" -e "DCID 2345767" mail_logs
これで完全な接続 – メッセージトランザクションが確立され、それがどこから来て、どこに配信されたかを確認できます(もしそれが既に発生している場合) 。 ループメッセージが特定されたら、次の手順として、問題を修正できるようにメッセージを確認します。 ループの原因を修正しなければ、このメッセージや他のメッセージが引き続きループするか、または問題がすぐに再発する可能性があります。
次のようなメッセージフィルタを作成します。
loganddrop_looper:
if(header("Message-ID") == "MessageID_I_found") {
archive("looper");
drop();
}
次に、その変更をコミットし、次のコマンドを発行してメッセージをチェックアウトします。
tail looper
メール・ログを見ることでリモート・システムに関して得られる情報と、メッセージ自体を見ることで得られるその他の情報を使用して、問題の場所を特定できます。
メールループの発生を防ぐにはどうすればよいですか。
複雑な環境では、これは難しいことがあります。環境内のメールフローの仕組みと、ESAまたは別のデバイスでの新しいネットワーキングの変更が、そのトラフィックにどのように影響するかを理解することが重要です。ランアウェイメールループの一般的な原因の1つは、Receivedヘッダーの削除です。 ESAは、メッセージ内に100個の受信ヘッダーを確認すると、メールループを自動的に検出して停止しますが、ESAではこのヘッダーを削除できるため、多くの場合、メールループの原因となります。 正当な理由がない限り、Receivedヘッダーをオフにしたり、削除したりしないでください。
メールループを防止または修正するのに役立つフィルタの例を次に示します。
External_Loop_Count:
if (header("X-ExtLoop1")) {
if (header("X-ExtLoopCount2")) {
if (header("X-ExtLoopCount3")) {
if (header("X-ExtLoopCount4")) {
if (header("X-ExtLoopCount5")) {
if (header("X-ExtLoopCount6")) {
if (header("X-ExtLoopCount7")) {
if (header("X-ExtLoopCount8")) {
if (header("X-ExtLoopCount9")) {
notify ('joe@example.com');
drop();
}
else {insert-header("X-ExtLoopCount9", "from
$RemoteIP");}}
else {insert-header("X-ExtLoopCount8", "from $RemoteIP");}}
else {insert-header("X-ExtLoopCount7", "from $RemoteIP");}}
else {insert-header("X-ExtLoopCount6", "from $RemoteIP");}}
else {insert-header("X-ExtLoopCount5", "from $RemoteIP");}}
else {insert-header("X-ExtLoopCount4", "from $RemoteIP");}}
else {insert-header("X-ExtLoopCount3", "from $RemoteIP");}}
else {insert-header("X-ExtLoopCount2", "from $RemoteIP");}}
else {insert-header("X-ExtLoop1", "1"); }