Postfix で SMTP Auth(LDAP編)

最終更新日:2006年09月14日

はじめに

概要

Postfix で Cyrus SASL を使った LDAP(Lightweight Directory Access Protocol) による SMTP Auth 環境を Cyrus SASL を使って作ってみた。

Dovecot SASL を使った環境の構築方法は、『Postfix で SMTP Auth(Dovecot SASL編)』参照。

構築した環境

名称 バージョン 備考
Solaris x86 10
Postfix 2.3.3 2006.09.05時点での最新版。
saslauthd
(Cyrus SASL)
2.1.21 今回は、CSWパッケージを使用した。
CSWパッケージについては、『Solarisへのフリーソフトのインストール方法』参照。

インストール

saslauthd のインストール

今回は、CSWパッケージを使用した。
# pkg-get -i saslauthd

Postfix のインストール

Postfix SASL Howto の和訳ドキュメントを参照して作業を進める。
$ make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/opt/csw/include/sasl" \
      AUXLIBS="-L/opt/csw/lib -R/opt/csw/lib -lsasl2"
$ make
# make install
※ Postfix 2.3.* から "-DUSE_CYRUS_SASL" も必要になったので注意。

設定

saslauthd の設定

詳細は、saslauthd(8) と Cyrus SASL ソースの saslauthd/LDAP_SASLAUTHD を参照。

saslauthd.init 変更

/opt/csw/etc/saslauthd.init を変更する。
MECHANISM=ldap

saslauthd.conf 作成

/opt/csw/etc/saslauthd.conf を作成する。
ldap_servers: ldap://ldap.example.com/
ldap_search_base: o=Example Limited, c=jp

認証のユーザIDに使用する属性はデフォルトでは "uid" だが、メールアドレスの "mail" を使用したい場合は以下のいずれかを試してみる。

[その1]
ldap_filter: mail=%u

[その2]
ldap_filter: mail=%U@%d
または
ldap_filter: mail=%U@%r

[その3]
ldap_filter: mail=%u
そして saslauthd.init に以下を追加
PARAMS="-r"

smtpd.conf 作成

/opt/csw/lib/sasl2/smtpd.conf を作成する。
pwcheck_method: saslauthd
mech_list: plain login

Postfix の設定

main.cf 変更

/etc/postfix/main.cf を変更する。
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
    permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_path = smtpd
smtpd_sasl_type = cyrus

postfix ユーザを sasl グループに登録

postfix ユーザが saslauthd のソケットにアクセスできるように sasl グループに登録する。

設定
# usermod -G sasl postfix

確認
# groups postfix
postfix sasl

起動と停止

Postfix より前に saslauthd を起動しておく。

saslauthd の起動と停止

起動
# /etc/init.d/cswsaslauthd start

停止
# /etc/init.d/cswsaslauthd stop

Postfix の起動と停止

この場では割愛。

動作確認

Postix のSASLプラグインタイプの確認

SMTPサーバでのSASLサポート
$ postconf -a
cyrus
dovecot
SMTP+LMTPクライアントでのSASLサポート
$ postconf -A
cyrus

saslauthd の認証確認

testsaslauthd コマンドで確認する。
# /opt/csw/bin/testsaslauthd -u ユーザID -p パスワード

成功すると、
0: OK "Success."
失敗すると、
0: NO "authentication failed"
となる。

saslauthd のログ出力

saslauthd は、LOG_AUTH facility で syslogd にログを渡している。
例えば、/etc/syslog.conf に以下のような設定をしてログを出力する。
auth.debug		/var/log/authlog

ログとその対処方法

構築時に遭遇したログとその対処方法

"-DUSE_CYRUS_SASL" の付け忘れ

ログの内容

/var/log/syslog に
postfix/smtpd[14421]: [ID 947731 mail.warning] warning: unsupported SASL server implementation: cyrus
postfix/smtpd[14421]: [ID 947731 mail.crit] fatal: SASL per-process initialization failed
postfix/master[14405]: [ID 947731 mail.warning] warning: process /usr/libexec/postfix/smtpd pid 14421 exit status 1
postfix/master[14405]: [ID 947731 mail.warning] warning: /usr/libexec/postfix/smtpd: bad command startup -- throttling

原因

Postfix 2.3.* から "-DUSE_CYRUS_SASL" も指定する必要がある。

対処方法

CCARGS に "-DUSE_CYRUS_SASL" も付けて make する。

ソケットにアクセスできない

ログの内容

/var/log/syslog に
postfix/smtpd[18727]: [ID 947731 mail.warning] warning: SASL authentication failure: cannot connect to saslauthd server: Permission denied
postfix/smtpd[18727]: [ID 947731 mail.warning] warning: SASL authentication failure: Password verification failed

原因

postfix ユーザが、/var/opt/csw/saslauthd/mux ソケットにアクセスできない。

対処方法

postfix ユーザを sasl グループに登録する。

統計値

ログの内容

/var/log/syslog に
postfix/anvil[14215]: [ID 197553 mail.info] statistics: max connection rate 1/60s for (smtp:192.168.100.56) at Sep  5 18:43:14
postfix/anvil[14215]: [ID 197553 mail.info] statistics: max connection count 1 for (smtp:192.168.100.56) at Sep  5 18:43:14
postfix/anvil[14215]: [ID 197553 mail.info] statistics: max cache size 1 at Sep  5 18:43:14

原因

統計値が出力されている。

対処方法

以下のパラメータなどを設定する時に参考にする値。
smtpd_client_connection_count_limit
smtpd_client_connection_limit_exceptions
smtpd_client_connection_rate_limit
smtpd_client_event_limit_exceptions
詳細は、和訳ドキュメントの『Postfix設定パラメータ』や『Postfixパフォーマンスチューニング』を参照。

ライブラリが見つからない

ログの内容

/var/adm/messages に
postfix/smtpd[18833]: [ID 702911 auth.error] unable to dlopen /opt/csw/lib/sasl2/libsasldb.so.2: ld.so.1: smtpd: fatal: libdb-4.2.so: open failed: No such file or directory

原因

ld.so が libdb-4.2.so シェアードライブラリを見つけられない。
今回構築した環境特有の問題。

対処方法

CSWbdb4 パッケージが入れた libdb-4.2.so があったので、とりあえずシンボリックリンクを作成してその場しのぎ。
# cd /opt/csw/lib/
# ln -s ../bdb4/lib/libdb-4.2.so libdb-4.2.so