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_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
Run Code Online (Sandbox Code Playgroud)
...并将您的家庭邮件服务器的地址添加到mynetworks = ...行中。
尽管@JennyD 的答案是有效的并且应该可以解决您的问题,但最好为外部主机保留当前的 HELO 策略。这有一个优点:错误配置的 MTA 将无法向您的服务器发送消息,这将使您免于一些垃圾邮件(尽管有点)。无论如何,主机的 HELO 配置不正确是值得怀疑的。
更进一步,确保在 ie 下的列表中至少有reject_unknown_client_hostname。smtpd_client_restrictions = .... 这将阻止来自没有正确反向 DNS 记录的 MTA 主机的消息,从而防止许多僵尸网络中继。另一个重要的反垃圾邮件措施是 SPF 策略守护程序(即milter-greylist),显然还有SpamAssassin。
| 归档时间: |
|
| 查看次数: |
38938 次 |
| 最近记录: |