ちょ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 を見てくれているようで、エラーがでなくなった。
あーすっきり。
