連載
» 2002年02月09日 00時00分 UPDATE

実用qmailサーバ運用・管理術(6):バーチャルドメインにおけるqmailの運用 (2/3)

[鶴長鎮一,@IT]

qmailのバーチャルドメイン対応化

 前回までと同様に、qmailの動作を設定する場合は/var/qmail/control下のファイルを状況に合わせて編集します。

バーチャルドメインの追加

 まず、バーチャルドメインあてに来たメールを受信可能にするため、rcpthostsファイルに次の行を追加します。

atmarkit.jp
.atmarkit.jp
/var/qmail/control/rcpthosts

 2行目は「○○@host1.atmarkit.jp」や「○○@mail.atmarkit.jp」のように、メールアドレスにホスト名が指定されている場合でも受け取れるようにするもので、「*.atmarkit.jp」のようなワイルドカード指定になります。必要がなければ1行目だけでも構いません。

 次にvirtualdomainsファイルを用意して、バーチャルドメインあてに来たメールの制御ができるように次の行を追加します。virtualdomainsファイルは標準では存在しないので、新規に作成する必要があります。

virtual_domain:user

virtual_domain バーチャルドメインを指定
user ユーザーを指定

 例えば、example.jpドメインのメールサーバとして運用されているホスト「host1」に、atmarkit.jpドメインをバーチャルドメインメールとして追加する場合を考えます。このhost1には、「mail_user」がホームディレクトリを持つユーザーとして登録されており、このユーザーが今回追加するatmarkit.jpドメインの管理を任されたとします。この場合、次のような行をvirtualdomainsファイルに追加します。

atmarkit.jp:mail_user
.atmarkit.jp:mail_user
/var/qmail/control/virtualdomains

 「.atmarkit.jp」は前述のワイルドカード指定になるため、必要に応じて追加・削除します。ファイルの編集が終わったら、変更を有効にするためにqmail-sendプロセスの再立ち上げを行います。

# ps aux | grep qmail-send
qmails   プロセスID  0.0  0.1  1088  368 ?   S  Jan31  0:00 qmail-send
# kill -HUP プロセスID

 制御は、mail_userのホームディレクトリ下の.qmailファイルで行います。user1@atmarkit.jpを同一サーバ内のuser1、すなわちuser1@example.jpに転送する場合は、.qmail-user1ファイルを用意して次の1行を追加します。

&user1
または
&user1@example.jp
~mail_user/.qmail-user1

 他ホストのアドレスに転送する場合も同様です。user2@atmarkit.jpをuser2@atmarkit.co.jpに転送するには、.qmail-user2ファイルを次のようにします。

&user2@atmarkit.co.jp
~mail_user/.qmail-user2

 バーチャルドメインの管理を託されたユーザーは、自身のホームディレクトリに「.qmail-受け取りたいユーザー名」でファイルを作成し、中身を「&転送先アドレス」で記述します。/var/qmail/alias/で各エイリアスを作成した要領で(第1回 qmailによるSMTPサーバの構築)、指定されたバーチャルドメイン専用の「alias」ディレクトリを1ユーザーのホームディレクトリに作成できるというわけです。すなわち、/var/qmail/aliasでできることがそのまま使えます。

 例えば、実在しないユーザーをまとめて代行受信する「キャッチオールアカウント」を使えるようにするには、.qmail-defaultファイルを用意すればいいことになります(第4回 メーリングリストの構築と運用(前編))。バーチャルドメインあてに来た、実在しないユーザー(すなわち「~/mail_user/.qmail-ユーザー名」ファイルが存在しない)のメールをuser3@atmarkit.co.jpで代行受信させるには次のようにします

&user3@atmarkit.co.jp
~/mail_user/.qmail-default

 /var/qmail/aliasでできることがバーチャルドメインでそのまま使えるということは、/var/qmail/aliasで用意しなければならなかった.qmailファイルを、同じように作成しておく必要性があるということを意味します。最低限、.qmail-postmasterや.qmail-rootを用意しておきましょう。単に、/var/qmail/alias下の同名ファイルにシンボリックリンクを張るだけでも構いませんし、バーチャルドメインの管理者を指定しておくというのも悪い選択ではありません。

特定ユーザーのみの場合

 virtualdomainsファイルは、次のように書くこともできます。

virtual_user@virtual_domain:user

virtual_domain バーチャルドメインを含んだメールアドレス
user ユーザーを指定

 先の例で使用した「user2@atmarkit.jpをuser2@atmarkit.co.jpに転送」の場合、virtualdomainsファイルは次のように記述することもできます。

user2@atmarkit.jp:mail_user
/var/qmail/control/virtualdomains

 .qmail-user2ファイルを同じように、~mail_user/ディレクトリ下に作成します。

&user2@atmarkit.co.jp
~mail_user/.qmail-user2

 2つのvirtualdomainsの書き方から分かるのは、「:」の前後で指定されたキーワードはuser/domainのくくりに関係なく、「:」の前で指定されたキーワードと送られてきたアドレスが後方一致する場合、メールアドレスに「:」後のキーワードを加えた拡張アドレス(第4回 メーリングリストの構築と運用(前編))に書き直し、ローカル配信に切り替えるということです。つまり、virtualdomainsファイルの記述が「suffix:prefix」で指定されている場合にuser4@suffixあてのメールが配信されてくると、アドレスを「prefix-user4@suffix」に書き直してローカル配信に切り替えます。

 prefix-user4は拡張メールアドレスとして、prefix/ディレクトリ下の.qmail-user4ファイルの制御下に入ります。それを応用して、prefixにあらかじめ拡張アドレスを指定しておいたらどうなるでしょうか。

atmarkit.jp:mail_user-control1
.atmarkit.jp:mail_user-control1
/var/qmail/control/virtualdomains

 この場合、user5@atmarkit.jpあてに来たメールは、あて先がmail_user-control1-user5@atmarkit.jpに書き換えられることになります。すると、~mail_user/の.qmail-control1-user5ファイルで転送先を指定すればいいことになります。一見複雑な作業をしているように見えるこの方法には、メリットがあります。

 まず、virtualdomaisファイルを用いたバーチャルドメインでは、管理者が2つのバーチャルドメインを管理する場合、同じバーチャルユーザーを別々の方法で制御することができません。例えば、user6@atmarkit.jpとuser6@atmarkit.co.jpをバーチャルドメインメールとして使用して、両ドメインともmail_userユーザーで管理し、かつuser6@atmarkit.jpはtest1@example.jpへ転送し、user6@atmark.co.jpはtest2@example.jpへ転送しなくてはいけない場合です。いままでの方法では次のような記述が考えられます。

atmarkit.jp:mail_user
.atmarkit.jp:mail_user
atmarkit.co.jp:mail_user
.atmarkit.co.jp:mail_user
/var/qmail/control/virtualdomains

 この場合、user6@atmarkit.jpアドレス用に.~mail_user/qmail-user6ファイルを「&test1@example.jp」の内容で作成します。では、user6@atmarkit.co.jpアドレス用の~mail_user/.qmail-user6ファイルはどうなるでしょうか? すでに使用されているため、test2@example.jpへ転送するすべがありません。

 複数のバーチャルドメインを1人のユーザーに管理させ、それぞれのバーチャルドメインのユーザーを独立して定義する場合は、prefixに拡張アドレスを使用します。今回の例では、

atmarkit.jp:mail_user-control1
.atmarkit.jp:mail_user-control1
atmarkit.co.jp:mail_user-control2
.atmarkit.co.jp:mail_user-control2
/var/qmail/control/virtualdomains

とし、メールアドレス「user6@atmarkit.jp」は~mail_user/.qmail-control1-user6ファイル、メールアドレス「user6@atmarkit.co.jp」は~mail_user/.qmail-control2-user6ファイルを使って制御すれば、目的を果たすことができます。

バーチャルドメインとバーチャルユーザー

 以上が、virtualdomainsファイルを使ったバーチャルドメインメールの構築法です。ここで、「この方法ではあらかじめ何らかのメールアドレスを持っていることが最低条件になるのでは?」と思われた方、正解です。ここまでは、バーチャルドメインメールをいかに転送させるかという観点で説明してきました。それがqmailでバーチャルドメインを扱ううえでの動作原理だからです。

 しかし、/etc/passwordによる認証やほかのメールサーバに依存することなくユーザーを定義する、つまり「FTPやtelnetは要らないからメールだけ使えるユーザーをバーチャルドメインごとに作りたい!」という要求もあるでしょう。現状のqmailで、そこまで可能でしょうか? まず、メールボックスの振り分けが可能かどうかから見ていきましょう()。

注:バーチャルドメインごとに定義される、メールだけ使えるユーザーを以降「バーチャルユーザー」と呼ぶことにします。

 バーチャルドメインあてに来たメールの最終的な制御には、.qmailファイルを使用します。.qmailファイルは単に転送先を指定するだけでなく、ローカルのファイルや個別のMaildirに配信することも可能です。user2@atmarkit.jpあてのメールを~mail_user/Maildir.user2/に保存する場合は、次のように.qmail-user2ファイルを作成します。

./Maildir.user2/
~mail_user/.qmail-user2

 次に、mail_user権限でMaildir.user2ディレクトリをMaildir形式で作成します。

$ /var/qmail/bin/maildirmake Maildir.user2

 この作業をrootで行う場合は、

# /var/qmail/bin/maildirmake Maildir.user2
# chown -R mail_user Maildir.user2

として、オーナーを変更することをお忘れなく。

 Mailbox形式で保存する場合は、.qmailの中身を変えます。

./Mailbox.user2
~mail_user/.qmail-user2

 Mailboxファイルは、最初のメールが配送されたときに自動で作成されます。

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。