Helo 命令被拒绝:未找到主机 - 设置 postfix 以接受通过我的公共服务器从我的家庭服务器发送邮件

Helo 命令被拒绝:未找到主机 - 设置 postfix 以接受通过我的公共服务器从我的家庭服务器发送邮件

我想从我的家庭服务器接收系统电子邮件。因此,我尝试配置 postfix 以通过我的公共服务器执行此操作。我的公共服务器有一个固定 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 命令被拒绝:未找到主机

我对此进行了研究,发现 postfix 会搜索主机名,但显然由于其主机名混乱而找不到它。

我的问题:我怎样才能告诉我的公共服务器的后缀盲目地允许来自我的家庭服务器的所有内容?

谢谢。

更新:

我确实在 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

答案1

问题如下:

smtpd_helo_restrictions = reject_invalid_helo_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname

最后一个,reject_unknown_helo_hostname,告诉 Postfix 如果无法解析 HELO 命令中给出的主机名,则拒绝邮件。如果删除它,您的问题应该会消失。

您应该撤消所做的更改(设置smtpd_helo_requiredno)。该更改使得客户端可以连接并开始发送邮件,而无需执行任何 HELO - 但如果客户端执行了 HELO,则中的限制smtpd_helo_restrictions仍然适用,正如您所发现的。

答案2

您可以将 HELO 政策更改为:

smtpd_helo_restrictions = 
    permit_mynetworks,
    reject_invalid_helo_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname

...并将您的家庭邮件服务器的地址添加到mynetworks = ...行中。

虽然 @JennyD 的回答是有效的,应该可以解决您的问题,但最好保留您当前的外部主机 HELO 策略。这样做有一个好处:配置错误的 MTA 将无法向您的服务器发送消息,这将使您免受一些垃圾邮件的困扰(尽管是一点点)。无论如何,HELO 配置不正确的主机是值得怀疑的。

再进一步,确保你至少有拒绝未知客户端主机名位于 ie 下的列表中。smtpd_client_restrictions = ...这将阻止来自没有正确反向 DNS 记录的 MTA 主机的消息,从而阻止许多僵尸网络中继。另一个重要的反垃圾邮件措施是 SPF 策略守护进程(即。milter-灰名单)显然,垃圾邮件杀手

答案3

如果您对客户端没有细粒度的控制,那么您应该使用 SASL:

smtpd_delay_reject = yes

smtp_helo_restrictions =
    permit_sasl_authenticated,
    reject_unknown_helo_hostname

这允许经过 SASL 验证的主机无限制地发送 helo

请注意,在某些配置中,master.cf 将和都设置为,smtp_helo_restrictions因此在这种情况下设置为。submissionsmtps$mua_helo_restrictionsmua_helo_restrictions

相关内容