场景:我正在本地网络上测试 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
。这一切都可以正常工作,无需对 进行任何更改/etc/hosts
,也不需要向 DNS 添加任何内容。
答案1
发件人地址被拒绝:未找到域名
这与你的邮件服务器发送 IP 或缺少反向关联无关。你正在使用发件人地址带有无法找到的域。查找类似reject_unknown_sender_domain
smtpd_*_restrictions 中的语句,并添加一些可解除此限制的内容以满足您的需求。smtpd_sender_restrictions
您可能需要编辑它才能继续处理此消息。或者只需将地址配置为实际上可以在 DNS 中找到的发件人(同样,这与是否可以在 DNS 中找到发送消息的服务器的主机名无关)。