そろそろLDAPにしてみないか?

第13回LDAPで管理するメールサーバ

今回からは前回導入したFDSを使って、LDAP+メールサーバという組み合わせを実現してみましょう。

ご存じの方もいらっしゃるかもしれませんが、実はこの構成に関しては、2003年発売の『Software Design』4、5、6月号で「バーチャルドメインとLDAPで楽々システム管理」という記事を紹介していますので、もしバックナンバーが押し入れに残っているのであれば、そちらも参考にしてみてください。

なぜLDAPでメールサーバ?

一般的な参考書を元にメールサービスを構築した場合、おそらく新規ユーザのアカウントを登録する手順は

  1. useraddでOSにユーザを追加
  2. 必要に応じてsaslpasswd2でSMTP Auth用のパスワードを追加

といった形になると思います。しかし近年ではメールサーバが複数ドメインを管理するバーチャルドメインで運用されていることが一般的ですので、そのような場合には

  1. バーチャルドメイン用のSMTPアカウントを設定
  2. saslpasswd2でSMTP Auth用のパスワードを追加
  3. 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と相性が良いためこちらを使用します。

ではメールサービスとディレクトリの関係について簡単にまとめておくと次のようになります。

外部から内部へメールが配送される場合
  1. user@example.com宛のメールをSMTPサーバが受信する
  2. LDAPサーバからuser@example.comの情報を検索し、メールボックスのパスを取得
  3. /home/vmail/example.com/Maildir/内にメールを保存
  4. また転送アドレスが見つかればそちらに転送
内部から外部へメールを配送する場合
  1. SMTPセッション中でユーザ名(メールアドレス)とパスワードを要求し、LDAPサーバに問い合わせ。正しい情報が見つかった場合に認証OKとみなす
  2. 認証OKであればメールをリレー
POP3/IMAP4サーバからメールを取得する場合
  1. POP3/IMAP4サーバがユーザ名(メールアドレス)とパスワードを要求し、LDAPサーバに問い合わせ
  2. 正しく認証された場合はメールボックスのパスを返すようにし、正しいメールを表示できるようにする

FDSの起動確認

前回の記事でFDSのインストール方法を紹介しましたので、皆さんのサーバではFDSのプロセスがすでに起動していることと思います。もし起動していない場合は、次のようにしてディレクトリサービスと管理サーバを起動させてください。

図3
# /etc/init.d/dirsrv restart
# /etc/init.d/dirsrv-admin restart

OS起動時に自動的にFDSを起動させたい場合はchkconfigでサービスの登録を行っておきます。

図4
# /sbin/chkconfig dirsrv on
# /sbin/chkconfig dirsrv-admin on

FDSと管理サーバ

FDSには、ディレクトリサーバを簡単に設定するための管理サーバが付属していますが、この管理サーバを使って各種設定を行った場合、その内容は基本的にディレクトリサーバ自身の中にディレクトリエントリとして保存されます。OpenLDAPを設定する場合には、基本的な設定はslapd.confに記述して、設定を変更した場合はプロセスをリスタート、という手順を行ってきたのですが、FDSは設定をディレクトリ中に持つことにより、ディレクトリサーバを起動したまま各種パラメータの変更を行うことができます。ちなみに、今までの連載では触れてきませんでしたが、最近のOpenLDAPも同じような機能を有していますので、機会があればこの内容にも触れてみたいと思います。

管理サーバへの接続

管理画面を表示させるためにはfedora-idm-consoleコマンドを使用します。ユーザID、パスワード、管理URLを入力する必要がありますので、それぞれ次のように入力して先に進んでください。また、前回の記事で管理サーバのポート番号はランダムに割り当てられると記述しておりましたが、最近のFDSではポート番号のデフォルト値を9830に固定しているようでした。

表1 接続情報
ユーザ名 admin
パスワード secret(インストール時に設定したパスワード)
管理URL http://localhost:9830/(インストール時に設定したポート)

ちなみに、この管理コンソールクライアントはJavaで記述されているのですが、CentOS5にインストールされていたデフォルトのJava(/usr/lib/jvm/jre-1.4.2-gcj/bin/java)では各操作を行うたびにエラーが出力されてしまったため、java.sun.comよりJava Runtime Environment (JRE) 6 Update 7(jdk-6u7-linux-i586-rpm.bin)をダウンロードして別途インストールしておきました。これにより管理画面操作中にJava関連のエラーが表示されなくなった上にパフォーマンスも良くなりました。もし同じ症状が出る場合は試してみてください。

図5 Sun JDKのインストール
# ./jdk-6u7-linux-i586-rpm.bin
# alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_07/bin/java 1500 

管理画面のスクリーンショット

図6
図6
図7
図7

管理コンソールの基本操作

ディレクトリサーバの操作を行うためには、管理コンソール起動後、左側のメニューより「Directory Server (ホスト名)」をダブルクリックします。新たにウインドウが開きますので、基本的な操作はここから行うことになります。それぞれのタブでは以下のような操作を行うことができます。

表2
Tasksタブ サービスの起動、停止、ディレクトリバックアップ、リストア、証明書管理
Configurationタブ インデックスやレプリケーション、スキーマなどの設定
Directoryタブ ディレクトリエントリの検索や追加
Statusタブ 稼働状況の確認

まずはいろいろ遊んでみる前にバックアップを取っておいてください。Tasksよりバックアップを選択し、最新のバックアップを作成します。なお、このバックアップではバイナリファイルなどをそのままコピーしますが、⁠Export Databases」を選択するとテキスト形式のLDIFファイルでバックアップを作成することもできます。

試しにDirectoryタブの左側メニューよりドメイン名のツリーメニューから「People」を右クリックし、⁠New⁠⁠、⁠User」を選択してテストエントリを作成してみてください。この操作により、dn: ou=people,dc=bluecoara,dc=net以下にエントリを作成することができますが、先ほどのバックアップからリストアを行うと、このテストデータも無事削除されていることがわかると思います。

最後に

今回は、FDSと各種ソフトウェアとの連携についてお話しするつもりでしたが、とても1回で収まるボリュームではありませんでした。次回はFDSでのデータ操作、インデックスやスキーマ設定について紹介したいと思います。

おすすめ記事

記事・ニュース一覧