メールサーバに送信するぞ~

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 クライアントのメールメソフトからも無事送信ができた。 【ログの出力レベルを元に戻す】

ということで、送受信ともに認証ができるようになり、動作するというところまで完了。

ここまでは、間違ってたら動かないというだけなので気楽にできるところである。
これから細部の設定と詳細な動作確認に入るという訳だが、設定を間違ってセキュリティレベルが落ちているのに気がつかなかったり、踏み台にされるような設定になってしまったりと本当はこれからが大変で気を使うところでもある。