2007年9月17日月曜日

[Sendmail] メールが複製される障害

検証目的
----------

Sendmail でメールが複製される障害を確認するため、再現試験を行いました。


検証環境
----------

* OS: Debian GNU/Linux 4.0r1
* Sendmail: 8.10.2

※ Sendmail のバージョンは実際に障害が発生したバージョンです。


メール配送
------------

[MUA] --> [MTA1] --> [MTA2] --{Internet}--> [MTA3]
(ドメイン a.test) (ドメイン b.test)

* MUA .... メールを送信するメーラ
* MTA1 ... 組織A (a.test) の メールスプールサーバ
* MTA2 ... 組織A (a.test) の 中継サーバ
* MTA3 ... 組織B (b.test) の 中継サーバ


試験方法
----------

MTA2 のエイリアスで「postmaster => bar」を定義。
(bar@a.test は存在しない)

MUA から以下のメールを送信する。
From: foo@a.test (foo@a.test は存在しない)
To: user1@b.test (user1@b.test は存在する)
CC: hogehoge@b.test (hogehoge@b.test は存在しない)


試験結果 (概要)
-----------------

user1@b.test でキューの再送間隔毎に同一メールを受信する。


1. MTA2 -> MTA3 の送信のとき、
正常に送信できるアドレス (user1@b.test) には送信される。

2. 何らかの理由で恒久的に送信できないアドレス (hogehoge@b.test) があると、
送信できなった旨をエラーとして MTA2 が送信者へ返信する。

3. MTA2 がエラー通知をなんらかの理由で送信者へ返信できないと、
ダブルバウンス (エラー通知の送信失敗) が発生。
Postmaster へダブルバウンスを通知する。

4. Postmaster 宛てがエイリアス展開されダブルバウンスの通知がなされるが、
ダブルバウンスの通知がなんらかの理由で失敗すると、
savemail panic とログに残され、ダブルバウンス通知はキューから削除される。
(qf* -> Qf へリネームされる。)

5. オリジナルのメール (foo@a.test => user1@b.test, hogehoge@b.test)
がキューに残される。

※ このバージョンのバグ?同じ試験を最新バージョン 8.14.1 で試したが
キューに残らなかった。

6. キューに残ったオリジナルのメール (foo@a.test => user1@b.test, hogehoge@b.test)
が再送間隔ごとに処理され、1~5 を繰り返す。


回避策
--------

1. Sendmail の設定ファイル (Sendmail.cf) を、

O DeadLetterDrop=/var/tmp/dead.letter

とし、ダブルバウンスのメールを捨てる。

2. Sendmail を再起動する。
kill -HUP <Sendmail の PID>

0 件のコメント: