我想从我的家庭服务器接收系统电子邮件。所以我试图通过我的公共服务器配置后缀来做到这一点。我的公共服务器有一个固定的 IP,而我的家庭服务器在一个私有网络中,由于我的路由器的主机名包含在主机名中,因此主机名混乱,导致完整的主机名“homeserver.blablabla_crappyrouter”。
我的家庭服务器通过具有固定 IP 的 OpenVPN 隧道连接到我的公共服务器,其中我的家庭服务器是客户端。从我的家庭服务器到我的公共服务器(反之亦然)有一个固定的 IP,因此它们可以通过固定地址毫无问题地相互联系。这是一条隧道,可以让我从任何地方访问我的家庭服务器,而不会出现安全问题。
我的公共服务器上的 postfix 配置包括以下内容:
smtpd_recipient_restrictions = reject_invalid_hostname,
reject_unknown_recipient_domain,
reject_unauth_destination,
reject_rbl_client sbl.spamhaus.org,
permit
smtpd_helo_restrictions = reject_invalid_helo_hostname,
reject_non_fqdn_helo_hostname,
reject_unknown_helo_hostname
smtpd_client_restrictions = reject_rbl_client dnsbl.sorbs.net
在我的家庭服务器上,我添加了我的 OpenVPN 的公共服务器的 IP 使用
relayhost = [<public server IP through OpenVPN>]
现在此配置不发送电子邮件并给我错误:
Helo 命令被拒绝:找不到主机
我对此进行了研究,发现后缀搜索主机名,但显然由于主机名混乱而找不到它。
我的问题:我怎样才能告诉我的公共服务器的后缀盲目地允许来自我的家庭服务器的所有内容?
谢谢。
更新:
我确实在 main.cf 中设置了选项
smtpd_helo_required = no
但这没有帮助。以下是我发送测试电子邮件后的 /var/log/mail.log 条目:
Sep 2 15:53:53 HomeServer sm-mta[6677]: t82Drr6w006677: [email protected], size=69, class=0, nrcpts=1, msgid=<[email protected]_crappyRouter>, proto=ESMTP, daemon=MTA-v4, relay=localhost [127.0.0.1]
Sep 2 15:53:53 HomeServer sm-mta[6679]: STARTTLS=client, relay=mydomain.com., field=cn_subject, status=failed to extract CN
Sep 2 15:53:53 HomeServer sm-mta[6679]: STARTTLS=client, relay=mydomain.com., field=cn_issuer, status=failed to extract CN
Sep 2 15:53:53 HomeServer sm-mta[6679]: STARTTLS=client, relay=mydomain.com., version=TLSv1/SSLv3, verify=FAIL, cipher=ECDHE-RSA-AES256-GCM-SHA384, bits=256/256
Sep 2 15:53:53 HomeServer sm-mta[6679]: t82Drr6w006677: [email protected], delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=120069, relay=mydomain.com. [93.186.192.197], dsn=4.7.1, stat=Deferred: 450 4.7.1 <HomeServer.blablabla_crappyRouter>: Helo command rejected: Host not found
我要发送的邮件是:
ehlo localhost
mail from: [email protected]
rcpt to: [email protected]
data
Subject: My first mail on Postfix
Hi,
Are you there?
regards,
Admin
.
quit
我使用以下命令发送它:
cat mail.txt | nc localhost 25
这是问题:
最后一个
reject_unknown_helo_hostname
,告诉 Postfix 如果 HELO 命令中给出的主机名无法解析,则拒绝邮件。如果您删除它,您的问题应该会消失。您应该撤消所做的更改(设置
smtpd_helo_required
为no
)。该更改使客户端可以连接并开始发送邮件而根本不执行 HELO - 但如果客户端执行 HELO,则限制smtpd_helo_restrictions
仍然适用,正如您所发现的那样。您可以将您的 HELO 政策更改为:
...并将您的家庭邮件服务器的地址添加到
mynetworks = ...
行中。尽管@JennyD 的回答是有效的并且应该可以解决您的问题,但最好保留您当前针对外部主机的 HELO 策略。这有一个优势:配置错误的 MTA 将无法向您的服务器发送消息,这将使您免于一些垃圾邮件(尽管有一点点)。无论如何,应该怀疑 HELO 配置不当的主机。
更进一步,确保在 ie 下的列表中至少有reject_unknown_client_hostname 。
smtpd_client_restrictions = ...
. 这将阻止来自没有正确反向 DNS 记录的 MTA 主机的消息,从而阻止许多僵尸网络中继。另一个重要的反垃圾邮件措施是 SPF 策略守护程序(即milter-greylist),显然还有SpamAssassin。如果您对客户端没有细粒度的控制,则无论如何都应该使用 SASL:
这允许经过 SASL 身份验证的主机不受限制地发送 helo
请注意,在某些配置中,master.cf
smtp_helo_restrictions
为两者设置submission
和smtps
to$mua_helo_restrictions
,因此在这种情况下mua_helo_restrictions
改为设置。