exim4 smarthost 帶發件人驗證
我正在嘗試將 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_domains
和no_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。