かってきままな日々
2020-02-22 (Sa) [長年日記]
_ またメールが届かなくなった
ConoHa のメールサーバを使ってて2回め。
spark で gmail からテストメールを送信しても spark に届かない。
自作ツールで IMAP アクセスするとメールはある。 届いてるってことでちょっと安心。
じゃぁ spark の問題か…
spark にメールアカウントを設定しなおしてみたけど、 それでもメールが見れない。
gmail app にメールアカウントを設定してみたら、 ちゃんと見れた。さっきのテストメールもある。 ただ、一部 Subject: が切れてるっぽいメールもあるけど。
これきっと、ConoHa のメールサーバと spark との相性とか、 そういう問題だなぁ。どこかで例外が発生して、処理が中断したけど、 ユーザには見えないようにうまく(?)隠して、次回に期待、とか そういう感じだろう。
こんな頻繁に起きるなら、自分で立てた方がマシだ。
_ postfix 動作確認中のこと…
以前自前で立てていたメールサーバの設定は、バックアップ取っていたので、 それを元にメールサーバを構築。
25/tcp は問題ない。次は 587/tcp。
認証を試す。PLAIN しか許可してないので、
echo 'ユーザ名^@ユーザ名^@パスワード' | mewencode -b
で base64 を取得して、
AUTH PLAIN base64の結果
しかし通らず。
535 5.7.8 Error: authentication failed: authentication failure
journal には↓こんな感じ。
2月 23 00:41:43 shiro saslauthd[1045]: DEBUG: auth_pam: pam_authenticate failed: Authentication failure
2月 23 00:41:43 shiro saslauthd[1045]: : auth failure: [user=ユーザ名] [service=smtp] [realm=] [mech=pam] [reason=PAM auth error]
2月 23 00:41:43 shiro postfix/smtpd[1033]: warning: SASL authentication failure: Password verification failed
2月 23 00:41:43 shiro postfix/smtpd[1033]: warning: 〜[〜]: SASL PLAIN authentication failed: authentication failure
なのに、↓こっちは OK。
shiro:~ % testsaslauthd -u ユーザ名 -p パスワード -s smtp
0: OK "Success."
なんかおかしい…
/usr/lib/sasl2/smtpd.conf をいじって、log_level を 100 とかにしてみてもこれ以上は何も出ない。
mech_list に login を追加してみた。saslauthd と postfix を restart。こっちでやってみよう。
echo ユーザ名 | mewencode -b
echo パスワード | mewencode -b
それぞれ、
AUTH LOGIN
ユーザ名のbase64
パスワードのbase64
で送信。やっぱり失敗。
んーすごくおかしい…
でも testsaslauthd で問題ないんだから、何かやらかしてるとしか思えず…
postfix → saslauthd → pam_unix.so
こんな感じか。一つの切り分けとして、saslauthd が postfix から何を受け取っているのか知りたい。 おそらくユーザ名やパスワードを受け取ってるはず。
sudo /usr/bin/strace -f -o /tmp/log /usr/sbin/saslauthd -a pam
これで /tmp/log に saslauthd の動きが出力される。その状態で、もう一度 AUTH PLAIN
。
ざーっと眺めていって、あったあった。
1045 read(7, "\0\4", 2) = 2
1045 read(7, "ユーザ名", 4) = 4
1045 read(7, "\0\v", 2) = 2
1045 read(7, "パスワード\n", 11) = 11
1045 read(7, "\0\4", 2) = 2
1045 read(7, "smtp", 4) = 4
1045 read(7, "\0\0", 2) = 2
お、パスワードの後ろに \n
が。テキストなのか? いや、ユーザ名の方には \n
が付いてないな。
!?!?
あぁ、しまった…………… echo
に -n
付けるの忘れた。軒並み。
誤:
echo 'ユーザ名^@ユーザ名^@パスワード' | mewencode -b
正:
echo -n 'ユーザ名^@ユーザ名^@パスワード' | mewencode -b
これで AUTH PLAIN
したら、ちゃんと通りましたとさ。ちゃんちゃん。
またやってしまった... orz