web-dev-qa-db-ja.com

ポート25でのみPostfix STARTTLS

ポート25でSTARTTLSを有効にしたいのですが、理由は不明ですが、ポート465でしか機能しません。

master.cf:

smtp      inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtp
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=no
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
#smtp      inet  n       -       -       -       1       postscreen
#smtpd     pass  -       -       -       -       -       smtpd
#dnsblog   unix  -       -       -       -       0       dnsblog
#tlsproxy  unix  -       -       -       -       0       tlsproxy
#submission inet n       -       -       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       -       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=no
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

main.cf:

smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_non_fqdn_hostname
smtpd_recipient_limit = 25
smtpd_tls_CAfile = /root/chain.pem
smtpd_tls_auth_only = no
smtpd_tls_cert_file = /root/cert.pem
smtpd_tls_key_file = /root/key.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
smtpd_use_tls = yes
tls_random_prng_update_period = 3600s
tls_random_source = dev:/dev/urandom

openssl s_client -connect hostname:25で証明書を確認しようとすると、次のエラーが発生します。

CONNECTED(00000003)
write:errno=104
no peer certificate available
No client certificate CA names sent
SSL handshake has read 0 bytes and written 308 bytes

ポート465ではすべてが正常に機能するため、証明書とCAチェーンは正しいです。

ログは言う:

postfix/smtp/smtpd[2623]: SSL_accept error
postfix/smtp/smtpd[2623]: warning: TLS library problem: 2623:error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol:s23_srvr.c:649:

ヘルプは大歓迎です!

4
JohnnyFromBF

SMTPSは、HTTPSと同様にTLS over SMTPを意味します。したがって、最初にTLS接続が確立され(フォールバックなし)、次にSTMPが開始されます。誰もがHTTPポート80でHTTPSを期待しているように、STMPサービスに接続する誰もがTLS要求を送信することを期待してはなりません。したがって、TLSを適用すると、ポート25上のサーバーへのすべての接続が失敗する可能性があります!

STARTTLSは暗号化をオプションにします。最初に、通常の暗号化されていないSMTP接続が確立され、サーバーは(いわゆるSTMP拡張を使用して)STARTTLSにアップグレードできることを通知します。サーバーがSTARTTLSもサポートしている(そして使用可能になっている)場合、クライアントはTLSへのアップグレードを要求します。

SMTPS(TLS経由のSMTP)がsmtpd_tls_wrappermode=yesを介してPostfixで有効になっている場合、それをsmtpサービスに設定し、ポート25に設定します。上記のように、これはnot推奨。

master.cfmain.cfの両方について、この問題について Bettercrypto の論文Applied Crypto Hardeningの一部を引用したいと思います。おそらくmain.cfにTLS使用の適切なセットアップを妨げているいくつかの設定があるため、それを参照することもできます。

main.cf

# enable opportunistic TLS support in the SMTP server and client
smtpd_tls_security_level = may
smtp_tls_security_level = may
# if you have authentication enabled, only offer it after STARTTLS
smtpd_tls_auth_only = yes

master.cf

smtp      inet  n       -       -       -       -       smtpd
submission inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt

main.cfのデフォルト値で十分なので、ポート25のTLSに新しいものを設定しません。

9
sebix