OpenLDAP活用術

 このドキュメントはドラフト版です。予告無く内容が修正されたり、内容が間違っていたりすることがあります。
 また、間違い箇所を見つけたら、ご連絡いただけると幸いです。

 
 

PostfixでSMTP認証とVirtualドメイン(前編)

 Postfixを使ってVirtualドメインと連携したSMTP認証環境を構築します。ユーザー情報の管理は一括してLDAPサーバにお任せです。

 PostfixでLDAPを使ってSMTP認証を構築する方法は、 man saslauthd や Cyrus-saslのソースに付属の LDAP_SASLAUTHDファイルにそのまま載っていますので、割とスムーズにことが運ぶと思いますが、問題はVirtualドメインとの連携です。UNIX アカウントを使うのではなくVirtualドメインのユーザーとしてSMTP認証を利用するには一工夫必要になります。

  • システム情報
    • 認証局サーバ
      ホスト名root.aineas.net
    • LDAPサーバ
      ホスト名ldapserver.aineas.net
      ポート番号389(STARTTLS対応), 636(LDAPS)
    • SMTPサーバ
      ホスト名(本体名)mailserver.aineas.net
      バーチャルドメイン名mail2.aineas.net
      ポート番号25(STARTTLS対応), 465(SMTPS)

Cyrus-saslインストール

Cyrus-saslのビルドと再インストール

 デフォルトのRPM版Cyrus-saslは残念ながらLDAPをサポートしていません。一旦ソースRPMを拾ってきてSPECファイルを修正した後再度ビルドしてからインストールします。既にインストールされている場合は、上書きする必要があります。
 また、Cyrus-saslのビルドに際して、必要になるパッケージがありますので、これを最初にインストールします。(openldap-develは既にインストールされているものとします)
Exec

# apt-get install db4-devel
# apt-get install gdbm-devel
# apt-get install pam-devel
# apt-get source cyrus-sasl
# rpm -ivh ./cyrus-sasl*src.rpm
# cd /usr/src/vine/SPECS/


 SPECファイルは、/usr/src/vine/SPECS/cyrus-sasl-vl.spec ファイルになります。これを編集し、以下のようにバージョン2系のconfigureに --with-ldap オプションを追加してください。(バージョン2.1.18のSPECファイルでいうと、156行目から始まるconfigureです)
Edit

%configure \
        --enable-static --with-pic --enable-shared --disable-java \
        --with-plugindir=%{_plugindir2} \
        --disable-krb4 \
        --with-rc4 \
        --with-ldap \
        --with-dblib=berkeley \
        --with-saslauthd=/var/run/saslauthd --without-pwcheck \
        --with-devrandom=/dev/urandom \
        --enable-anon \
        --enable-cram \
        --enable-digest \
        --enable-plain \
        --enable-login
        # --enable-auth-sasldb -- EXPERIMENTAL

 修正が済んだらビルドします。
Exec

# rpmbuild -bb cyrus-sasl-vl.spec


 コンパイルが終わると、/usr/src/vine/RPMS/i386/ 以下にCyrus-saslのRPMパッケージが出来上がっていますので、これをインストールします。既にインストールされている場合もありますので、--forceオプションを追加しておきます。
Exec

# cd /usr/src/vine/RPMS/i386
# rpm -ivh --force cyrus-sasl*.i386.rpm

 インストールが完了したら、次はsaslauthdの設定に移ります。

saslauthd

LDAPサーバ 証明書のコピー

 LDAPサーバとの通信の為に、LDAPサーバの秘密鍵と公開鍵が、メールサーバにも必要になります。(え、秘密鍵も?)
 LDAPサーバからldap.keyとldap.crtのファイルをコピーしてきて、/usr/share/ssl以下へコピーしてください。(/usr/share/sslディレクトリは、OpenSSLをインストールしていれば作成されているはずです。)

  • /usr/share/ssl/private/ldap.crt
  • /usr/share/ssl/certs/ldap.key

 秘密鍵は一般ユーザから読み取りできないようパーミッションを適切に設定してください。

saslauthdの設定

 Cyrus-saslの認証にはデーモンとして動作するsaslauthdを使います。他にPAM(map_ldap)などを使ってLDAPを利用する事も可能ですがsaslauthdに比べるといくぶん手間が掛かってしまいますのでここでは最も楽と思われるsaslauthdを選択します。

 まず、/usr/lib/sasl2/smtpd.confというファイルを作成し、以下の様に記述します。
Edit

pwcheck_method: saslauthd
mech_list: plain login


 次いで、/etc/sysconfig/saslauthdファイルを作成し、以下の様に記述します。
Edit

MECH=ldap
FLAGS="-O /etc/saslauthd.conf"


 更に、/etc/saslauthd.confを作成し、これにLDAPに関する情報を自分の環境に合わせて記述します。
Edit

ldap_servers: ldaps://ldapserver.aineas.net/         (1)
ldap_search_base: ou=users,dc=aineas,dc=net          (2)
ldap_filter: (&(mail=%u@%r)(smtpEnable=TRUE))        (3)
ldap_tls_cert: /usr/share/ssl/certs/ldap.crt         (4)
ldap_tls_key: /usr/share/ssl/private/ldap.key        (5)
ldap_tls_ciphers: HIGH                               (6)


 (1) LDAPサーバをURIで指定します。
 (2) サーチベースを指定します。
 (3) フィルタを指定します。ここでは mail属性に%u@%rがマッチし、且つsmtpEnableがTRUEである場合に真となります。
   (以前は%uだけでメールアドレスを表現していたんですけど、仕様が変わったようです)
 (4) LDAPサーバの公開鍵を指定します。
 (5) LDAPサーバの秘密鍵を指定します。
 (6) 暗号化方式の優先順位を指定します。暗号レベルでの指定も可能です。

 これ以上詳しいことは、Cyrus-saslのソースに付属のLDAP_SASLAUTHDを参照してください。

 

saslauthdの起動とテスト

 さて、いよいよsaslauthdを起動させます。
Exec

# /etc/rc.d/init.d/saslauthd restart

 ちゃんと動くかテストをしてみましょう。これにはtestsaslauthdという付属のコマンドを使います。
Exec

# testsaslauthd -u mimmim -r mail2.aineas.net -p secret
0: OK "Success."


 -uオプションはメールアドレスのユーザー名部分を指定します。-rオプションには、メールアドレスのドメイン部分を指定してください(この場合はホスト名になります。)。 -pオプションはパスワードです。ベタ書きですが、あまり気にしないでください。Success.と表示されればOKです。

 ところで、以前のバージョンでは、確か -u mimim@mail2.aineas.net と指定するだけで、-rオプションは必要なかったと思うのですが、今回のバージョンでは、なぜかrealm(レルム)部分の指定が必要になっていました。なぜ??

 また補足ですが、ここで紹介するシステムではバーチャルドメイン環境下での動作を想定していますのでユーザーアカウントには通常のuidではなく、UPN (ユーザープリンシパルネーム)を採用します。ユーザーIDを入力する際は特に明示していない限り username@domainname の形式だと思ってください。

 

aptから独自ビルドパッケージを除外

Cyrus-saslをaptで除外指定

 Cyrus-saslを独自にリビルドしてしまったので、aptにて自動アップデートしないように設定する必要があります。

 /etc/apt/apt.conf.dで、list-holds.confというファイルを作成し、以下のように記述します。
Edit

Hold
{
    "cyrus-sasl";
};


 apt-config dump で確認してみて、Holdの設定が反映されているならば、cyrus-saslが自動的にアップデートされることはなくなると思います。

次はPostfix本体の方の設定(OpenLDAP活用術 - SMTPサーバ構築(後編))に移ります。

 

 

コメント:

コメントスパム対策中です。投稿の際はこのキャラクターが登場する映画シリーズを一緒に答えてください。
この質問は2009/01/07 10:52に締め切られます。 
 

Return to OpenLDAP活用術


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-05-20 (日) 19:02:14 (597d)