我将从最重要的开始 - 我已经阅读/观看了大量有关此内容的手册、教程、论坛和建议,但我仍然感觉我不了解整个电子邮件系统的某些重要内容,但同时 - 有些内容非常简单和微不足道。
- 我已经在Linode上购买了一台VPS服务器;
- 我已经安装并配置了postfix、dovecot邮件系统服务;
- 我已经正确配置了用于发送和接收邮件的 DNS(SPF、DKIM、DMARC、HELO、rDNS、授权 IP 和主机名的服务器 - 所有这些都已成功配置并通过了测试);
- 服务器未被任何电子邮件垃圾邮件过滤公司列入黑名单。
Postfix 配置(主要设置):
主配置文件
mail_owner = postfix
myhostname = mail.mywebsite.com
mydomain = mywebsite.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8
smtpd_banner = $myhostname ESMTP
sendmail_path = /usr/sbin/sendmail.postfix
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
broken_sasl_auth_clients = yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtpd_tls_loglevel = 1
smtpd_tls_key_file = /path/to/ssl/server.key
smtpd_tls_cert_file = /path/to/ssl/server.crt
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
smtp_host_lookup = dns, native
我没有配置使用任何中继服务器,因为我认为该服务器应该能够自行发送电子邮件。
主配置文件
smtp inet n - n - - smtpd
-o smtpd_tls_auth_only=yes
-o smtpd_tls_security_level=none
-o smtpd_sasl_auth_enable=no
submission inet n - n - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_enforce_tls=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
-o smtpd_sasl_tls_security_options=noanonymous
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o syslog_name=postfix/smtps
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_sasl_tls_security_options=noanonymous
-o milter_macro_daemon_name=ORIGINATING
policy unix - n n - 0 spawn user=nobody argv=/bin/python /usr/libexec/postfix/policyd-spf
问题 -
我面临的情况是,我的一些外发电子邮件被 ISP 在端口 25 上阻止。关于这种情况,我有几点要说:
- 我正在使用外部软件(Apple Mail)通过 mail.mywebsite.com 连接到我的 SMTP 服务器,并且我已专门配置为使用端口 587 而不是 25,但我收到的返回电子邮件仍然表明电子邮件已在端口 25 上被阻止,我完全不明白;
- 我已经测试过,我的服务器的防火墙没有阻止任何端口;
- 我注意到,只有当我将那些外发邮件发送到一个特定域时,它们才会被阻止。例如,当我将邮件发送到谷歌邮件服务器(或迄今为止的其他邮件服务器)时,一切都很正常 - 电子邮件发出去,并通过垃圾邮件箱进入收件箱;
- 我可以看到,ISP 公司(阻止了发送的电子邮件)是电子邮件发送时计算机当时所在的公司,而不是 Linodes 网络提供商,这我也无法理解——感觉就像计算机试图通过计算机的邮件服务器发送电子邮件,而不是通过我的 Linode 的 VPS 邮件服务器;
问题 -
我如何更新我的服务器和/或 Postfix 服务以防止我的外发电子邮件被 ISP 阻止?
额外的 -
- 我读到过这种情况通常是当邮件服务器位于家中而不是 VPS 时发生的,而我的情况并非如此。我正在使用 VPS。
- 我知道这个话题在论坛上已经讨论过多次了,但这些配置仍然存在一些问题,不仅对我,对开发者社区的许多人来说也是如此。我希望这篇文章和正确答案的描述和解释会比其他文章更简单,这样就不会让这个问题变得毫无意义。
更新 -
退回电子邮件的拒绝信示例:
This is the mail system at host mail.mywebsite.com.
I'm sorry to have to inform 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
<[email protected]>: connect to
cluster5.eu.messagelabs.com[195.245.230.51]:25: Connection timed out
Reporting-MTA: dns; mail.mywebsite.com
X-Postfix-Queue-ID: 9004B2089
X-Postfix-Sender: rfc822; [email protected]
Arrival-Date: Mon, 2 Oct 2017 11:14:25 +0200 (CEST)
Final-Recipient: rfc822; [email protected]
Original-Recipient: rfc822;[email protected]
Action: failed
Status: 4.4.1
Diagnostic-Code: X-Postfix; connect to
cluster5.eu.messagelabs.com[195.245.230.51]:25: Connection timed out
Return-Path: <[email protected]>
Received: from [10.25.80.102] (unknown [81.92.27.224])
(using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by mail.mywebsite.com (Postfix) with ESMTPSA id 9004B2089
for <[email protected]>; Mon, 2 Oct 2017 11:14:25 +0200 (CEST)
DMARC-Filter: OpenDMARC Filter v1.3.2 mail.mywebsite.com 9004B2089
Authentication-Results: mail.mywebsite.com; dmarc=fail (p=none dis=none) header.from=mywebsite.com
Authentication-Results: mail.mywebsite.com; spf=fail [email protected]
DKIM-Filter: OpenDKIM Filter v2.11.0 mail.mywebsite.com 9004B2089
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=mywebsite.com;
s=default; t=1506935665;
bh=iIf8iBaIOhXI2dMpT9tm3bYRnKMjiK49NsVTB66/1aQ=;
h=From:Subject:Date:References:To:In-Reply-To:From;
b=hZFiYO9NE09XtWTa7mxOq+W8s9aajWQVV9e4SY8/XIv3qX9YjULv1rBqmyUfkqKz0
L2q8GSXBJr6ipxQsnoPCKMp7yy05rOu6L5dMyh5XndvEve+w3YkHhisy+unCM69Dyh
M6dPAebLlo1AcF/B0AHqmskqnjvLAj03aBtwF+5E=
From: "Mywebsite.com" <[email protected]>
Content-Type: multipart/alternative; boundary="Apple-Mail=_E368298F-D51E-458B-AC0A-4284381C761C"
Message-Id: <[email protected]>
Mime-Version: 1.0 (Mac OS X Mail 9.0 \(3094\))
Date: Mon, 2 Oct 2017 11:14:24 +0200
References: <[email protected]>
To: Per Hildebrand <[email protected]>
In-Reply-To: <[email protected]>
X-Mailer: Apple Mail (2.3094)
更新 2 -
在查看了多封退回的电子邮件的拒绝信后,我注意到其中的某些行在某一时刻发生了变化(当时我不断从论坛添加更新以防止阻止发送的电子邮件)。从那一刻起,错误信息显示 cluster5.eu.messagelabs.com 中的电子邮件因连接超时而被阻止。
解决方案 -
为了解决 VPS 服务器上端口 25 上的电子邮件被阻止的问题,只需确保服务器完全授权、DNS 设置正确并且电子邮件使用所有必要的证书签名即可。以下是确保具有邮件系统的健康服务器的所有必要任务的列表:
- 将 SPF 记录添加到您服务器的 DNS;
- 在外发邮件中添加 DKIM 签名;
- 将 DMARC 记录添加到您服务器的 DNS;
- 正确设置HELO、rDNS记录;
您可以在不同的“垃圾邮件测试服务”中检查这些更新的实施结果和进度,例如mail-tester.com网站。
关于 cluster5.eu.messagelabs.com 服务中阻止发送电子邮件的最新问题:
之前提到过mail-tester.com网站还提供在不同的垃圾邮件服务中检查您的服务器主机名和 IP 的功能,这些服务会检查黑名单。如果这些服务告诉您您的服务器未被列入任何垃圾邮件黑名单,则并不意味着 100% 真实。这是我的情况。
messagelabs.com(现在:symantec.com)通常不在这些垃圾邮件过滤器检查中,因此您的测试人员会告诉您电子邮件不会被任何垃圾邮件过滤器阻止。但显然有些邮件公司在允许电子邮件进入邮箱之前使用此服务(messagelabs.com)作为垃圾邮件测试。这意味着您必须确保您的服务器的 IP/主机名不在他们的黑名单中。您可以通过命令行进入您的服务器并执行命令来检查它:
telnet cluster5.eu.messagelabs.com 25
如果您收到连接超时,则意味着您的服务器可能在他们的服务中被列入黑名单。
要将您的服务器从 messagelabs.com 服务黑名单中删除,您必须执行以下步骤:
- 确保您的服务器发出的邮件不会被视为垃圾邮件(查看此解决方案的开头);
- 访问 messagelabs.com (symantec.com) 网站并进入“IP 信誉调查”页面,检查您的服务器是否仍被视为发送垃圾邮件。使用查找表单进行检查。以下是关联。
- 如果你发现你的服务器被视为没有垃圾邮件,那么在他们的论坛从他们的黑名单中删除您的特定 IP/主机名。
提示 -
如果您遇到此类问题,请始终按照用户“barrycarter”在这篇文章中的回答给出的说明进行操作。这将帮助您更快地确定邮件被阻止的部分。多亏了他的回答,我才能更快地了解问题实际上隐藏在哪里(因此我将他的回答标记为正确答案)。
答案1
我的想法:
从 VPS 尝试类似 的操作
host -t mx xyz.com
,当您得到类似 的结果时mail.xyz.com
,执行类似 的操作ncat mail.xyz.com 25
甚至telnet mail.xyz.com
。这将测试事情是否在更低的级别上正常工作。从您的家用机器上,尝试
ncat my-vps-server 25
确认它是否失败,然后ncat my-vps-server 587
确保它正常工作。当您的 VPS 尝试连接到 SMTP 端口 25 上的远程服务器时,您会收到错误消息。
cluster5.eu.messagelabs.com[195.245.230.51]:25: Connection timed out
这与您的家用机器如何连接到您的 VPS 无关。我自己的 ghetto 解决方案(可行,但很丑陋):在您的机器的端口 25 和您的 VPS 的端口 25 之间创建一个 ssh 隧道。
sudo ssh -L 25:127.0.0.1:25 [email protected]
答案2
很难理解你在说什么。我能提供的帮助非常有限。
- 为你的问题找一个具体的可重复的例子。
- 通过跟踪交付的各个步骤来准确确定失败的时间。
- 使用您的服务器日志。
- 如果您在电子邮件中收到错误信息,则该信息是由邮件服务器发送的。那是您的邮件服务器吗?
如果您的邮件服务器无法在端口25上进行设置,只对一个域名开放,那么可能是被接收端的防火墙挡住了?
编辑:
好的,因此来自您的邮件服务器的消息副本清楚地表明,失败的连接是从您的服务器到 cluster5.eu.messagelabs.com[195.245.230.51]:25: 的连接,并且连接超时了。
顺便说一句,我可以从我的邮件服务器远程登录到 195.245.230.51 端口 25。这可能意味着远程端出现了暂时的问题,在这种情况下,您的邮件现在可能已经发送出去了。或者,可能有防火墙规则阻止了您的连接。
- 您可能需要仔细检查服务器上的防火墙规则。
- 您说您能够运送到其他目的地,所以我认为我们可以假设 linode 没有阻止这一点。
- 问题很可能出在远端。
可能值得检查一下您的邮件服务器是否已被列入任何主要的 RBL 黑名单。您还应该查看邮件日志,看看是否总是无法连接到远程邮件主机。如果您尝试发送的邮件触发了垃圾邮件规则,或者发送给了不存在的用户,则远程端可能有一些系统可以自动阻止您的 IP(可能是暂时的),因为该策略减轻了服务器的负载,同时保持了较低的管理要求。
我看到您的电子邮件标头中的域名有些混乱。To
标头似乎与您实际要投递的 IP 一致。我猜想各种receiveremail.com
引用都是您部分净化您发布的内容?否则,在尝试投递(例如通过别名)之前,您会寻找目标地址的某些翻译。