WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

メールサーバーの構築 : バーチャルドメインの設定

今日は、バーチャルホストの設定を行います。メールをバーチャルホストで管理することで、実際のユーザー構成と関係なくメールアカウントを作成でき、より柔軟な運用が行えます。

hosteddomains にドメインを追加

hosteddomains"/etc/courier/locals" と同様にローカル配信されるドメインを記述するファイルです。locals に記述されたドメインのメールアドレスはドメイン名部分を除いた上でアカウントが検索されるのに対して、hosteddomains に記述されたドメインではメールアドレスそのままで検索されます。つまり、foo@example.com というメールアドレス宛のメールが送られてきた際、example.comlocals に記述されていた場合は foo というアカウント宛に配信されますが、hosteddomains に記述されていた場合は foo@example.com というアカウントに配信されるわけです。これにより、複数のドメインのメールアカウントを管理を実現しています。

hosteddomains の編集

"/etc/courier/hosteddomains" は標準では作成されていないかもしれません。存在しないときは新しく作成します。今回は、sourcewalker.com というドメインをバーチャルドメインとして扱い、sourcewalker.com のすべてのサブドメインはローカル配信するという変則的な設定をしてみました。 "locals", "hosteddomains" はそれぞれ以下のようになります。

locals

localhost
.sourcewalker.com

hosteddomains

sourcewalker.com

編集後に "makealiases""makehosteddomains" を忘れずに実行しましょう。

esmtpacceptmailfor.dir の作成

"sourcewalker.com""locals" から外してしまったので、このままでは "sourcewalker.com" のアカウント宛てのメールがリレーされません。つまり、外部のメールサーバーからのメールを受けることができません。そこで、"/etc/courier/esmtpacceptmailfor.dir" ディレクトリ以下にリレーを許可するドメインをリストアップしたファイルを作成します。ファイル名はなんでもいいのですが、とりあえず "default" としておきましょう。"locals""hosteddomains" の両方の内容を記述します。以下のようにして作成するのが手っ取り早いです。

cd /etc/courier
cat locals hosteddomains > smtpacceptmailfor.dir/default
makeacceptmailfor

バーチャルアカウント管理用のユーザー・グループを作成

バーチャルアカウントの管理用に、専用のユーザーとグループを作成します。ここでは両方とも sourcewalker という名前で作成します。

groupadd sourcewalker
useradd -g sourcewalker -m -s /bin/false sourcewalker

作成したら、それぞれの ID を "/etc/passwd""/etc/group" で確認しておきましょう。

バーチャルアカウントを作成

バーチャルドメインのアカウント管理には、いくつかの方法があります。userdb, MySQL, PostgreSQL, LDAP などが標準でサポートされています。ここではもっとも手軽で他にパッケージをインストールする必要がない、userdb を利用することにします。

userdb とは

userdbCourier 本体に含まれているアカウント管理データベースで、テキストファイルの "/etc/courier/authlib/userdb" を記述し、"makeuserdb" コマンドでバイナリにコンバートするというお馴染みの方法によって作成・管理します。また、補助ユーティリティーとして "userdb""userdbpw" の 2 つのコマンドが用意されています。

"/etc/courier/authlib/userdb" の各行は以下のような構成になっています。

アカウント名<tab>フィールド名=値|フィールド名=値...

行頭にその行で記述するアカウントを管理し、ひとつのタブに続けてそのパラメータを上記のフォーマットで記述します。フィールド名には以下のものがあります。

uidユーザー ID
gidグループ ID
homeホームディレクトリ
mailメールボックスのパス
shellログインシェル
quotaメールボックスの容量制限
systempwパスワード
pop3pwPOP3 アクセス時のパスワード
esmtppwSMTP アクセス時のパスワード
imappwIMAP アクセス時のパスワード

pop3pw, esmtppw, imappw は、省略すれば systempw が使用されます。

バーチャルドメインのアカウントを作成する

それでは、例として foo@sourcewalker.com というアカウントを作成してみましょう。まずはホームディレクトリとメールボックスを作成します。

mkdir /home/sourcewalker/foo
maildirmake /home/sourcewalker/foo/.maildir
chown -R sourcewalker:sourcewalker /home/sourcewalker/foo

次に、userdb にアカウントを追加します。ユーザーとグループの ID は仮に 100 にしていますが、実際には先ほど作成したアカウント管理用ユーザー・グループの ID を設定してください。

userdb foo@sourcewalker.com set uid=100 gid=100 home=/home/sourcewalker/foo
userdbpw -md5 | userdb foo@sourcewalker.com set systempw
(パスワードを入力)
makeuserdb

これで foo@sourcewalker.com のアカウントが作成されました。

Courier の再起動

ここまで設定したら、念のため Courier を再起動します。どの設定が再起動しないと反映されないかは、私は把握していません(^^;。たいていは起動中でも書き換えられると思います。

/etc/init.d/courier restart

動作チェック

昨日と同様、Thunderbird で動作チェックしてみましょう。アカウントの設定は以下のようにします。受信/送信ユーザ ID にドメイン名部分が必要なことに注意してください。

項目設定内容
アカウント名お好みで
メールアドレスuserdb に設定したアカウント名
受信ユーザ IDuserdb に設定したアカウント名
メール受信サーバ名メールサーバーの FQDN
メール受信サーバの種類POP3 または IMAP
送信ユーザ IDuserdb に設定したアカウント名
メール送信(SMTP)サーバ名メールサーバーの FQDN

これでメールサーバーの構築はいったん終了にします。メッセージ送受信の暗号化やより高度な IMAP の活用など、やりたいことは山ほどあるので、時間をみて試していこうかと思います。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles