トップ 最新

かってきままな日々

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