平衡点


2013/12/12 [長年日記]

_ Sendmail の送信時の挙動?

前置き

ウチのメールサーバは postfix です. ちゃんとサーバ証明書を購入して,

smtpd_tls_security_level = may
smtpd_tls_recieved_header = yes

で動かしております. なので, 他所様のサーバからメールが届く際には, 他所様にその気があれば, STARTTLS での経路の暗号化が可能です.

ログを眺めていると gmail, outlook.com, なんかが TLS で配送して来ています. あとは東大数理なんかも.

で, ここ数日ちょっと困っていたのが

  • MX レコードに登録されていないサーバがメール配送を試みて
  • STARTTLS で TLS で接続しようとして
  • SSL_accept error from [サーバ名] で接続が切れて.

ということで, 某所からメールが届かない と言われました.

まあ, MX 無い時点で greylist 行きですが遅延すれこそ拒否はしていなかった訳で.

相手側のメールのログには

相手サーバ sendmail[PID]: [ID ZZZZZ mail.warning] \
  STARTTLS=client, error: connect failed=0, SSL_error=5, errno=0, retry=-1
相手サーバ sendmail[PID]: [ID ZZZZZ mail.notice] \
  ruleset=tls_server, arg1=SOFTWARE, relay=ウチのサーバ, reject=403 4.7.0 TLS handshake.

とあるそうです(タイムスタンプは消してます).

ちなみにウチは

ホスト名 postfix/smtpd[8090]: \
  SSL_accept error from 相手サーバ[IPアドレス]: 0
ホスト名 postfix/smtpd[8090]: \
  warning: TLS library problem: 8090:error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal error:s3_pkt.c:1256:SSL alert number 80:
ホスト名 postfix/smtpd[8090]: \
  lost connection after STARTTLS from 相手サーバ[IPアドレス]: 0

といった塩梅(タイムスタンプは消してます).

どうしよかと悩んでいたら

ありがとうございます. > @satoh_fumiyasu

smtpd_discard_ehlo_keyword_address_maps

というわけで(前置き長い). Postfix DSN Support を参考に.

  • /etc/postfix/main.cf

    smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/ehlo_selection

を追記

  • /etc/postfix/ehlo_selection

    ## disable STARTTLS for broken(!?) SMTP server
    WWW.XXX.YYY.ZZZ   silent-discard, starttls

として postmap かけて, postfix を再起動 してみました. 考えてみれば DSN も切っておいて良い, ような.

まとまりません

とりあえず某所からメールは届くようになったみたい. なので, まあ良しとする, として(いや, 良くないけどさ).

には「By default STARTTLS is used whenever possible.」とあるので, これで CAfile とか CApath とか設定していなかったら, handshake 絶対失敗しそうなんですけど.

わたしなんか間違っている...?