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

The*_*ist 9 email email-server postfix openvpn tunnel

我想从我的家庭服务器接收系统电子邮件。所以我试图通过我的公共服务器配置 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
Run Code Online (Sandbox Code Playgroud)

在我的家庭服务器上,我添加了 OpenVPN 的公共服务器的 IP 使用

relayhost = [<public server IP through OpenVPN>]
Run Code Online (Sandbox Code Playgroud)

现在这个配置不发送电子邮件并给我错误:

Helo 命令被拒绝:找不到主机

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

我的问题:如何告诉我的公共服务器的 postfix 盲目地允许来自我的家庭服务器的所有内容?

谢谢。

更新:

我确实在 main.cf 中设置了选项

smtpd_helo_required = no
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。以下是我发送测试电子邮件后的 /var/log/mail.log 条目:

Sep  2 15:53:53 HomeServer sm-mta[6677]: t82Drr6w006677: from=sys@mydomain.com, size=69, class=0, nrcpts=1, msgid=<201509021353.t82Drr6w006677@HomeServer.blablabla_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: to=info@mydomain.com, 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
Run Code Online (Sandbox Code Playgroud)

我试图发送的邮件是:

ehlo localhost
mail from: sys@mydomain.com
rcpt to: info@mydomain.com
data
Subject: My first mail on Postfix

Hi,
Are you there?
regards,
Admin
.
quit
Run Code Online (Sandbox Code Playgroud)

我使用以下命令发送它:

cat mail.txt | nc localhost 25
Run Code Online (Sandbox Code Playgroud)

Jen*_*y D 10

这是问题:

smtpd_helo_restrictions = reject_invalid_helo_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname
Run Code Online (Sandbox Code Playgroud)

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

您应该撤销所做的更改(设置smtpd_helo_requiredno)。这一变化使得客户端可以连接并开始发送邮件,而根本不需要执行 HELO - 但是如果客户端确实执行了 HELO,那么限制smtpd_helo_restrictions仍然适用,正如您所发现的。


sam*_*usz 8

您可以将 HELO 政策更改为:

smtpd_helo_restrictions = 
    permit_mynetworks,
    reject_invalid_helo_hostname,
    reject_non_fqdn_helo_hostname,
    reject_unknown_helo_hostname
Run Code Online (Sandbox Code Playgroud)

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

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

更进一步,确保在 ie 下的列表中至少有reject_unknown_client_hostnamesmtpd_client_restrictions = .... 这将阻止来自没有正确反向 DNS 记录的 MTA 主机的消息,从而防止许多僵尸网络中继。另一个重要的反垃圾邮件措施是 SPF 策略守护程序(即milter-greylist),显然还有SpamAssassin


归档时间:

查看次数:

38938 次

最近记录:

7 年,2 月 前