今回からは前回導入したFDSを使って,LDAP+メールサーバという組み合わせを実現してみましょう。
ご存じの方もいらっしゃるかもしれませんが,実はこの構成に関しては,2003年発売の『Software Design』4,5,6月号で「バーチャルドメインとLDAPで楽々システム管理」という記事を紹介していますので,もしバックナンバーが押し入れに残っているのであれば,そちらも参考にしてみてください。
なぜLDAPでメールサーバ?
一般的な参考書を元にメールサービスを構築した場合,おそらく新規ユーザのアカウントを登録する手順は
- useraddでOSにユーザを追加
- 必要に応じてsaslpasswd2でSMTP Auth用のパスワードを追加
といった形になると思います。しかし近年ではメールサーバが複数ドメインを管理するバーチャルドメインで運用されていることが一般的ですので,そのような場合には
- バーチャルドメイン用のSMTPアカウントを設定
- saslpasswd2でSMTP Auth用のパスワードを追加
- POP3/IMAP4用にバーチャルドメイン用のアカウント,パスワードを設定
のように,サービスごとにたくさんのデータや設定ファイルが必要になってしまい,あまり管理者にとって望ましくありません。後々各種ファイルの整合性を確認するにも骨が折れますし,一般ユーザが自身のパスワードを変更する,転送設定を行うにも不便なはずです。セールスの人間に「sshでログインしてpasswdコマンドでパスワードの変更を行ってください」と説明しても???です。
LDAPを活用すれば,全ユーザのメールアドレス情報,姓名,SMTP Auth/POP3/IMAP4パスワード,転送先アドレスなどをすべて一元管理することができます。また,その一元化された情報はPerlやPHPのような言語から簡単に検索,更新することができますので,ブラウザベースの専用管理コンソールを作るのもそれほど難しくありません。
ちなみに,最近ではpostfixadminを使ってPostfix+MySQLという組み合わせでバーチャルドメインを実現している例も多くあります。MySQLを使用することでデータを一元管理できる上,ブラウザベースの管理ツールが提供されていますので,バーチャルドメインを楽に実現したい場合はこちらを使用してみるのも手です。
しかし,今回はpostfixadminのような便利ツールに頼らず,あえて苦難の道を選択することで,各種ソフトウェアとLDAPの連携について学んでいきたいと思います。
必要なソフトウェア
メールサーバといっても,その中身はSMTPを処理するMTA,SMTP Authを司るライブラリ,POP3/IMAP4サーバなどさまざまなソフトウェアで構成されています。
LDAPに対応したMTAやPOP3サーバはいくつかあるのですが,筆者はMTAとしてPostfix,POP3/IMAP4用にはdovecotを推奨しています。SendmailもLDAPに対応させることはできますが,パフォーマンスがPostfixほどではありませんし,なにより設定が難解です。筆者も10年前にはSendmailの設定を行っていましたが,今となってはsendmail.mc,sendmail.cfの設定方法はほとんど忘れてしまいました(笑)。
また,パフォーマンスやセキュリティを考慮したQmailの場合,機能拡張のための各種パッチの管理が大変面倒なので,あえて使用する理由が筆者には見つかりません。
POP3/IMAP4サーバについては以前Courier-IMAPを紹介し続けてきたのですが,最近では設定もシンプルなdovecotを好んで使用しています。
LDAPに何を格納するか?
それぞれのソフトウェアで必要になりそうなLDAP属性について簡単に考えてみます。
- メールアドレス
- パスワード(SMTP Auth/POP3/IMAP4共通)
- 転送先アドレス
これ以外にも
- スマートホスト
- 不在応答
- メールフィルタ
など,いろいろな値をLDAP内に格納することができるのですが,非常に複雑になってしまいますので,今回は基本的なバーチャルドメイン設定のみに触れることにします。
メールボックスの場所は?
LDAP内に保存されるのはメールアドレスなどのルックアップデータベースと呼ばれるものであり,メール自体がLDAP内に格納されるわけではありません。もちろんMTA次第ではそのような実装も可能かもしれませんが,LDAPとの相性を考えるとあまり意味はありません。よってメールボックスは通常のファイルシステムで管理します。パスは
図1
/home/vmail/user@example.com/Maildir/ /home/vmail/example.com/user/Maildir/ /home/vmail/com/example/user/Maildir/
のように任意のディレクトリに設定することができるのですが,個人的には2番目の
図2
/home/vmail/example.com/user/Maildir/
という形式がわかりやすいと考えています。なお,メールの保存形式に関しては全メールが1ファイルとなったmbox形式,1メール1ファイルのMaildir形式がありますが,Maildir形式のほうがIMAP4と相性が良いためこちらを使用します。
ではメールサービスとディレクトリの関係について簡単にまとめておくと次のようになります。
- 外部から内部へメールが配送される場合
- user@example.com宛のメールをSMTPサーバが受信する
- LDAPサーバからuser@example.comの情報を検索し,メールボックスのパスを取得
- /home/vmail/example.com/Maildir/内にメールを保存
- また転送アドレスが見つかればそちらに転送
- 内部から外部へメールを配送する場合
- SMTPセッション中でユーザ名(メールアドレス)とパスワードを要求し,LDAPサーバに問い合わせ。正しい情報が見つかった場合に認証OKとみなす
- 認証OKであればメールをリレー
- POP3/IMAP4サーバからメールを取得する場合
- POP3/IMAP4サーバがユーザ名(メールアドレス)とパスワードを要求し,LDAPサーバに問い合わせ
- 正しく認証された場合はメールボックスのパスを返すようにし,正しいメールを表示できるようにする

