部屋の隅に置いてあるパソコンの熱気がすごくなってきた。いろんな機器が置いてあるので、それぞれの間を空けて風通しが良くなるようにしてみた。ついでに、恐る恐るパソコンケースの蓋を外してみると・・
メールサーバに送信するぞ~
VineLinux + postfix + postfixadmin + MySQL + Courier-IMAPでバーチャルユーザのメールサーバを構築中。
POP(IMAP)の認証エラーは直ったので今度はSMTP。
送信もAUTHの認証なしにすると問題はないので、こちらも認証に限って調査。
【詳細なログを出力するようにauthdaemonrcの記述を変更する】
# vi /etc/authlib/authdaemonrc
DEBUG_LOGIN=0
↓
DEBUG_LOGIN=1若しくはDEBUG_LOGIN=2に変更
【ついでにmain.cfを変更してログの追加】
debug_peer_list = 192.168.1.xx (xxは接続する端末の端末のアドレス)
【authdaemond、postfixを再起動し、設定を有効にする】
# /etc/init.d/courier-authlib restart
# /etc/init.d/postfix restart
reloadでよい場合もあるが、所詮他人の作ったプログラム、どういう仕様で動いとるのかわからん。
reloadで大丈夫とマニュアルに書いてあっても条件が違ってるかも知れんし。
また、デバッグ環境ならサービスは中断しようがかまわん。
それに一番の問題は、トラブルを抱えているときはとかく先入観が入りがちで他に気が回らないことが多い。(特に私の場合)
で、restartしなくちゃならん変更を加えていても..アラッという凡ミスも起こしやすくなる。
ということで、設定と確認を繰り返している時はreloadよりrestartがお勧め..とワシは密かに思う..
【telnetで25番ポートにアクセスし、エラーを出す】
# printf ‘test\0test\0testpass’|mmencode ←パスワードエンコード
dGVzdAB0ZXN0AHRlc3RwYXNz ←エンコードされたパスワード(後で使う)
# telnet 192.168.1.xx 25
Trying 192.168.1.xx…
Connected to 192.168.1.xx.
Escape character is ‘^]’.
220 hogehoge.com ESMTP unknown
ehlo 192.168.1.xx
250-hogehoge.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth plain dGVzdAB0ZXN0AHRlc3RwYXNz ←上でエンコードしたもの
535 5.7.0 Error: authentication failed: authentication failure
【ログを見る】
(一部省略、ドメイン名等は変更してますが..こんな感じ)
connect from unknown[192.168.1.xx]
match_hostname: unknown ~ 192.168.1.0/24
match_hostaddr: 192.168.1.xx ~ 192.168.1.0/24
> unknown[192.168.1.xx]: 220 hogehoge.com ESMTP unknown
watchdog_pat: 0x80a7868
< unknown[192.168.1.xx]: ehlo 192.168.1.xx > unknown[192.168.1.xx]: 250-hogehoge.com
> unknown[192.168.1.xx]: 250-PIPELINING
> unknown[192.168.1.xx]: 250-SIZE 10240000
> unknown[192.168.1.xx]: 250-VRFY
> unknown[192.168.1.xx]: 250-ETRN
> unknown[192.168.1.xx]: 250-AUTH PLAIN LOGIN
match_list_match: unknown: no match
match_list_match: 192.168.1.xx: no match
> unknown[192.168.1.xx]: 250-AUTH=PLAIN LOGIN
> unknown[192.168.1.xx]: 250-ENHANCEDSTATUSCODES
> unknown[192.168.1.xx]: 250-8BITMIME
> unknown[192.168.1.xx]: 250 DSN
watchdog_pat: 0x80a7868
< unknown[192.168.1.xx]: auth plain dGVzdAB0ZXN0AHRlc3RwYXNz xsasl_cyrus_server_first: sasl_method plain, init_response dGVzdAB0ZXN0AHRlc3RwYXNz xsasl_cyrus_server_first: decoded initial response test warning: SASL authentication failure: Password verification failed warning: unknown[192.168.1.xx]: SASL plain authentication failed: authentication failure > unknown[192.168.1.xx]: 535 5.7.0 Error: authentication failed: authentication failure
フ~ン、どうやらSASLの認証でパスワードを比較するときにエラーとなっている様子。
ウ~ム、どうしてSASLが認証やっとるんじゃ、authdaemonの仕事じゃないか..
sasldbなんかにユーザ、パスワードなんぞ入っとらんぞな。
【設定ファイルを見直す】
/usr/local/lib/sasl2/smtpd.conf
→pwcheck_method: authdaemondとその他諸々
/etc/postfix/main.cf
→関係することろ (おおざっぱになってきた..)
【authdaemond、postfixを再起動し、設定を有効にする】
【再び動作確認とログの確認を行う】
OKとなったようだ・・凡ミスでしたが。
(ログは一部省略しドメイン名等は変更してますが..こんな感じ)
postfix/smtpd[2005]: connect from unknown[192.168.1.xx]
postfix/smtpd[2005]: match_hostname: unknown ~ 192.168.1.0/24
postfix/smtpd[2005]: match_hostaddr: 192.168.1.xx ~ 192.168.1.0/24
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 220 hogehoge.com ESMTP unknown
postfix/smtpd[2005]: watchdog_pat: 0x80a76c8
postfix/smtpd[2005]: < unknown[192.168.1.xx]: ehlo 192.168.1.xx postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-hogehoge.com
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-PIPELINING
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-SIZE 10240000
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-VRFY
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-ETRN
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
postfix/smtpd[2005]: match_list_match: unknown: no match
postfix/smtpd[2005]: match_list_match: 192.168.1.xx: no match
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-ENHANCEDSTATUSCODES
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250-8BITMIME
postfix/smtpd[2005]: > unknown[192.168.1.xx]: 250 DSN
postfix/smtpd[2005]: watchdog_pat: 0x80a76c8
postfix/smtpd[2005]: < unknown[192.168.1.xx]: auth plain dGVzdAB0ZXN0AHRlc3RwYXNz
postfix/smtpd[2005]: xsasl_cyrus_server_first: sasl_method plain, init_response dGVzdAB0ZXN0AHRlc3RwYXNz
postfix/smtpd[2005]: xsasl_cyrus_server_first: decoded initial response test
authdaemond: received auth request, service=smtp, authtype=login
authdaemond: authmysql: trying this module
authdaemond: SQL query: SELECT username , password, “”, ‘10000’, ‘10000’, ‘/hogehoge/vuser’, maildir, “”, name, “” FROM mailbox WHERE username = “test@hogehoge.com”
Oct 11 13:59:47 M-net authdaemond: password matches successfully
クライアントのメールメソフトからも無事送信ができた。
【ログの出力レベルを元に戻す】
ということで、送受信ともに認証ができるようになり、動作するというところまで完了。
ここまでは、間違ってたら動かないというだけなので気楽にできるところである。
これから細部の設定と詳細な動作確認に入るという訳だが、設定を間違ってセキュリティレベルが落ちているのに気がつかなかったり、踏み台にされるような設定になってしまったりと本当はこれからが大変で気を使うところでもある。