[研究報告の目次に戻る]

オープンソースによるLDAPアカウント対応メールサーバの構築

笹森 圭

日本電気(株) 第1官庁システム開発事業部 第1文教システムグループ

k-sasamori@elsd.mt.nec.co.jp

概要

山梨大学総合情報処理センターの統合メールサーバ構築において、 メールアカウントをローカルに持たずに、LDAPアカウントを参照して機能するメールシステムを 構築した。MTAであるqmail、マルチドメイン対応アカウント管理ツールであるvpopmail、 LDAP対応imapサーバのcouier-imapのそれぞれ独自のLDAPスキーマおよびLDAP対応システムを 連携・統合するコード修正を行ない、実機にて動作確認とシステムの検証を行なった。 本研究報告ではこのシステム構築において、LDAPメールサーバとしての決定的ソリューションをめざすべく 作成した修正パッチと構築の概略手順を提示しながら、そのポイントおよび構築結果について簡単に述べる。

キーワード: qmail-ldap, vpopmail, tcpserver, daemontools, squirrelmail, qmailadmin, ezmlm

1. はじめに

LDAPが世間に登場してから久しいが、実際にLDAPをフル活用した事例はごく少数で、 ドキュメントについても実験的な事例は多く見かけるが、実践的なものはあまり 見受けられない。残念ながら枯れた技術としてLDAPが広く浸透するのは、 もう少し先のように思われる。 メールシステムについても同様で、メールシステムこそLDAPでユーザ管理するに最適な システムであると思われるが、またまだ広く活用されていないのが現状のようだ。
 メールシステムと言えば、しばらく前からポストsendmailとして注目されているのが qmailである。sendmailと比較したqmailの利点や弱点については、 改めてここで述べるほどではないが、残念ながらqmail本体にはLDAP対応コードは 入っていない。 しかしながら、qmail-ldapと呼ばれるパッチが、Andre Oppermann氏 (webpage: http://www.nrg4u.com/ )により公開され、 現在も大変意欲的にバージョンアップがされ、最短で月1回ペースで公開更新 がされている。
 ただし、sendmailやPostfixは本体自身でLDAP対応がされており、これだけでは、 無理にqmail-ldapを選択する必要はないのであるが、qmailには、 仮想メールアカウント・マルチドメイン対応の決定的とも言えるメール管理システム vpopmailが存在し、また、vpopmailには、Web経由でアカウント管理から メーリングリスト管理まで簡単に可能なqmailadminパッケージも存在する。
 vpopmailは標準でpop認証などをLDAPで行なうことができるが、残念ながら vpopmailで定義されるLDAPスキーマと、qmail-ldapが要求するそれとが 統一されておらず、また、imapサービスでよく利用されるcourier-imapも またこれらと独立した設計になっているため、スキーマを単純に共有し、 それぞれを協調して動作させることが現時点では困難になっている。
 そこで、本研究では、これらのソフトウェアによるLDAP対応コードを協調させ、 準決定的なLDAP対応メールシステムを目指すべくその第一歩として、 必要なコードを修正した追加パッチの作成および実機での動作確認をし、 その構築手順をまとめることを目標とした。 加えて、追加で必要になりそうな POP beore SMTP や SPAM対策など、 拡張機能と言える部分もできるだけ網羅した標準的・決定的といえる メールシステムをも視野に入れ、進めることにする。 本研究報告では、ソースに付属しているドキュメントや他のWebページに よく書かれているインストール手順のような自明な説明は本研究報告では割愛し、 そのポインタのみ示すこととする。

2. システム全体の概要

今回のメールサーバ構築に用いる主なソフトウェアの構成は図1のようになっている。 図中の各レイヤは依存関係を示しており、上位のソフトウェアが下のソフトウェア/概念 を利用しているか依存していることを示す。

qmail-fig1.png: All software layer image on ldap-mailsystem.

図1:LDAPメールシステム全体構成図

3. qmail,vpopmailに必要なソフトウェアのインストールと設定

3.1 daemontools

daemontoolは文字通り、unixのサービスであるdaemonを管理するためのツール群である。 稀にdaemonが何らかの原因で落ちて(=異常終了して)しまい、サービスが止まってしまう 事があるが、daemontoolを利用すると、管理中のdaemonを監視していて、 daemonが落ちた場合でも自動で起動しなおしてくれる。 その他の機能としては、サービスの制御、ログの収集および環境変数・資源制限が可能だ。 作者はqmailの作者でもあるD. J. Bernstein氏である。

3.2 ucspi-tcp(tcpserver)

外部との通信を行なうdaemonなどは、特定のTCP/UDPポートで待ち構えるために、 通常は inetd に頼るかまたは、すべて自前でソケットを作成して必要な通信処理をする。 IPアドレスによるアクセス制限をしたり、ログを特定のファイルに書き出したり 大体同じ処理を重複してしていることになる。そこで、この部分を分離独立させて 多くのサービスで共通して利用できるようにしたのが ucspi-tcp(tcpserver)である。

一般的にあまり知られていないようだが、pop3やimap4をSSL/TLS化したい場合、 いちばん簡潔で有効なのが、tcpserverにSSL/TLS対応パッチを適用する方法である。

3.3 必要な LDAPスキーマ定義と設定例

4. qmail,vpopmail および courier-imap のインストールと設定

4.1 qmailとvpopmail実行のためのユーザ・グループ作成

以下のようにユーザおよびグループを追加する。UID,GIDは重要である。 ここではqmailの.qmail-*ファイルとvpopmailの連携を密にするため、 (あまり薦められる方法ではないが、) aliasユーザとvpopmailユーザを同一UIDにしている。:

4.2 qmail+qmail-ldapのコンパイルとインストール

ここから、いよいよqmail+qmail-ldapのコンパイルとインストールとなる。

4.3 vpopmailのコンパイルとインストール

4.4 courier-imap

courier-imap は vpopmailが扱うバーチャルドメインに対応した pop3/imap4サーバである。 本研究では、pop3については、qmail-pop3dが対応しているAPOPを利用するため、imap4のみ利用する。

5. LDAPメールシステムの起動とその設定

各種ソフトウェアのコンパイルが終了したら、いよいよ設定して動かすわけであるが、 本研究では、設定ファイルのサンプルと設定のポイントのみを述べるに留め、 他の文献や付属ドキュメントに既に記載されてよく見受けられる内容については割愛することにする。

5.1 qmail-ldapの設定

5.2 tcpserver によるIPアドレス制限およびメールリレー許可の設定

5.3 daemontools による qmailデーモンの起動設定

5.4 SSL通信で使用する証明書の作成方法

6. LDAPメールシステム部分以外の周辺ソフトウェアについて

以下のソフトウェアは、qmailやvpopmailと一緒に使われることの多いものである。 これらはLDAP対応コードが無くとも独立して動く。ここでは簡単な紹介に留めることとする。

6.1 qmHandle

qmailのキュー: /var/qmail/queue/{info,mess,local,remote}を管理できるperlスクリプトである。

6.2 autorespond

autorespondは、vacationなどに相当する一定のメッセージを自動返信するツールです。 qmailadmin が 利用しています。

6.3 ezmlm + ezmlm-idx

ezmlm, ezmlm-idxは qmailの拡張アドレス(.qmail-username-*)を利用した メーリングリスト管理プログラムである。ezmlm-idx は オリジナルのezmlmに種々の拡張を施す パッチである。

6.4 qmailadmin

qmailadminは、vpopmailがサポートする仮想アカウントユーザ・マルチドメインのメールシステム やメーリングリストezmlmの管理がWebから実行できるC言語によるCGIプログラムである。

6.5 SquirrelMail

SquirrelMail は Webサーバ上のPHPスクリプトで動く、Webメールソフトウェアである。 大変完成度が高く、プラグインで機能を追加できるようになっている。 一部のプラグインの日本語化において若干不具合も見られるが、オープンソースでPHPなので 自由に修正・改造できるのが有難い。

7. まとめと展望

本研究により、ローカルアカウントを使用せず、 全てのユーザをLDAPアカウントに格納したメールサーバシステムを構築し、
実機にて稼動・動作確認することが出来た。 以下に、ここまでで構築・動作が確認できた基本的機能を項目としてまとめる。:

あわせて、構築できたLDAPメールサーバシステムのデータフロー図をまとめとして引用しておく。:

qmail-fig2.png: ldap-mailsystem mail dataflow.

図2:LDAPメールシステム メールデータフロー図

今後としては、以下の事項について、続けて実装と動作確認を行ないたい。:

以下、閑話休題的に、本研究にて気がついた点を述べたいと思う。

qmailのコードは比較的読み難い。例えば、ヌルポインタNULLも、ヌル文字 '¥0'も 同じ 0 と書かれているし、重要な変数も遠慮なく1文字変数名だったりする。 また、コメントも少ないほうといえるだろう。 このため、LDAP対応コードを修正するにも若干の苦労を要した。
ただし、セキュリティホールなどの 脆弱性が無いように、C標準ライブラリ/POSIX標準ライブラリをほとんど使用せず、 独自のライブラリを作成し利用している点は、特筆すべきであろう。 qmail-1.03がリリースされてから既に 6年が経過しようとしているのも驚嘆に値すると同時に、 qmailのセキュリティの高さを示すものと言えるだろう。

また、courier-imapのLDAP対応コードでは、いきなりフランス語でエラーメッセージを syslogに出力しており驚いた。別に多言語対応しているわけでなく、 ソースにフランス語でエラーメッセージが埋め込まれていた。豪快だ。 vpopmailでも、よくみるとコメントの英語のスペルもいくつかロシア風に間違っていたりする。 世界中のいろんな人がコードに参加しているというのを実感されられた場面であった。

日々更新や改良が意欲的に続けられているオープンソースでは、不具合がつきものである。 なぜか動かなかったり、完成度が中途半端に低かったりすることはよくあることだ。 ここで、市販のソフトウェアだと、開発元または販売元に問い合わせなければならず、時間も掛かるし 解決できないことがよくある。カスタマイズしたくてもできないことが多い。 ところが、オープンソースでは、なんと、ソースが読めさえすれば、自分で不具合箇所を発見できるし、 修正までできてしまう。カスタマイズも(ライセンスに従う限り)自由である。 昨今では、googleなどの検索エンジンを使うことにより、自分が遭遇している問題の解決策が あっさり見つかってしまうこともよくある。 当たり前のことではあるが、今回改めてオープンソースというものの重要性を再認識することになった。

最後に、本メールサーバシステムを構築・評価するに当たり、貴重な助言や実際の評価をして頂いた 山梨大学総合情報処理センターの皆様、 小職の所属する第1官庁システム開発事業部第1文教システムグループの諸先輩方、および、 今回利用させて頂いたソフトウェアをはじめとして、重要な役割をする各ソフトウェアを 無償にて公開しているオープンソースソフトウェアの作者に感謝する。

参考文献

  1. André Oppermann : "QLDAPINSTALL", http://www.nrg4u.com/qmail/QLDAPINSTALL , 2003.
  2. Henning Brauer : "Life With qmail-ldap", http://www.lifewithqmail.org/ldap/ , 2003.
  3. 与儀 丈二 : "qmailで作るメールサーバ徹底攻略",ソフトバンクパブリッシング, ISBN:4797320656, 2002.
  4. The OpenLDAP Project, 稲地 稔 和訳 : OpenLDAP 2.1 管理者ガイド, http://www5f.biglobe.ne.jp/‾inachi/openldap/admin/index-ja.html , 2004.

[研究報告の目次に戻る]