Domain-Name-System

一個域的兩個技術不同的郵件伺服器(Postfix / Exchange)

  • November 11, 2016

我在 Debain Postfix 郵件伺服器上有幾個使用者。一切皆好。現在我們需要將一些使用者放到一個託管的 Exchange Server (Office 365) 上。

是否可以以這種方式為一個域配置郵件伺服器和 DNS MX,如果使用者收件箱不在 server1 上,則查找將轉發到 server2?

  • 最好的做法是什麼?
  • 誰是發送 smtp?

謝謝彼得

嗯….不,是的。

問題是當 DNS MX 記錄查找完成時,DNS 伺服器不知道使用者是誰(該資訊不會發送到 DNS 伺服器),因此 DNS 伺服器無法發送專用的 MX 記錄一些使用者。DNS 如此了解您的使用者會很奇怪(技術術語是“分層違規”)。另外,如果電子郵件有 2 個人To:線上,一個是為原始使用者之一,另一個是為 Exchange 使用者?它變得混亂。

我們將在 Postfix 伺服器上發送電子郵件的使用者稱為“Group P”,將希望在 Exchange 上發送電子郵件的使用者稱為“Group E”。

解決方案是讓 Postfix 伺服器在本地傳遞 Group P 的電子郵件,並將 Group E 的電子郵件轉發到 Exchange 伺服器。同樣,Exchange 伺服器需要知道在本地傳遞 E 組的電子郵件,而 P 組的電子郵件需要轉發。

關鍵是要確保這兩個伺服器具有完全相同的資訊。否則,兩台伺服器都會在本地傳遞一個人的消息,或者(更糟糕的是)兩者都不會認為他們對電子郵件負責,並且它會在伺服器之間來回往返。

E組較小時的解決方案:

如果 E 組很短(即只有少數例外),您可以這樣做:

  • 在 Postfix 上,為每個使用者設置別名以將他們的電子郵件轉發到他們的交換帳戶。
  • 在 Exchange 上,將伺服器配置為將未知使用者的電子郵件轉發到 Postfix 伺服器。(遺憾的是,我不知道此設置,因為我不知道 Exchange)。

大型網站的解決方案:

對於較大的配置,我建議將兩個伺服器(稱為 serverE.example.com 和 serverP.example.com)配置為分別為 user@serverE.example.comuser@serverP.example.com 發送本地電子郵件,但是不在本地為 user@example.com 發送電子郵件。每台機器都訪問一個 LDAP/AccticeDirectory 數據庫,該數據庫表明(例如)tom@example.com 將他的電子郵件發送到了 tom@serverP.example.com,而geri@example.com 將她的電子郵件發送到了geri@serverE.example.com . 這樣,事情就會保持同步,您只有一個地方可以更新。

鮮為人知的事實:使用後綴,如果aliases文件包含:

tom: tom@serverP.example.com
geri: geri@serverE.example.com

而mail.cf 的mydestination 包含serverP.example.com但不包含serverE.example.com,則mail totom將在本地投遞,而mail togeri將中繼到serverE。它不會創建循環!

我提出這個問題是因為在我知道這一點之前,我編寫了一個大的 perl 腳本,它為每個郵件伺服器生成aliases文件,這樣(例如)tom就不會出現在aliases文件中serverP,而只是出現在所有其他文件中。一旦我知道了這一點,我就刪除了腳本。完全相同的aliases文件可能在所有機器上。(當然,由於 Exchange 不使用aliases文件,因此必須在這些伺服器上執行其他操作。)

如果myorigin = example.com然後傳出的電子郵件將在行中包含“tom@example.com”,那麼From:沒有人會更明智地知道有兩個電子郵件伺服器。(我不知道 Exchange 等價物,但我確定它存在。)

測試建議

測試此配置時,不要只測試傳入的電子郵件是否發送到正確的位置。還要確保從每個客戶發送的電子郵件發送到正確的位置。例如,讓 Exchange 使用者發送一條消息To: tom, geri並確保兩者都送達。讓 Debian 使用者也這樣做。我已經看到(例如)別名和/或轉發沒有在兩台機器上正確設置並且電子郵件tom在兩台伺服器上為使用者本地傳遞的情況。 tom必須在這兩個地方閱讀電子郵件,直到這個問題得到解決。哎呀!

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