CentOS 7 Web 服务器安装了 postfix、dovecot 和 mailx。我已经能够与服务器建立 IMAP 连接,以便使用远程 Thunderbird 客户端读取收件箱邮件,但我无法建立 SMTP 连接来从 Thunderbird 发送电子邮件。当我进行取证时,我发现尝试的 SMTP 连接超时。 如何解决连接超时的问题,以便我可以通过服务器从 Thunderbird 发送电子邮件?
到目前为止,我的取证结果如下:
hostname
在服务器的终端中输入会返回mydomain.com
。
nano /usr/lib/firewalld/services/smtp.xml
表示smtp端口是25
在公共区域中激活 smtp 服务会导致firewall-cmd --list-all
:
public (default, active)
interfaces: enp3s0
sources:
services: dhcpv6-client imaps openvpn smtp
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:
但是当我尝试从我的 devbox 远程登录到远程 CentOS 7 服务器时,我得到以下结果。打字的telnet mydomain.com 25
结果是:
Trying my.SERVER.ip.addr...
telnet: connect to address my.SERVER.ip.addr: Connection timed out
然后输入telnet smtp.mydomain.com 25
结果:
Trying my.SERVER.ip.addr...
telnet: connect to address my.SERVER.ip.addr: Connection timed out
另外,输入openssl s_client -CApath /etc/ssl/certs -starttls smtp -port 25 -host smtp.mydomain.com
结果为:
socket: Connection timed out
connect:errno=110
同样,打字openssl s_client -CApath /etc/ssl/certs -starttls smtp -port 25 -host mydomain.com
也导致:
socket: Connection timed out
connect:errno=110
我输入nano /etc/postfix/main.cf
开始检查配置,但没有找到与端口相关的任何内容。
编辑:
根据 FaheemMitha 的建议,我telnet mydomain.com 587
向客户进行了尝试,并得到了No route to host
回复。我认为这是因为firewalld中只为smtp打开了端口25。
因此,我想尝试从远程服务器 mydomain.com 内进行 telnet。当我通过 ssh 登录到远程服务器并键入 时telnet localhost 25
,结果是:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mydomain.com ESMTP Postfix
这让我怀疑 postfix 正在端口 25 上运行,但不知何故它无法接受外部连接。
编辑#2
根据@RedCricket的建议,我跑了iptables -L
。由于结果很冗长,我将它们上传到文件共享网站,您可以通过单击此链接查看。
我还尝试了iptables --flush
后面的firewall-cmd --reload
,然后重复上面的 telnet 和雷鸟测试,但我仍然收到连接超时错误。
我还能尝试什么?
我将整个文件上传/etc/postfix/main.cf
到文件共享网站。你可以单击此链接即可阅读。
编辑#3
有效的电子邮件地址 some.else@some_other_domain.com 发送电子邮件至[电子邮件受保护]没有什么问题。因此,作为测试,我让我的远程 Thunderbird 客户端尝试将电子邮件发送到 some.else@some_other_domain.com,作为此 OP 中上述工作的一部分。今天早上,我在 Thunderbird 中收到了测试电子邮件的返回发件人消息。我将此返回消息解释为至少有一条来自 Thunderbird 的测试消息进入了 mydomain.com 上的 SMTP,但 mydomain.com 无法查找或以其他方式连接到 some_other_domain.com。这是消息:
This is the mail system at host mydomain.com.
I'm sorry to have to someone.elserm you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
<someone.else@some_other_domain.com>: Host or domain name not found. Name service error for
name=some_other_domain.com type=MX: Host not found, try again
Reporting-MTA: dns; mydomain.com
X-Postfix-Queue-ID: 2C915811BD1C
X-Postfix-Sender: rfc822; [email protected]
Arrival-Date: Mon, 23 Feb 2015 16:46:34 -0500 (EST)
Final-Recipient: rfc822; someone.else@some_other_domain.com
Action: failed
Status: 4.4.3
Diagnostic-Code: X-Postfix; Host or domain name not found. Name service error
for name=some_other_domain.com type=MX: Host not found, try again
ForwardedMessage.eml
Subject: key enclosed
From: [email protected]
Date: 02/23/2015 01:46 PM
To: someone.else@some_other_domain.com
this is the body of the email
因此,有时从我的远程 devbox 到 mydomain.com 的连接似乎会关闭,而在其他时候,从 mydomain.com 到互联网其余部分的连接也会关闭。
编辑#4
按照 @derobert 的建议,我首先尝试了从 devbox 到服务器的两个 telnet 命令,然后尝试从[电子邮件受保护]在我的 devbox 上使用 Thunderbird 客户端,然后在 devbox 和服务器上运行 tcpdump 命令。在 devbox 终端中输入tcpdump port 25
结果如下:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
监听 tun0,链接类型 RAW(原始 IP),捕获大小 65535 字节 ^C 捕获了 0 个数据包 过滤器收到了 0 个数据包 内核丢弃了 0 个数据包
接下来,tcpdump
在服务器上键入会产生大量输出,结果会无休止地滚动,直到我键入 Ctrl-C。于是我输入tcpdump port 25
并得到以下结果:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
出于好奇,我然后tcpdump port 25
同时在 devbox 和服务器上再次输入,并将其保持打开状态而不输入Ctrl-C
,然后我尝试手动从[电子邮件受保护]在我的开发盒上使用 Thunderbird 客户端。我仍然遇到相同的连接超时失败,但打开命令没有报告任何活动tcpdump port 25
。当我Ctrl-C
随后在两个终端上输入时,总数也为零。
答案1
后很多故障排除,我们确定客户端的 ISP 阻止了传出端口 25 (SMTP)。通过使用互联网上的随机邮件服务器测试站点并发现它可以很好地连接到邮件服务器,证实了这一点。来自客户端计算机的 SMTP 数据包根本没有到达(通过 确认tcpdump
)。
解决方案是在不同端口上重新配置 SMTP 侦听器。 465(基于 SSL 的 SMTP)和 587(邮件提交,RFC6409)是常见选项。