兩個 Exim 伺服器和重定向

兩個 Exim 伺服器和重定向

我試圖解決這個問題有點模糊,所以我需要向你尋求幫助。

我們的用戶分佈在兩棟大樓之間,距離較遠,因此我們設置了兩個獨立的郵件伺服器,以便每台伺服器為其大樓提供郵件。主要目的是,在連線遺失的情況下,即使外部郵件暫時無法使用,使用者也可以向自己大樓內的同事發送郵件。每棟大樓都使用自己的郵件網域。設定很簡單並且運作良好。

出於打擊垃圾郵件和管理目的,我們在每台伺服器上都有相同的(整個)使用者表,但將每個方塊標記為「B1」或「B2」以指示給定使用者位於哪個建築物。我們過去在 SQL 表中儲存郵箱表和重定向表,因此透過在 exim 配置行中新增「WHERE which_server='B1'」條件來區分它們是沒有問題的。

當我們涉及重定向/別名時,意想不到的是郵件重複。這是一個範例:

假設用戶用戶11號樓使用信箱[電子郵件受保護],而用戶用戶22號樓使用信箱[電子郵件受保護]。到目前為止沒有問題,他們可以互相發送郵件,外部用戶也可以透過郵件與他們聯繫。

現在假設我們在每個郵件伺服器上添加一些重定向。就這樣說吧:

[電子郵件受保護]->[電子郵件受保護],[電子郵件受保護],[電子郵件受保護]

現在作為郵件來自[電子郵件受保護][電子郵件受保護],server1 上的郵件伺服器將製作三個副本,並作為三封單獨的郵件進一步發送(兩封 g 將發送到 b2.domain.com 的伺服器,一封將發送到 Gmail 的伺服器)。現在,當這些訊息到達 b2.domain.com 的伺服器時,它將再次進行重定向(使用其自己的 SQL 表),從而複製訊息。

我覺得我錯過了一些優雅的方法來解決這個問題,所以你能指出我正確的方法嗎?

先致謝!

答案1

在分析別名表擴充時,您確實有一個未使用的強大指標:電子郵件是否來自外部世界,或者是否來自另一棟建築物(一個或多個主機名稱或 IP)。如果問題是從 B2 發送時 B1 中的別名擴充以重複的方式失敗,則在來源是 B2 的情況下跳過別名擴充。在 ACL 中,這可以透過 來完成hosts = !+B2,但在您的情況下,路由器是您需要做出此決定的地方。為此,我將在連線 ACL 或郵件 ACL 中設定:

warn hosts = +B2
     set acl_c_other_building = 1

然後在別名路由器中,您可以新增條件,如果它來自其他建築物,則傳回 false/no:

condition = ${if eq{$acl_c_other_building}{1} {no}{yes}}

有了這個邏輯,接下來的路由器大概就是處理郵箱傳遞並將在本地傳遞該訊息的路由器。

如果效果符合預期,請在另一棟建築物中執行相反的操作。

答案2

您的主要問題似乎是郵件環境不一致。一方面,您將兩台伺服器視為相同的內部伺服器(相同的別名規則),另一方面,它們只負責一個網域,這使得它們像任何其他遠端郵件伺服器一樣對待彼此,因此必然會發生重定向重複。

我建議您不要嘗試在MTA 路由級別上處理這種分散式設置,而是為兩台伺服器提供相同的網域配置,這意味著讓兩台伺服器都將您的網域視為本地域並傳送到本地郵箱,然後在兩個伺服器之間複製這些郵箱。主主複製

相關內容