October 09, 2004

SASL2とMySQLとの連携のトラブル [ Linuxの記録 ]

以前のエントリーで設定した感じでインストールしてみたが
実際やってみるとエラーばっかり・・・(鬱
(それでもPostfixAdminを使いたかった。)

あれからPostfixのmain.cfに下記のように設定してます
******************************
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = yanbe.net
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
*****************************

ローカル内での受信成功!
しかし別ドメインへのメール送信がまだ無理

warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: Permission denied

BerkeleyDBじゃねーーーw

SASLの設定を見てみる
# vi /usr/local/lib/sasl2/smtpd.conf

今気づいたが
sql_select: SELECT passwd FROM virtual_account WHERE id = '%u'
そもそもvirtual_accountなんてテーブルないよ・・・(T_T)

そう思いながらDBエンジンを明示的に指定
sql_engine: mysql
(PostgreSQLの場合sql_engine: pgsql)
postfixadminの場合の指定は
sql_select: SELECT password FROM mailbox WHERE username='%u@%r'

それでも試してみると
SASL LOGIN authentication failed・・・・・・・・・・・・・・・・
ん~っと悩んで、何気にコマンドを打ってみる
# sasldblistusers2
なんと!もしかしてこの結果に出てるユーザでなら・・・

・・・・いけた。

MYSQL呼んでないじゃーーーーーーーん!

もしかして・・・
# find / -name smtpd.conf
/usr/lib/sasl/smtpd.conf
/usr/lib/sasl2/smtpd.conf
/usr/local/lib/sasl2/smtpd.conf

なんじゃこりゃーーーーw

デフォルトがBerkeleyDBを呼ぶのを利用しログを見ながらmvコマンドでファイル名変更
結局、postfixが呼んでるのは
/usr/lib/sasl2/smtpd.conf

mysqlをログモードにして送信してみるとログが増えない・・・・・(T_T)

warning: SASL authentication failure: Password verification failed

降参しPostfix-JPのMLへ質問してみたが原因わからず

しかしMLでの質問で判明したが
PostfixからSASLを使いMySQLで認証するためには
MySQLのテーブル内ではMD5でcryptしたパスワードを格納していると「無理」!!!!

既にMD5でPOP3やIMAPも動作しちゃってます
今更、プレーンの危険な状態にするなんて無理です

そこで思いついたのがIMAPの認証を借りよう!

実はSASL2にはIMAP認証を利用するという手段があります。
# vi /usr/lib/sasl2/smtpd.conf
***************************************
pwcheck_method: saslauthd
mech_list: plain login
saslauthd_path: /var/run/saslauthd/mux
***************************************
saslauthd_pathはなくてもいいみたいですが
私はこれがないと
warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory
と怒られちゃいました

あとデフォルトではsaslauthdは起動されていないのでIMAP認証モードで起動させます
# saslauthd -O localhost -a rimap
デフォルトでsaslauthdがパスに通るようにインストールされると思いますが
コマンドが認識されない場合は
# find / -name saslauthd
で探してください

MySQLの時と違いすぐに
IMAPサーバへ接続されるログが確認できました
IMAPサーバ自体はMD5対応なのでようやくSMTP認証もMD5に対応できました

しかし、また問題がでてきました
ユーザID:test@example.com
パスワード:testpass
で認証できるような設定をしても
ログには
ユーザID:test
パスワード:testpass
という風に
アカウント名@ドメイン名が
@ドメイン名が消えてアカウント名のみになるのです
***************************************************************
↓MySQLのログ
041008 3:54:49 359 Query
SELECT username, password, "", '1001', '1001', '/usr/local/virtual',
maildir, "", name, "" FROM mailbox WHERE username = "test"
***************************************************************

調べていくとPostfix-JPのML内にてLDAP環境ですが同じ現象を確認できました
LDAPの場合、ldap_filter: mail=%u@%rという設定で逃げれますが
SASL2の場合はLDAPの設定は使えないので

一番最後に@を付加して認証してみる
ユーザID:test@example.com@
パスワード:testpass
でやってみました

結果:成功

最悪の場合の逃走ルートを確保できたが
やはりすっきりしたいのでさらに対策を探し中・・・

見つかり次第またエントリーします

↓SASLのsmtpd.conf設定項目表(英語) Options for Cyrus SASL
http://asg.web.cmu.edu/cyrus/download/sasl/options.html

トラックバック
コメント

初めまして。Imohataと申します。(詳しく知りたければWHOISでどうぞ)
最近cyrus-saslをMySQLに繋ごうとしてなかなかできず、postfix MLのyanbeさんのスレッドを見て全く同じ現象だったので簡単に諦めました。寝る間も惜しんでやるほどでもないもんで。
以前からrimapではやっていたのですが、こちらの@の問題は簡単です。もしまだ未解決でしたら参考に。
cyrus-saslが@を後ろから検索してその前後をusernameとrealmに分けているのです。sasldbの構造に合わせてるみたいです。
ソースを展開してrpm/SOURCES/cyrus-sasl-2.xx/lib/checkpw.cの583行目あたり、
*rtmp = '\0'; を
// *rtmp = '\0'; として再コンパイルすればOKです。
なお、当方のシステムはVine3.1、cyrus-saslはVineのです。
もしsyrus-saslとMySQLつながりましたらぜひ公開してください。
では。

Posted by: 芋畑耕作 : March 11, 2005 11:12 PM

おお!実は「@」の問題はまだ未解決だったんです。
やはりcyrus-saslの方が悪さしてましたか
次にいじるときにやってみていければ公開させていただきます

cyrus-saslをMySQLを利用するのは
試してません。
というのはやはりcryptしているパスワードをデータベースに入れれない
という致命的とも取れる仕様のせいです

あれからバージョンもあがってるので
次のサーバ構築するときにもう一度挑戦しようかと思ってます

もし実現しましたらメールで直接連絡いたします(笑)

この度は本当に貴重な情報ありがとうございました。

Posted by: yanbe : March 12, 2005 05:09 AM

もう解決されていますでしょうか?
@の件ですがsasalauthdのパラメータに-rをつけると...

Posted by: rashee : May 15, 2005 05:32 PM

探しものをしていると見つけました。sasalauthdのパラメータに-rを付けるのは、解決策ずばりでした。ちょっと嬉しくて足跡を残させてください。

Posted by: アセダイスケ : July 31, 2006 03:59 AM
コメントする









名前、アドレスを登録しますか?