直升机命令被拒绝:主机未find – 设置后缀接受从我的家庭服务器通过我的公共服务器发送邮件

我想从我的家庭服务器收到系统电子邮件。 所以我试图通过我的公共服务器来configurationpostfix。 我的公共服务器有一个固定的IP,而我的家庭服务器是在一个私人networking中,由于我的路由器的主机名被包含在主机名中,导致主机名为“homeserver.blablabla_crappyrouter”。

我的家庭服务器通过一个带有固定IP的OpenVPN隧道连接到我的公共服务器,在这里我的家庭服务器是一个客户端。 从我的家庭服务器到我的公共服务器(反之亦然),有一个固定的IP,所以他们可以通过一个固定的地址没有问题的对方。 这是一个隧道,让我从任何地方到达我的家庭服务器,没有任何安全问题。

我的公共服务器上的后缀configuration包括以下内容:

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>] 

现在这个configuration不会发送电子邮件,并给我错误:

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

我研究了这一点,发现postfixsearch的主机名,但显然它没有find它,因为它搞砸主机名。

我的问题:我怎么能告诉我的公共服务器的后缀,让我的家庭服务器的一切盲目?

谢谢。

更新:

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

 smtpd_helo_required = no 

但是这没有帮助。 以下是我发送testing电子邮件后的/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 

这是问题:

 smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname 

最后那些reject_unknown_helo_hostname告诉Postfix拒绝邮件,如果在HELO命令中给出的主机名不能被parsing。 如果你删除,你的问题应该消失。

您应该改变您所做的更改(将smtpd_helo_required设置为no )。 这种改变使得客户端可以连接并开始发送邮件,而不用做HELO – 但是如果客户端做了一个HELO, smtpd_helo_restrictions的限制仍然适用,就像你发现的那样。

您可以将您的HELO政策更改为:

 smtpd_helo_restrictions = permit_mynetworks, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname 

…并将您的主邮件服务器的地址添加到mynetworks = ...行。

虽然@JennyD的答案是有效的,应该可以解决您的问题,但是最好保留当前的外部主机的HELO策略。 这有一个优点:错误configuration的MTA将无法发送消息到您的服务器,这将节省您的一些垃圾邮件(尽pipe相当一点点)。 无论如何,具有不正确HELOconfiguration的主机将被怀疑。

再进一步,确保你至less有下列列表中的reject_unknown_client_hostnamesmtpd_client_restrictions = ... 这将防止来自MTA主机的邮件没有正确的反向DNSlogging,因此许多僵尸networking中继。 另一个重要的反垃圾邮件措施是SPF政策deamon(即milter-greylist ),显然是SpamAssassin

如果你正在使用sasl,你总是可以这样做:

 smtpd_delay_reject = yes mua_helo_restrictions = permit_sasl_authenticated, reject_unknown_helo_hostname 

这允许SASLauthentication的主机无限制地发送helo