我正在尝试完成配置位于我家路由器/防火墙后面的 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 更新会起作用。:)
是的。 :)