postfixの設定を見直した

TL; DR

  • 自前のメールサーバから送ったメールがgmailで”暗号化されませんでした”と表示されるので、tls関係の設定を変更した
  • postfixの設定のプレフィクスには”smtp_”と”smtpd_”の2種類がある
  • postfixの設定のプレフィクスには”smtp_”と”smtpd_”の2種類がある (大事な事なので…以下省略

smtpとsmtpd

メーラ→メールサーバ(postfix)→gmailの流れでメールを送信するケースを考える。

このとき、メーラ→メールサーバ間が”smtpd_”の設定、メールサーバ→gmailが”smtp_”の設定が該当する。

よって、gmail向けにTLSを使う場合は、”smtp”の設定でtlsを有効にする。

設定

メーラとgmail向け両方にtlsを有効にするよう設定をした。 証明書はLet’t encryptで取得しているのでそれを用いる。証明書更新時にはpostfixの再起動が多分必要。

なお、smtp_tls_CAfileは指定をしないとgmailの証明書がuntrustedとなる(ログに記録される)。

しかし、ログに記録されるだけで、httpsのように警告が出たりはしない。

unstrustedの場合に動作を変更する場合には、smtp_tls_security_levelでverifyを指定し、smtp_tls_verify_certで検証項目を指定する。

ただし、この動作はインターネットにメールを配送するシステムのデフォルト動作としては適切ではない。

また、この設定は、tlsで送信してもいいし、しなくてもいいという日和見tlsであるが、tlsを強制する設定も、インターネットにメールを配送するシステムのデフォルト動作としては適切ではない。

smtp_tls_security_level = may
smtp_tls_CAfile = /etc/pki/tls/cert.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/<domain name>/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/<domain name>/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_protocols = !SSLv2, !SSLv3
smtpd_tls_loglevel=1
smtp_tls_loglevel=1
smtpd_tls_received_header = yes

なお、postfix 2.3以降では“smtp_use_tls”を使わず、smtp_tls_security_levelを使うことになっている。

パラメータの詳細はman 5 postconfで見れる。

ウェブに比べてメールシステムの暗号化・証明書の扱いってゆるゆるですね。 そのうちメールにもtls必須とかの流れになるんでしょうか。