qmail-pop3d
の仮想ドメイン対応configure
スクリプトの実行qmail-pop3d
起動スクリプトに VMailMgr を組み込むDNS や Web そしてメールなど、 いくつかのネットワークサービスを提供するサーバーを構築・運用するとき、 各サービスを別々のホストに分離することはもちろん、 単一のホストに同居させることもできます。 どちらにしても利点と欠点がありますが、 単一のホストにまとめたほうが導入・運用のコストを抑えることができるでしょう。 特に、ホストのパフォーマンスに余裕があるときや、 小規模なサイトであるならば、 1台のホストで複数のサービスを提供することはよくあります。
それでは、 複数のサイト向けのサービスを単一のホストで実現するにはどうしたらよいでしょうか。 例えばインターネットメールサービスであれば、 それぞれのサイトのドメインのメールを扱う SMTP サーバーが必要になります。
1台のホストに複数のサーバーソフトウェアをインストールし、 それぞれ別のサイト (ドメイン) 用のサービスを提供する方法があります。 設定やユーザー情報なども、サイトごとに分離した形で管理されます。 これを実現するには、 SMTP なら各サーバーが同じポート番号 25 を使用するため、 ホストにはサイトの数だけ IP アドレスが必要になります。 近頃の UNIX 系の OS は、 1つの物理的なネットワークインターフェイスに複数の IP アドレスを割り当てることができるので、 ネットワークカードを追加しなくても済みます。
複数サイトのサービスを扱えるサーバーソフトウェアを利用する方法もあります。 この場合も、もちろん設定やユーザー情報はサイトごとに用意しなければなりません。 通信プロトコルやユーザーの認証情報など、 クライアントから渡されるデータに何かしらサイト (ドメイン名) を特定できる情報が含まれているのであれば、 サイトごとに IP アドレスを用意する必要はありません。 サーバーソフトウェアは、 ドメイン情報をもとにサービス対象のサイトを認識します。
このように、単一のホストで複数サイト (ドメイン) 向けのサービスを扱える機能のことを、 「仮想ホスト (virtual host) 機能」あるいは 「仮想ドメイン (virtual domain) 機能」と呼びます。 また、サーバーの IP アドレスにより識別・サービスを提供されるサイトのドメインを 「IP ベースの仮想ドメイン (IP-based virtual domain)」、 クライアントから渡されるドメイン名やホスト名、 ユーザー名などをもとに識別・サービスを提供されるサイトのドメインを 「名前ベースの仮想ドメイン (name-based virtual domain)」 と呼びます。
qmail には、複数のドメインのメールを受信し、 ドメインごとに異なるユーザー空間とメールボックスを扱うための機能があります。
qmail で単一ドメインだけを扱う場合は、通常、 ドメインのユーザーは UNIX のユーザーアカウントに対応します。 各ユーザーのメールは、対応する UNIX ユーザーに配送・保持されます。
一方、
仮想ドメイン機能を利用してほかのドメイン宛のメールをローカル配送させる場合は、
メールはドメインごとに指定された単一の UNIX ユーザー宛に配送されます。
仮想ドメインのユーザーは、
配送先の UNIX ユーザーが所有する .qmail
ファイルに対応します。
UNIX ユーザーには通常のアドレスではなく拡張アドレス
(→7.2 節) として配送されるため、
「.qmail-仮想ドメインのユーザー名
」
という名前のファイルが評価対象になります。
つまり、.qmail
ファイルによって、
仮想的なユーザーと配送先のメールボックスを管理します。
qmail の仮想ドメイン機能により受信したメールは、 以下に示すような流れでメールボックスに配送されます。 ここで示している仮想ドメインや UNIX ユーザーの名前、 そして .qmail ファイルとメールボックスの配置の構成は、 ほんの一例です。 当然ながら、これとは異なる名前や構成も可能です。
vdomuser
の拡張アドレスに変換される。
vdomuser
のホームディレクトリ下の
.qmail-alice
が評価される。
.qmail-alice
で指定されたメールボックス
~vdomuser/alice/Maildir/
に配送される。
qmail の仮想ドメイン機能を利用すれば複数ドメインのメール受信が可能になりますが、 受信しメールボックスに保存されたメールは、 ユーザーがどうやって読むのでしょうか。
先の節で触れたように、 qmail によって受信された仮想ドメインのメールは、 すべてある 1つの UNIX ユーザーが保持しています。 よって、 仮想ドメインのユーザーをメールボックスが保持されているホストにログインさせ、 自分のメールボックスだけを参照させることは難しくなります。
そこで、仮想ドメイン用の独自のユーザー管理と認証、 そして仮想ドメインのメールボックスへのアクセスに対応した POP3/IMAP サーバーを利用します。 仮想ドメインにより管理されるサイトのユーザーには、 ユーザーのクライアント端末から POP3/IMAP を利用してメールボックスにアクセスさせます。
実は、qmail による仮想ドメイン下のユーザーは、 別々の UNIX ユーザーに割り当てることも可能です。 しかし、 ドメインのユーザーに個別の UNIX のユーザー権限を与える必要がないことも多いです。 唯一のドメインを扱うときでさえ、 個別の UNIX ユーザーに分離せず、 仮想ドメイン機能を利用して単一の UNIX ユーザーに集約させることもあります。
qmail-pop3d
の仮想ドメイン対応
qmail 付属の POP3 サーバー qmail-pop3d
は、
仮想ドメイン環境下でも使用することができます。
qmail-pop3d
は、
ユーザー認証とメールボックスの位置の指示を別のプログラムに任せているため、
そのプログラムが仮想ドメインに対応していることが要件になります。
先の「5.1 POP サーバーの設定」
で紹介した認証プログラム checkpassword は、
UNIX ユーザーの認証にのみ対応しており、
仮想ドメインには利用できません。
qmail-pop3d
とそのフロントエンドである
qmail-popup
に対応し、
かつ仮想ドメインにも対応している認証プログラムとしては、
VMailMgr か VPopMail がよく利用されます。
両パッケージにはいくつか違いがありますが、共通して次のような特徴があります。
.qmail
ファイルではなく、
.qmail-default
ファイルに仕組まれた専用の配送プログラムがユーザーごとのメールボックスに振り分ける)
どちらかというと、VMailMgr より VPopMail のほうが人気があるようです。 VPopMail には、VMailMgr にはない次のような特徴もあるせいかもしれません。
qmail-smtpd
(tcpserver
)
用のアクセス制御ファイルを生成する機能
qmail-send
の再起動 (HUP
シグナル送信)
も自動で実行してくれる
両ソフトウェアパッケージには、ここで紹介していない特徴もあります。 詳しくは Web ページや付属文書などをご覧ください。 VPopMail については、以下のページに日本語で書かれた情報があります (情報が少々古いので注意)。
また、qmail-popup
/qmail-pop3d
に対応した認証プログラムの多くは、
The qmail home page で見つけることができます。
ここで紹介した VMailMgr と VPopMail の人気や機能の多さだけにとらわれず、
ほかの認証プログラムも評価してみることをお勧めします。
VPopMail は VMailMgr より高機能であり、利用者も多いため、 筆者は一旦は VPopMail を採用し解説しようとしました。 しかし、VPopMail には次のような問題があることに気付いたため、 結局は VMailMgr を採用することにしました。 そんな私は偏執的でしょうか?
root
権限で行う
文書で明示している箇所は見つけられなかったが、
仮想ドメインの管理作業は、
すべて root
権限で行う方針のようである。
付属文書ファイル INSTALL
にはそのような操作例が記述がされている。
root
権限は仮想ドメインを受信するために
qmail の設定を変更するとき以外、不要なはずである。
仮想ドメインの管理権限を
root
から委譲することは考慮していないのだろうか。
仮にクラックされ VPopMail 専用のユーザー権限が奪われると、
クラッカーは、
VPopMail 付属のコマンドを書き換えることが可能になる。
VPopMail のコマンドは root
が起動することがあるため、
結果、root
権限までも奪取されてしまう。
VMailMgr のソースアーカイブを、 同 Web サイトのダウンロードページなどから入手してください。 現在、最新バージョンは 0.96.9 で、 アーカイブファイル名は vmailmgr-0.96.9.tar.gz、 サイズは 362,379 バイトです。
VMailMgr のコンパイルには、C コンパイラと C++ コンパイラ、 リンカー、make ユーティリティが必要です。
configure
スクリプトの実行
ソースアーカイブは tar + gzip 形式になっているので、
両コマンドを利用して展開します。
ソースは「vmailmgr-バージョン番号
」
という名前のディレクトリ以下に展開されます。
$ gzip -dc vmailmgr-0.96.9.tar.gz | tar xf -
次に展開されたディレクトリに入り、
付属の configure
スクリプトを実行し、
コンパイル前の準備をします。
configure
スクリプト実行):
$ cd vmailmgr-0.96.9
$ ./configure
… configure の実行状況 …
デフォルトで生成される Makefile
は、
VMailMgr のコマンドやマニュアルファイルなどを
/usr/local
以下にインストールします。
インストール先を変更するには、
configure
スクリプトの
--prefix
オプションを利用して指定してください。
あとは make
コマンドでコンパイルとインストールを実行します。
$ make
… バイナリなどのコンパイル状況 …
$ su
Password: root のパスワード
# make install
… インストールの状況 …
qmail-pop3d
起動スクリプトに VMailMgr を組み込む
qmail-pop3d
(tcpserver
) の起動スクリプトを修正し、
checkpassword
の代わりに、
VMailMgr 付属の認証プログラム checkvpw
を使うように変更します。
デフォルトで checkvpw
は
/usr/local/bin/checkvpw
にインストールされます。
「5.2 APOP サーバーの設定」を参考にして修正してください。
修正を終えた後は、
qmail-pop3d
(tcpserver
)
を再起動するのを忘れないようにしてください。
この節では、ドメイン vdom.example.com のメールを仮想ドメインで受信し、 POP3 経由でメールボックスにアクセスさせるための設定例を紹介します。
VMailMgr は、1つの仮想ドメインを専用の UNIX ユーザーで管理します。
ここでは、ユーザー名を vdomuser
とし、グループも専用の
vdomgroup
を用意して所属させましょう。
# groupadd -g vdomgroup
# useradd -g vdomgroup -m vdomuser
# pw groupadd vdomgroup
# pw useradd vdomuser -g vdomgroup -m
仮想ドメインのユーザー情報やメールボックスは、 すべて専用 UNIX ユーザーのホームディレクトリ以下に保持されます。 よってホームディレクトリは必須です。 また、仮想ドメインの管理はこのユーザーで行なうため、 シェルを利用できるようにしておきます。
まずは SMTP (qmail-smtpd
) による受信のための設定です。
vdom.example.com ドメイン宛のメールを受信するように、
control/rcpthosts
ファイルに次の一行を追加します。
control/rcpthosts
に追加):
vdom.example.com
受信した vdom.example.com ドメイン宛のメールを仮想ドメインとして扱い、
ローカルのユーザー vdomuser に配送させます。
仮想ドメインの設定は、
control/virtualdomains
ファイルで指示します。
control/virtualdomains
に追加):
vdom.example.com:vdomuser
control/virtualdomains
ファイルの変更を反映するには、
qmail-send
プロセスに HUP
シグナルを送るか、
再起動しなければなりません。
また、
vdom.example.com 宛のメールが仮想ドメインの設定したこのホストに送信されるよう、
vdom.example.com ドメインの MX レコードの設定も合わせて必要です。
仮想ドメインのユーザーを管理する前に、
VMailMgr による仮想ドメインの準備をしなければなりません。
su
コマンドを利用して
root
から仮想ドメインの管理用ユーザー vdomuser
になり、
VMailMgr の vsetup
コマンドを実行してください。
# su - vdomuser
$ /usr/local/bin/vsetup
vsetup: created users directory.
vsetup: wrote '.qmail-default' file.
vsetup: added alias 'mailer-daemon'
vsetup: added alias 'postmaster'
vsetup: added alias 'root'
vsetup
コマンドを起動した結果、
ホームディレクトリ以下に次のようなファイルとディレクトリが生成されます。
.qmail-default
ファイルvdeliver
を起動するように設定される。
passwd.cdb
ファイルmailer-daemon
,
postmaster
,
root
が作成される。
デフォルトの転送先は、
そのホストの postmaster
宛になる
(ドメイン部は省略されているため、qmail により
control/envnoathost
または
me
に指定されたドメイン名が補完される)。
users
ディレクトリusers/ユーザー名/
」となる。
VMailMgr の vadduser
コマンドを用い、
仮想ドメインの仮想ユーザーを作成します。
$ /usr/local/bin/vadduser alice
Enter the user's new password: aliceに割り当てるパスワード
Please type it again for verification: 確認のためのパスワード入力
vadduser: user 'alice' successfully added
qmail-inject
コマンドを使い、
vdom.example.com ドメイン宛のユーザー宛にメールを送信してみましょう。
送信したら、ユーザーのメールボックスにメールが届いたことを確認してください。
$ echo to: alice@vdom.example.com | qmail-inject
$ ls -l users/alice/new
total 4
-rw------- 1 vdomuser vdomgroup 292 Nov 14 00:10 1005664253.31953.mail
仮想ドメイン下に管理されるメールボックスを読むには、 サーバーは何らかの方法でアクセス対象のドメインを識別しなければなりません。
VMailMgr 付属の認証プログラム checkvpw
は、
ユーザー認証のためクライアントから渡されるユーザー名により、
アクセス対象のドメインを識別することができます (名前ベースの仮想ドメイン機能)。
具体的には、
POP3/IMAP アクセス用のユーザー名として、
ドメインのユーザー名に続けてアットマーク「@」
とドメイン名を付加したものを使います。
つまり、ユーザー名としてメールアドレスを指定します。
以下に telnet
コマンドで
checkvpw
コマンドを組み込んだ
POP3 サーバー (qmail-pop3d
) に接続し、
仮想ドメイン vdom.example.com のメールボックスにアクセスする例を示します。
telnet
コマンドでアクセス:
$ telnet localhost pop3
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK <32201.1005666384@mail.isp.example.net>
USER alice@vdom.example.com
+OK
PASS aliceのパスワード
+OK
LIST
+OK
1 292
.
QUIT
+OK
Connection closed by foreign host.
メールクライアントの中には、
POP3 のユーザー名にアットマーク「@
」を含めると、
アットマーク以降を取り除いて POP3 サーバーに渡すものがあります。
そのようなメールクライアントをサポートするため、
アットマークの代わりにコロン「:
」を含めることで、
この問題を回避することができます。
先の例では「alice@vdom.example.com
」の代わりに
「alice:vdom.example.com
」をユーザー名として使用可能です。
ユーザー名にアットマークが含まれていない場合、 仮想ドメインのユーザーでなく UNIX ユーザーの認証が行なわれます。