Debian

Postfix STARTTLS 僅在埠 25 上

  • December 11, 2021

我想在埠 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:

高度讚賞幫助!

SMTPS 表示基於 TLS 的 SMTP,就像 HTTPS 一樣。所以首先建立一個 TLS 連接(沒有回退),然後啟動 SMTP。就像沒有人期望 HTTP 埠 80 上的 HTTPS 一樣,您也不應該期望任何連接到您的 SMTP 服務的人都會發送 TLS 請求。因此,如果您強制實施 TLS,則埠 25 上與伺服器的所有連接都可能會失敗!

STARTTLS 使加密成為可選。首先,建立一個正常的、未加密的 SMTP 連接,然後伺服器宣布它可以升級到 STARTTLS(使用所謂的 SMTP 擴展)。如果伺服器也支持 STARTTLS(並且已啟用),則客戶端請求升級到 TLS。

在 Postfix via 中啟用了 SMTPS(基於 TLS 的 SMTP)smtpd_tls_wrappermode=yes,您將其設置為 smtp 服務,因此在埠 25 上。如上所述,建議這樣做。

我想引用Bettercrypto的論文 Applied Crypto Hardening 關於這個問題的部分內容master.cfmain.cf。您也可以查閱它,因為您可能有一些設置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

我們沒有在埠 25 上為 TLS 設置任何新內容,因為main.cf我們只需要其中的預設值。

引用自:https://serverfault.com/questions/676742