我正在尝试从服务器发送电子邮件。在我的本地计算机上进行测试工作正常,但在我的生产 Ubuntu 服务器上,网络服务器在尝试发送电子邮件时失败。
我使用 GMail 作为我的 SMTP 提供商,问题似乎是生产服务器不允许访问 Google SMTP 服务器。
以下命令在我自己的机器上建立了成功的连接,但在服务器上失败:
$ openssl s_client -crlf -connect smtp.gmail.com:465
connect: Connection refused
connect:errno=111
我尝试了各种组合,以防iptables
端口关闭。我也尝试过使用 禁用防火墙ufw disable
。两者都没有给我带来任何成功。
更新:
telnet smtp.gmail.com 465
输出:
Trying 74.125.143.108...
Trying 74.125.143.109...
Trying 2a00:1450:4010:c04::6c...
telnet: Unable to connect to remote host: Network is unreachable
openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:465
给我:
connect: Connection refused
connect:errno=111
此外iptables-save
输出:
# Generated by iptables-save v1.4.12 on Thu Aug 21 13:06:19 2014
*mangle
:PREROUTING ACCEPT [16698:11267219]
:INPUT ACCEPT [16698:11267219]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [13015:16282858]
:POSTROUTING ACCEPT [13015:16282858]
COMMIT
# Completed on Thu Aug 21 13:06:19 2014
# Generated by iptables-save v1.4.12 on Thu Aug 21 13:06:19 2014
*nat
:PREROUTING ACCEPT [1421:163021]
:INPUT ACCEPT [678:92411]
:OUTPUT ACCEPT [1339:83461]
:POSTROUTING ACCEPT [1339:83461]
COMMIT
# Completed on Thu Aug 21 13:06:19 2014
# Generated by iptables-save v1.4.12 on Thu Aug 21 13:06:19 2014
*filter
:INPUT ACCEPT [9933:3116585]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [12536:16243622]
-A INPUT -i lo -j ACCEPT
COMMIT
# Completed on Thu Aug 21 13:06:19 2014
答案1
IIRC,openssl s_client -connect localhost 默认使用 TLS。
从https://www.openssl.org/docs/apps/s_client.html:
-ssl2、-ssl3、-tls1、-no_ssl2、-no_ssl3、-no_tls1
这些选项禁用某些 SSL 或 TLS 协议。默认情况下,初始握手使用的方法应与所有服务器兼容,并允许它们根据需要使用 SSL v3、SSL v2 或 TLS。
不幸的是,有许多古老且损坏的服务器正在使用,它们无法处理此技术并且将无法连接。某些服务器仅在使用 -no_tls 选项关闭 TLS 时才工作,其他服务器仅支持 SSL v2 并且可能需要 -ssl2 选项。
您可能必须使用这些选项之一。
答案2
首先尝试与目的地的基本连接。
telnet smtp.gmail.com 587
如果这不起作用,您可能正在考虑防火墙问题。
检查您的 TLS 是否有效
openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587
如果第一个有效但 TLS 失败,您可能正在使用深度检查防火墙,该防火墙会阻止您使用 TLS(因为它无法检查 TLS 流量)。
对我来说,您的问题看起来更像是防火墙问题而不是电子邮件问题。
如果是的话,您需要描述您拥有的防火墙及其配置。如果它纯粹是 iptables(迄今为止您的描述似乎是可能的),请粘贴iptables-save
.
编辑
您的 iptables 配置为空。您所拥有的一条规则是无关紧要的,因为无论如何默认值都是 ACCEPT,因此我们可以安全地忽略 iptables。
因为您甚至无法建立 TCP 连接(telnet smtp.gmail.com 465),这意味着您被某些防火墙完全阻止,假设其他一切都正常,例如路由等。因为这是一个生产服务器,我认为可以安全地排除它。
因此,您现在需要与您的网络团队讨论或查看您的外部防火墙,因为您在端口 465 上被阻止。
只需检查端口 587 以及我上面的示例,看看该端口是否也被阻止。在这种情况下,您可能有一个非常严格的防火墙,仅允许相关的、已建立的端口 25。
您需要将 465 添加到阻止您的任何防火墙上允许的传出端口。
我不知道您的环境,但一些高安全性环境不允许从其网络内部进行加密,然后在防火墙上强制执行加密。您可能处于这种或类似的情况。