qmail アーキテクチャ −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− # -------------------------------------------------------------------------------------------- # qmail による配送手順 # -------------------------------------------------------------------------------------------- MTA には一般的に下記2 機能を有する。 1. メールを自身のドメインアカウントに配送する機能 2. 組織外からのメールを自身のドメインアカウント又は外部組織のドメインアカウントへ中継する機能 上記(1)は俗にいうローカル配信、(2)はメール中継と呼ばれる。 ◆ 一般的なメール配信形態 > ローカルでメールを生成し、ローカルにメールを配信 ルート:qmail-inject ⇒ qmail-queue ⇒ qmail-send ⇒ qmail-lspawn > ローカルでメールを生成し、外部にメールを配信 ルート:qmail-inject ⇒ qmail-queue ⇒ qmail-send ⇒ qmail-rspawn > 外部でメールを生成し、ローカルにメールを配信 ルート:qmail-smtpd ⇒ qmail-queue ⇒ qmail-send ⇒ qmail-lspawn > 外部でメールを生成し、外部にメールを配信(メール中継) ルート:qmail-smtpd ⇒ qmail-queue ⇒ qmail-send ⇒ qmail-rspawn ◆ 特別なメール配信形態 > ローカル、または外部にて生成されたメールがアドレス間違い等で差し戻される場合 ルート:qmail-inject または qmail-smtpd ⇒ qmail-queue ⇒ qmail-send ⇒ qmail-queue > ローカル宛のメールが.qmail ファイルにより転送された場合 ルート:qmail-inject または qmail-smtpd ⇒ qmail-queue ⇒ qmail-send ⇒ qmail-lspawn ⇒ qmail-local ⇒ qmail-queue Local User が送信したメール Remote User が送信したメール | | | 呼び出し | SMTP 接続 ↓ ↓ ================== ================= + qmail-inject + + qmail-smtpd + rcpthosts ファイル参照 ================== ================= | ================== | +――――― + qmail-queue + ―――――+ ================== | トリガーより起動を掛ける | (メールキューより送信メールを取得) ↓ ================== + qmail-send + locals、virtualdomains ファイル参照 ================== Local 送信のコマンド | Remote 送信のコマンド +―――――――――+―――――――――+ | | | | ================== ================== + qmail-lspawn + assign ファイル参照 + qmail-rsqawn + ================== ================== | 配信のスケジュールを組む | 配信のスケジュールを組む | | ================== ================== + qmail-local + .qmail ファイル参照 + qmail-remote + ================== ================== | | | メール配信(転送) | SMTP によりメール配信 | | 各Local User のメール 外部メールサーバーへ ボックスへメール配信 メール配信(メール中継) (ローカル配信) # -------------------------------------------------------------------------------------------- # qmail によるメールループ防止方法 # -------------------------------------------------------------------------------------------- 主に、次のような操作を行った場合メールループが起こりうる。 1. 転送によるメールループ 2. エラーメールバウンスによるメールループ qmail はqmail-localが『Deliverd-To:』をメールヘッダに含めることで上記のようなメールループを防いでいる。 ◆ 以下に、転送によるメールループが発生した場合のqmail の防止方法を説明する。 例1 ) user@host1.co.jp からuser@host2.co.jp 宛にメール送信する。 条件 ) user@host2.co.jp にはuser@host1.co.jp への転送設定が行われている。 user@host1.co.jp にはuser@host2.co.jp への転送設定が行われている。 host1.co.jp のMTA はqmail であるとする。 配送 ) From : user@host1.co.jp To : user@host2.co.jp MTA host2.co.jp 内での処理 ↓ ↓ host2.co.jp のqmail-local が『Deliverd-To:user@host2.co.jp』ヘッダを付与する ↓ host2.co.jp のqmail-remote がuser@host1.co.jp へメール転送 ↓ From : user@host1.co.jp To : user@host1.co.jp MTA host1.co.jp 内での処理 ↓ ↓ host1.co.jp のqmail-local が.qmail ファイルの定義に基づき、user@host2.co.jp へ ↓ メール転送しようとする ↓ host1.co.jp のqmail-local がヘッダ中に『Deliverd-To:user@host1.co.jp』の存在を ↓ 確認したので、postmaster へ2 重バウンスする ※※ メールループは防がれた ※※ ---------------------------------------------------------------------------------------------- 例2 ) user@host1.co.jp からbaduser@host2.co.jp 宛にメール送信する。 条件 ) user@host1.co.jp にはbaduser@host2.co.jp への転送設定が行われている。 host1.co.jp のMTA はqmail であるとする。 配送 ) From : user@host1.co.jp To : baduser@host2.co.jp ↓ ↓ host2.co.jp のMTA がuser@host1.co.jp へバウンスメール送信 ↓ From : baduser@host2.co.jp To : user@host1.co.jp ↓ ↓ host1.co.jp のqmail-local が『Deliverd-To:user@host1.co.jp』ヘッダを付与 ↓ host1.co.jp のqmail-local がbaduser@host2.co.jp へメール転送 ↓ From : user@host1.co.jp To : baduser@host2.co.jp ↓ ↓ host2.co.jp のMTA がuser@host1.co.jp へバウンスメール送信 ↓ From : baduser@host2.co.jp To : user@host1.co.jp ↓ ↓ host1.co.jp のqmail-local がヘッダ中に『Deliverd-To:user@host1.co.jp』の存在を ↓ 確認したので、postmaster へ2 重バウンスする ※※ メールループは防がれた ※※