Postfix STARTTLS 仅在端口 25 上

Postfix STARTTLS 仅在端口 25 上

我想在端口 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

主文件:

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:

非常感谢您的帮助!

答案1

SMTPS 表示通过 TLS 的 SMTP,就像 HTTPS 一样。因此,首先建立 TLS 连接(无回退),然后启动 SMTP。正如没有人期望 HTTPS 在 HTTP 端口 80 上使用一样,您也不应该期望连接到您的 SMTP 服务的任何人都会发送 TLS 请求。因此,如果强制使用 TLS,则端口 25 上到服务器的所有连接都可能会失败!

STARTTLS 使加密成为可选项。首先,建立一个正常的、未加密的 SMTP 连接,然后服务器宣布它可以升级到 STARTTLS(使用所谓的 SMTP 扩展)。如果服务器也支持 STARTTLS(并且已启用),则客户端会请求升级到 TLS。

Postfix 中的 SMTPS(SMTP over TLS)已通过 启用smtpd_tls_wrappermode=yes,您可以将其设置为 smtp 服务,因此在端口 25 上。如上所述,这是不是受到推崇的。

我想引用部分内容Bettercrypto的论文《应用加密强化》针对master.cf和都存在此问题main.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就是我们所需要的。

相关内容