Smtp

exim4 smarthost 帶發件人驗證

  • March 13, 2017

我正在嘗試將 exim4 設置為 ISP 郵件伺服器前的智能主機。一切正常,除了來自無效發件人的一些電子郵件(很可能是垃圾郵件)。ISP 拒絕他們

450 4.1.8 <etqoalxre@xgcuux.com>: Sender address rejected: Domain not found

這會導致 exim smarthost 重試,從而不必要地增加隊列大小。

我設法配置它的最接近的是使用/etc/exim4/local_sender_callout文件。但隨後標註轉到 ISP,然後拒絕它

554 5.7.1 <mjsb@haf.org>: 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 接受我的域的電子郵件並將它們儲存在郵箱中。

實際上,您正在設置一個前端 MX,其中包含一組更嚴格的過濾器,更靠近最終目的地。解決這個問題的最好方法是至少在前端進行限制。

因為您有一個智能主機,所以您將“任何域”的電子郵件發送到智能主機。這與域有效性檢查結合得很糟糕:在為 RCPT 命令定義的 ACL 中的某處,應該有一個require verify = sender確保 Exim 在接受消息之前有一種方法可以將電子郵件發送到發件人域。

由於您始終線上,我建議直接在您的智能主機路由器之前放置一個額外的路由器。假設 smarthost 有domains = ! +local_domainsno_more,然後添加no_verify到 smarthost 路由器和之前,插入這個路由器:

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

引用自:https://serverfault.com/questions/535376