このページでは自宅サーバーで使用するSendmailでの、virtusertablealiasesによるメール転送の使い分けについて初心者向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
Sendmailの設定

Sendmailについて

Sendmailのファイル構成

sendmail.mcの編集と設定

sendmail.cfの作成

受信するホスト名の設定

ホスト名毎のメールの振分け

メール転送設定の使い分け

受信/転送に関する設定

Sendmailのコントロール

連携するアプリケーション等


"/etc/aliases"と"/etc/mail/virtusertable"の関係

Sendmail には、 "/etc/mail/virtusertable" Sendmailのホスト名毎のメールの振分けについて とは別に、メール転送のための "/etc/aliases" という仕組みがあります メールの転送設定のコツ

この二つの仕組みは「メールの転送」という類似した役目を担いますが、それぞれに 「転送の考え方」 が異なっていて、前者は ドメイン名 を基準としたメールの振り分け、後者は ユーザーアカウント を基準としたメールの振り分けのために存在します。

つまりこの二つの仕組みを組み合わせることで、かなり自由に メールサーバー の運用が可能になるわけですが、仕組みも設定方法も異なる二つの転送設定を使いこなすのは骨の折れる作業かもしれません。

メールの転送はどうしてこんな「非効率な仕組み」になっているのでしょうか?。

これは、"/etc/aliases"と"/etc/mail/virtusertable"の「生い立ち」を知ると理解しやすいので、ここで詳しく説明しましょう。

"/etc/aliases" は、今のような電子メールシステムが生まれる前の、 「一つのサーバー内でユーザーがメールをやりとりしていた時代」 から利用されてきた仕組みです 初期の電子メールの仕組み

まだこの頃は、外部の MTA から自分のMTAがメールの転送を受けるという概念がありませんでした。

従ってこの頃の電子メールアドレスには "@" 以降の記述、つまり ホスト名 を付加する必要がありませんでした。

つまり当時のメールアドレスは現在の "tanaka@obenri.com" という形式ではなく、 "tanaka" のように ユーザーアカウント名 だけだったわけです。

つまり、電子メールの転送の仕組みである"/etc/aliases"は、 サーバー 内のアカウントへ転送(ローカル配送)」 だけを担えば充分だったわけです。

その後、異なるMTA間でメールの相互転送を行うのが一般的になってきましたが、その頃はまだ 「一つのメールサーバーは単一のホスト名で運用する」 というスタイルでしたので、"/etc/aliases"にはひとまず外部のメールサーバーへの転送機能だけが付加されました。

ここに至って、"/etc/aliases"は受信したメールデータについて、

「サーバー内のアカウントへ転送(ローカル配送)と、外部のメールサーバーへの転送。」

という二つの機能が実装され、現在に至っているわけです。

ところがその後、サーバーシステムには バーチャルホスト 機能が実装され、 「一つのサーバーシステムで複数のホスト名を扱う。」 という運用方法が一般的になりました。

しかしこの機能まで"/etc/aliases"に組み込んでしまうと、旧来システムとの運用上の互換性が保てなくなるため、

「受信するホスト名ごとに、サーバー内のアカウントへ転送(ローカル配送)と、外部のメールサーバーへの転送。」

という設定機能として新たに "/etc/mail/virtusertable" が追加されたわけです。

関連セクションへ 関連セクション・ メールサーバーの構築

このページの先頭へ↑

二つの転送設定ファイルの使い分けのポイント

一般的にはメールの転送設定を "/etc/aliases" だけで賄えるのであれば、できるだけ "/etc/mail/virtusertable" を利用しないことをお勧めします。

なぜなら、 "/etc/aliases" Sendmail だけではなく、その互換 MTA である Postfix でもそのまま利用できるため、何らかの理由でMTAを変更したいときに面倒がないからです。

ただ "/etc/aliases" は、"@"以降の記述( ホスト名 )の違いによるメールデータの振分け機能を持ちません。

具体的にいうと "tanaka@obenri.com" "tanaka@mail.obenri.com" "tanaka@ugegege.com" など、 "/etc/mail/local-host-names" で自 ホスト 宛てに設定されているすべてのメールアドレスについては、まとめて "tanaka" 宛てとして処理することしかできないということです。

ただこのこの制限を良いほうに解釈すれば、 「ホスト名の違いによる振分けが必要なければ、振分け元はアカウント名のみで記述できる。」 ということを意味しますので、記述そのものは非常に簡単で済むという利点があります。

tanaka    00tanaka
suzuki    00suzuki

ということは、例えば メールサーバー 上で運用するホスト名の種類が少なく、アカウントの数が限られている「家族や少人数のサークル」での利用が前提になっている運用形態では、強いて "/etc/mail/virtusertable" を利用するのではなく、 "/etc/aliases" だけでメールの転送を行うのがベターといえるでしょう。

一方、 "/etc/mail/virtusertable" はホスト名ごとのメールアドレスの振分けを提供するものですから、 「ホスト名の違いによる振分けが必要なくとも、振分け元はメールアドレスをすべて記述しなければならない。」 ので、記述は非常に面倒になります。

ちなみに、上の"/etc/aliases"の記述例と同じ転送設定を行う場合、大体こういう感じになるでしょう。

これはもちろん極端な例です。実際には受信が必要なメールアドレスだけ記述すればOKです。
tanaka@obenri.com    00tanaka
tanaka@mail.obenri.com  00tanaka
tanaka@ugegege.com    00tanaka
suzuki@obenri.com    00suzuki
suzuki@mail.obenri.com  00suzuki
suzuki@ugegege.com    00suzuki

つまり "/etc/mail/virtusertable" は、メールサーバー上で複数のホスト名の使い分けが前提となる「組織的あるいは商業的」な運用において、メールサーバーの利用者が比較的多い場合に「やむをえず」利用すべきであり、 "/etc/aliases" で賄える範囲には利用しないほうが良いと思われます。

では、この考え方を解りやすいように、図解してみましょう。

/etc/aliasesと/etc/mail/virtusertableの設定範囲
"/etc/aliases"と"/etc/mail/virtusertable"の設定範囲

これらの二つのメール転送の仕組みは、 "/etc/mail/virtusertable" "/etc/aliases" の順に処理されますので、処理が"/etc/mail/virtusertable"に該当しない場合はそのまま"/etc/aliases"に処理が移ります。

この図ように、 「ホスト名の異なるメールの振分け」 が発生する部分にだけ"/etc/mail/virtusertable"に担わせ、それ以外の処理を"/etc/aliases"に賄わせるようにすると全体の流れがわかりやすくなります。

実際には、"/etc/mail/virtusertable"は外部のメールアドレスへの転送機能を持っているのですが、これは必ず"/etc/aliases"で行うようにします。

そうすると、

「ホスト名の異なる場合のメールの振分け処理は"/etc/mail/virtusertable"。」

「それ以外のサーバー内転送と外部メールサーバーへの転送は"/etc/aliases"。」

という具合に役割分担がはっきりしますから、メール転送の設定を追加したり、後から内容の確認や修正を行ったりする場合にも理解しやすく、間違いが少なくなると思います。

関連セクションへ 関連セクション・ メールサーバーの構築

NEC「得選街」
このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System