我正在尝试将 exim4 设置为 ISP 邮件服务器前端的智能主机。一切正常,除了一些来自无效发件人的电子邮件(很可能是垃圾邮件)。ISP 拒绝这些邮件
450 4.1.8 <[email protected]>: Sender address rejected: Domain not found
这会导致 exim 智能主机重试,从而不必要地增加队列大小。
我最接近的配置方法是使用/etc/exim4/local_sender_callout
文件。但随后呼叫转到 ISP,然后 ISP 拒绝它,并发出
554 5.7.1 <[email protected]>: Relay access denied
(对于任何地址,即使是有效的地址)。/etc/exim4/passwd.client
在这种情况下,设置似乎不起作用...
如何使用 exim smarthost 设置发件人验证(带有或最好不带有标注)?
澄清:我的 exim 不是开放中继,它已经指定了仅接受电子邮件的域的受限列表。然后,这些电子邮件被发送到智能主机,以便递送到实际邮箱。设置图可能看起来像这样。
Internet -> my exim(mx) -> ISP(smarthost) <- users accessing email via POP/IMAP
我的域名的 mx 记录指向我的 exim 服务器。但是 ISP 接受我的域名的电子邮件并将其存储在邮箱中。
答案1
实际上,您是在设置前端 MX,其中包含一组更严格的筛选器,更深入地了解最终目的地。解决此问题的最佳方法是至少在前端进行同样严格的限制。
但是,由于您有智能主机,因此您可以将“任何域”的电子邮件发送到智能主机。这与域有效性检查结合得不好:在为 RCPT 命令定义的 ACL 中,应该有一个require verify = sender
确保 Exim 在接受邮件之前有一种方法可以将电子邮件发送到发件人域。
由于您始终在线,我建议在智能主机路由器之前直接放置一个额外的路由器。假设智能主机有domains = ! +local_domains
和no_more
,则将其添加no_verify
到智能主机路由器,并在其前面插入此路由器:
remote_dns_verify:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
# ignore_target_hosts = +some_hostlist_matching_rfc1918_and_so_on
same_domain_copy_routing
verify_only
no_more
由此,确认路径将不使用智能主机,因此您将不再拥有“万能路由”。验证将只能路由具有 DNS 的远程域,因此您将不再接受您的 ISP 因无法路由而拒绝的电子邮件。
之后,我会考虑设置一些与特定远程错误匹配的重试规则,以停止重试 ISP 拒绝的邮件。请参阅http://www.exim.org/exim-html-current/doc/html/spec_html/ch-retry_configuration.html了解更多信息。