このドキュメントはドラフト版です。予告無く内容が修正されたり、内容が間違っていたりすることがあります。
また、間違い箇所を見つけたら、ご連絡いただけると幸いです。
Postfixを使ってVirtualドメインと連携したSMTP認証環境を構築します。ユーザー情報の管理は一括してLDAPサーバにお任せです。
PostfixでLDAPを使ってSMTP認証を構築する方法は、 man saslauthd や Cyrus-saslのソースに付属の LDAP_SASLAUTHDファイルにそのまま載っていますので、割とスムーズにことが運ぶと思いますが、問題はVirtualドメインとの連携です。UNIX アカウントを使うのではなくVirtualドメインのユーザーとしてSMTP認証を利用するには一工夫必要になります。
| ホスト名 | root.aineas.net |
| ホスト名 | ldapserver.aineas.net |
| ポート番号 | 389(STARTTLS対応), 636(LDAPS) |
| ホスト名(本体名) | mailserver.aineas.net |
| バーチャルドメイン名 | mail2.aineas.net |
| ポート番号 | 25(STARTTLS対応), 465(SMTPS) |
デフォルトの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の設定に移ります。
LDAPサーバとの通信の為に、LDAPサーバの秘密鍵と公開鍵が、メールサーバにも必要になります。(え、秘密鍵も?)
LDAPサーバからldap.keyとldap.crtのファイルをコピーしてきて、/usr/share/ssl以下へコピーしてください。(/usr/share/sslディレクトリは、OpenSSLをインストールしていれば作成されているはずです。)
秘密鍵は一般ユーザから読み取りできないようパーミッションを適切に設定してください。
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を起動させます。
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 の形式だと思ってください。
Cyrus-saslを独自にリビルドしてしまったので、aptにて自動アップデートしないように設定する必要があります。
/etc/apt/apt.conf.dで、list-holds.confというファイルを作成し、以下のように記述します。
Edit
Hold
{
"cyrus-sasl";
};
apt-config dump で確認してみて、Holdの設定が反映されているならば、cyrus-saslが自動的にアップデートされることはなくなると思います。
次はPostfix本体の方の設定(OpenLDAP活用術 - SMTPサーバ構築(後編))に移ります。
Return to OpenLDAP活用術