[Postfix] SMTP Auth for submission port (cyrus-sasl2 + BDB3)

| | トラックバック(1)

ちょwwwwwwおまwwwwwww 

とかばっかり言ってないで、たまには技術的なメモ。


巷では OP25B が適用され影響が出ているのでその対応。
対応が遅いかもしれないけどいろいろ理由はあるわけで(^^;;

環境
FreeBSD 4.11
Postfix-2.1.6

25/tcp では POP Before SMTP のみの送信許可を採用中
587/tcp(submission port)では、SMTP Auth での送信認証許可のみ受け付ける。
(当然ながら POP Before SMTP での送信許可は受け付けない)

今までよくやっていたのが、LOGIN PLAIN のみ対応で、saslauthd
を使い、DB登録なしで受信時と同じIDパスワードを使える方法。
今回は、sasldb に登録し、CRAM-MD5,DIGEST-MD5 にも対応する手法。


基本的に ports を利用しています(手抜き)
ports は cvsup してあるものとします(手抜き)
今日時点で、postfix-2.1.x の最新は2.1.6です。


/usr/ports/mail/postfix21 にて、


make install clean


で、SASL2、DB3、 TLS にチェック(TLSは今後使うかもということで今回は設定はしない)


/usr/local/lib/sasl2/smtpd.conf を以下のように書き換え。


pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: cram-md5 digest-md5 plain login


postfix reload (今回はバージョンアップでした)


main.cf の設定は省略します(手抜き)
master.cf ではコメントアウトされている submission で始まる部分を以下のように記述します。


submission inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_etrn_restrictions=reject
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

これで25/tcp(smtpd) でmynetworkとか許可してある場合でも許可されなくなる。


/usr/local/sbin/saslpasswd2 -c hogehoge


などとしてユーザの登録を行う。登録できたかどうかは、


/usr/local/sbin/sasldblistusers2 を実行。

内容を確認する。


/usr/local/etc/sasldb2 ができているはず。
あるいはsasldb2.db。


# ls -l /usr/local/etc/sasldb2
-rw-r----- 1 cyrus mail 49152 Aug 9 14:59 /usr/local/etc/sasldb2


sasldb2.db の場合は権限が、root:other、パーミッションが600になっているかもしれない。


# chown cyrus:mail sasldb2.db
# chmod 640 sasldb2.db


する必要がある。chown でなくて、chgrp mail sasldb2.db でも可。

これで 25番ポートと587番ポートのすみわけができたわけです。
めでたしめでたし。


# telnet localhost 587
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxx.xxxxxx.jp ESMTP Postfix
ehlo hoge
250-xxx.xxxxx.jp
250-PIPELINING
250-SIZE 102400000
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
quit
221 Bye
Connection closed by foreign host.
#

で、こんな平和な話は前座でして。
実は設定後以下のような送信ログが確認されました。

postfix/smtpd[67777]: warning: SASL authentication failure: no user in db
postfix/smtpd[67777]: E05CD11744E: client=xxx.xxxx.xxxxx.jp[xxx.xxx.xxx.xxx], sasl_method=CRAM-MD5, sasl_username=hogehoge

認証、そして送信はできるわけですが認証前に一度 warning が必ず出る。と。
実は同じ環境のサーバ2台でやってみたわけですが、2台目のサーバにはこの warning はでませんでした。

比べてみると、

warning が出たほう
# file /usr/local/etc/sasldb2.db
sasldb2.db: Berkeley DB 1.85 (Hash, version 2, native byte-order)

warning が出ないほう
# file /usr/local/etc/sasldb2
sasldb2: Berkeley DB (Hash, version 7, native byte-order)

というわけで sasldb2 の違いが影響ありそう、と思ったわけです。
同じ環境と思っていた(聞かされていた)けどちょっと違ったわけですね。
自分がインストールしたマシンではないのでだまされた気分です。。
DBのバージョンがあっていないために1回目はエラーになった模様。

postfix は前述のように、BerkeleyDB3 対応させているわけですが、
cyrus-sasl2 が対応していなかったと。

そこで、cyrus-sasl2 を作り直す。

/usr/ports/security/cyrus-sasl2 で、

# make WITH_BDB_VER=3 install

とし、新しい saslpasswd2 コマンドを実行してみると、sasldb2.db ではなく、sasldb2 が生成され、
postfix からの参照も、sasldb2 を見てくれているようで、エラーがでなくなった。

あーすっきり。

トラックバック(1)

このブログ記事を参照しているブログ一覧: [Postfix] SMTP Auth for submission port (cyrus-sasl2 + BDB3)

このブログ記事に対するトラックバックURL: http://suken.jp/~kazu/mt/mt-tb.cgi/296

BucksTechnicalAssistance (PukiWiki/TrackBack 0.3) - UBIT/ (2006年8月21日 10:56)

このブログ記事について

このページは、kazuが2006年8月 9日 14:59に書いたブログ記事です。

ひとつ前のブログ記事は「8/6 ひきこもり」です。

次のブログ記事は「8/12 帰省」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。