场景:我正在本地网络上测试 SMTP 服务器,我现在需要检查它是否可以将电子邮件发送到网络。当然,问题是我通过我的 ISP 出去,而我的 ISP 分配的固定 IP 地址不在 DNS 上(我当然可以把它放在 DNS 上,但我无法设置反向查找,所以它不会有帮助)。
为了解决这个问题,我在远程服务器上设置了 Postfix,并且我试图通过该服务器将我的传出消息中继到该服务器上的本地收件人。这看起来应该很简单,但我显然遗漏了一些东西。这是一个新的 Postfix 3.6.4 设置,main.cf
包含:
mynetworks = 127.0.0.0/8, 93.184.216.34/32
smtpd_helo_restrictions = permit_mynetworks, ...
smtpd_client_restrictions = permit_mynetworks, ...
93.184.216.34
是我的 ISP 分配的地址,我的本地网络是dummy-domain.com
. 当我尝试向服务器发送电子邮件时出现故障,服务器日志文件显示:
Oct 16 13:24:42 titan postfix/smtpd[19103]: connect from my-isp[93.184.216.34]
Oct 16 13:24:42 titan postfix/smtpd[19103]: NOQUEUE: reject: RCPT from my-isp[93.184.216.34]: 450 4.1.8 <[email protected]>: Sender address rejected: Domain not found; from=<[email protected]> to=<a-local-recipient-address> proto=ESMTP helo=<dummy-domain.com>
Oct 16 13:24:42 titan postfix/smtpd[19103]: lost connection after RCPT from my-isp[93.184.216.34]
postconf
确认mynetworks
,但它也这样说:
compatibility_level = 0
smtpd_relay_restrictions = ${{$compatibility_level} <level {1} ? {} : {permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination}}
我的理解可能是错误的,说默认smtpd_relay_restrictions
不包括,与文档相反。所以我明确地将其设置为:permit_mynetworks
main.cf
smtpd_relay_restrictions = permit_mynetworks
重新启动,postconf
现在准确地报告上面的行。但是,它仍然不起作用,服务器日志文件仍然显示相同的消息。有任何想法吗?以及如何postconf
向我展示当前的真实设置,而不必担心兼容性级别?谢谢。
编辑
根据 anx 的回答,事实证明smtpd_client_restrictions = permit_mynetworks
(“当客户端 IP 地址与 $mynetworks 中列出的任何网络或网络地址匹配时允许请求”)是不够的。你还需要
smtpd_sender_restrictions = permit_mynetworks
与permit_mynetworks
之前reject_unknown_sender_domain
。这一切都可以正常工作,无需对 DNS 进行任何更改/etc/hosts
,也无需向 DNS 添加任何内容。
这与您的邮件服务器发送 IP 或其缺少的反向关联无关。您使用的发件人地址带有无法找到的域。
reject_unknown_sender_domain
在您的 smtpd_*_restrictions 中查找类似的语句,并根据您的需要添加一些可以解除此限制的内容。您可能smtpd_sender_restrictions
需要对其进行编辑才能继续处理此消息。或者只是将地址配置为实际上可以在 DNS 中找到的发件人(同样,这与发送消息的服务器的主机名是否可以在 DNS 中找到无关)。