Postfix SMTP SSL 配置:无法发送电子邮件,但可以使用 SSL 接收电子邮件

Postfix SMTP SSL 配置:无法发送电子邮件,但可以使用 SSL 接收电子邮件

我正在尝试完成配置位于我家路由器/防火墙后面的 postfix/dovecot 邮件服务器。我使用的是 Mint/Ubuntu 12.04。

我已经接近了。我可以通过 SSL 连接/检索电子邮件,但只有在未使用 SSL 时才能从客户端发送电子邮件,仅需用户名/密码。

如果我尝试在 /etc/postfix/main.cf 中使用“smtpd_tls_auth_only = yes”建立 SSL 连接,并且在我的客户端上启用了 SSL,那么我无法发送。

以下是我认为日志中(经过修改的)相关行以及一些注释。我进入的是奇数端口号。我的证书较旧,CN 不再与服务器匹配。(但如果这是个问题,为什么我能够使用它们进行 IMAP 检索?)

10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: 连接已建立
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: auto_clnt_close: 断开 private/tlsmgr 流
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: master_notify: 状态 0
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: name_mask: 资源
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: name_mask: 软件
10月18日 22:13:02 ghost postfix/smtpd[3342]: 从路由器连接[XXX.XX.180.81]

我希望有来自本地主机的连接,而不是我的公共 IP。不确定这里发生了什么。

10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: > router[XXX.XX.180.81]: 220 ghost.domain.net ESMTP Postfix (Ubuntu)
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: router[XXX.XX.180.81]: 502 5.5.2 错误:命令无法识别
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: router[XXX.XX.180.81]: 502 5.5.2 错误:命令无法识别
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: router[XXX.XX.180.81]: 500 5.5.2 错误:语法错误
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: smtp_get: EOF
...
10 月 18 日 22:13:02 ghost postfix/smtpd[3342]: 路由器 [XXX.XX.180.81] 出现 UNKNOWN 后失去连接

第一次尝试似乎结束了

下一次尝试实际上传递了证书信息但最终失败了。

10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 220 ghost.domain.net ESMTP Postfix
(Ubuntu)
10月18日 22:13:02 ghost postfix/smtpd[3339]:

上面的这一行让我感到困惑......'imac.home' 是电子邮件客户端的机器......

10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: match_list_match: 路由器:无匹配
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: match_list_match: XXX.XX.180.81: 无匹配
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-ghost.domain.net
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-PIPELINING
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-SIZE 10240000
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-VRFY
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-ETRN
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-STARTTLS
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-ENHANCEDSTATUSCODES
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250-8BITMIME
10月18日 22:13:02 ghost postfix/smtpd[3339]: > router[XXX.XX.180.81]: 250 DSN
10月18日 22:13:02 ghost postfix/smtpd[3339]: router[XXX.XX.180.81]: 220 2.0.0 准备启动 TLS
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 从路由器 [XXX.XX.180.81] 设置 TLS 连接
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: router[XXX.XX.180.81]: TLS 密码列表“aNULL:-aNULL:ALL:+RC4:@STRENGTH”
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: auto_clnt_open: 已连接到 private/tlsmgr
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 发送 attr 请求 = 种子
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 发送属性大小 = 32
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: private/tlsmgr: wanted 属性: status
10月18日 22:13:02 ghost postfix/smtpd[3339]: 输入属性名称:status
10月18日 22:13:02 ghost postfix/smtpd[3339]: 输入属性值: 0
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: private/tlsmgr: 所需属性:种子
10月18日 22:13:02 ghost postfix/smtpd[3339]: 输入属性名称:种子
10月18日 22:13:02 ghost postfix/smtpd[3339]: 输入属性值: CYbyt+Fx2lpkfU7NordArB5Snqm93U4t5J/YuWwf2xA=
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: private/tlsmgr: 所需属性:(列表终止符)
10月18日 22:13:02 ghost postfix/smtpd[3339]: 输入属性名称:(结束)
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:before/accept 初始化
10月18日 22:13:02 ghost postfix/smtpd[3339]: 从 21104A00 [21110E00] 读取 (11 字节 => -1 (0xFFFFFFFF))
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 从 21104A00 [21110E00] 读取 (11 字节 => 11 (0xB))
10月18日 22:13:02 ghost postfix/smtpd[3339]: 0000 16 03 01 00 a4 01 00 00|a0 03 01                 

证书数据

10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 009d -
10月18日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 读取客户端 hello A
10月18日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 写入服务器 hello A
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 写入证书 A
10月18日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 写入密钥交换 A
10月18日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 写入服务器完成 A
10月18日 22:13:02 ghost postfix/smtpd[3339]: 写入 21104A00 [2111E7B8] (1455 字节 => 1455 (0x5AF))

证书数据

          
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 05ac -
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 刷新数据
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 从 21104A00 读取 [21110E03] (5 字节 => -1 (0xFFFFFFFF))
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 从 21104A00 读取 [21110E03] (5 字节 => 0 (0x0))
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: SSL_accept:SSLv3 读取客户端证书 A 失败
10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 来自路由器 [XXX.XX.180.81] 的 SSL_accept 错误:连接丢失

...

10 月 18 日 22:13:02 ghost postfix/smtpd[3339]: 从路由器 [XXX.XX.180.81] 执行 STARTTLS 后丢失连接
10月18日 22:13:02 ghost postfix/smtpd[3339]: 与路由器 [XXX.XX.180.81] 断开连接

我有点不知道下一步该尝试什么。

休伯特。谢谢你的线索。我没有启用 CA 文件路径。我已经这样做了,并转换到新的证书文件,但错误仍然存​​在 - 突然断开连接。

这是我的 /etc/postfix/main.cf 文件(经过编辑)

# 请参阅 /usr/share/postfix/main.cf.dist 以获得更完整的注释
# 版本

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = 没有

# 附加 .domain 是 MUA 的工作。
append_dot_mydomain = no

# 取消注释下一行以生成“延迟邮件”警告
#delay_warning_time = 4h

# smtp 是来自 POSTFIX 的出站 #
smtp_use_tls = 是
smtp_sasl_mechanism_filter = 登录
smtp_sasl_auth_enable = 是
smtp_sasl_password_maps = 哈希:/etc/postfix/verizon
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# 斯科特的东西
smtp_sasl_security_options = noanonymous

# 一般的
中继主机 = [127.0.0.1]:50025

######################
myhostname = ghost.domain.net
mydomain = ghost.domain.net
myorigin = $myhostname
alias_maps = hash:/etc/aliases
别名数据库 = 哈希:/etc/aliases
#myorigin = /etc/mailname
mydestination = $myhostname localhost.$mydomain localhost $mydomain
#中继主机 =
我的网络 = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.0/24
#mailbox_command = procmail -a “$EXTENSION”
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/conf.d/01-mail-stack-delivery.conf -m "${EXTENSION}"
邮箱大小限制 = 0
收件人分隔符 = +
inet_interfaces = 全部
# 我的主机
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = 是
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = 是
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
#smtpd_tls_auth_only = 否
smtpd_tls_auth_only = 是
smtp_tls_security_level = 可能
smtpd_tls_security_level = 可能
smtp_tls_note_starttls_offer = 是
smtpd_tls_key_file = /etc/postfix/ghost.domain.net.key
smtpd_tls_cert_file = /etc/postfix/ghost.domain.net.crt
#smtpd_tls_cert_file = /etc/apache2/ssl/apache.pem
#smtpd_tls_key_file = /etc/apache2/ssl/apache.key
smtpd_tls_CAfile = /etc/postfix/ca.crt
smtpd_tls_loglevel = 3
smtpd_tls_received_header = 是
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

# 独特的
smtpd_use_tls = 是
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
inet_protocols = ipv4
home_mailbox = Maildir/
smtpd_sasl_type=dovecot
#-授权
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_authenticated_header = 是
smtpd_tls_mandatory_protocols = SSLv3,TLSv1
smtpd_tls_mandatory_ciphers = 中等

##
#smtpd_sasl_application_name = smtpd
#smtpd_sasl_type = dovecot
#smtpd_tls_wrappermode=是

答案1

您必须发布您的 main.cf 文件来帮助您。至少应包含以下内容以使 TLS 正常工作。当然,您需要有效的证书和密钥。

smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/private/xxx.key
smtpd_tls_cert_file = /etc/ssl/server/xxx.crt
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

添加

smtpd_tls_loglevel = 3

会帮助你了解哪里出了问题

答案2

我找到了答案。

我的电子邮件客户端是 Apple Mail,它仅支持 SSL,不支持 TLS。无论出于何种原因,这都会导致 Apple Mail 与我的服务器之间的连接断开,从而断开连接。这也解释了为什么 postfix 总是被无效命令“???”搞糊涂。

所以我使用 STARTTLS 从我的 Android 手机上进行了测试,结果很好。为了让我的家用电脑仍能连接,我在 /etc/postfix/main.cf 中将服务器更新为在 SASL 之前不需要 TLS。我想我可以安全地执行此操作,因为我在家里有路由器和防火墙。

smtpd_use_tls = 是 smtpd_tls_auth_only = 否

也许我即将安装的 OS X 更新会起作用。:)

是的。 :)

相关内容