Postfixのsmtpsでinappropriate fallbackとか言われた話
概要
CentOS7+Postfix 2.10.1(+openssl-libs-1.0.1e-34.el7_0.6)とWindowsのThunderBird 31.3.0で接続したときに、smtpsがうまくいかなかった。
エラーログ的には以下の様なもの。
Jan 14 00:19:38 localhost postfix/smtps/smtpd[1234]: connect from ***.jp[***.***.***.***]
Jan 14 00:19:38 localhost postfix/smtps/smtpd[1234]: SSL_accept error from ***.jp[***.***.***.***]: -1
Jan 14 00:19:38 localhost postfix/smtps/smtpd[1234]: warning: TLS library problem: 1234:error:140A1175:SSL routines:SSL_BYTES_TO_CIPHER_LIST:inappropriate fallback:ssl_lib.c:1496:
Jan 14 00:19:38 localhost postfix/smtps/smtpd[1234]: lost connection after CONNECT from ***.jp[***.***.***.***]
Jan 14 00:19:38 localhost postfix/smtps/smtpd[1234]: disconnect from ***.jp[***.***.***.***]
抜粋すると
warning: TLS library problem: 1234:error:140A1175:SSL routines:SSL_BYTES_TO_CIPHER_LIST:inappropriate fallback:ssl_lib.c:1496:
これ。
まとめ
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
このように指定したらなおった。
あるいは、TLSv1だけ書くのでもよさそうだが、こちらが今ドキの書き方である。(後述のドキュメント参照)
説明
DovecotはちゃんとTLSできたけど、PostfixだけうまくTLSの接続がいけなかった。
ログの単語だけ見て、Cipherの種類をかえたらいけるかなとおもったけど、Postfixでそこらへんいじるの聞いたことないし、ほぼ同じ設定でCentOS5だと動いたからOpenSSL周りだろうなーと思い、とりあえず周辺であるsmtpd_tls_mandatory_protocolsをごちゃごちゃいじったらなおった。
smtpd_tls_mandatory_protocolsはmain.cfなどで指定できる
http://www.postfix.org/postconf.5.html#smtpd_tls_mandatory_protocols
TLSv1は相当昔にできたものだし、それにSSLv3はPOODLEで滅んでいるので実際このようにすべきだが、お客様のクライアントが異常に古いのはよくある話なので、これでクレームが付かないかが怖い。
あとがき
カッとなってCentOS7をいれると、やっぱりまだ慣れなくてめんどう。