共用方式為


通訊

Microsoft 內部的 Exchange Edge Transport Server

Kay Unkroth

 

摘要:

  • Exchange Edge Transport server role
  • 準備測試實驗室
  • 傳輸代理程式和事件
  • 代理程式內部運作

下載本文程式碼: ExchangeEdge2007_10.exe (354KB)

Microsoft 平均每個工作天都會從網際網路收到大約 1300 萬封郵件,並且封鎖其中 1050 萬封以上的非法郵件。發生緊急

狀況時 (例如,遭受垃級郵件攻擊,或者網際網路爆發病毒),郵件數量還可能爆增到 9000 萬。當然,這是 Microsoft 專屬的調查結果,但是詐騙郵件、濫發垃圾郵件、網路釣魚、電子郵件衍生病毒、目錄蒐集攻擊、分散式拒絕服務攻擊以及類似的顧慮,並非只有 Microsoft 才會遇到。面對這類問題時,您該怎麼做,才能將合法訊息安全送達使用者手上,同時又確保傳訊環境不受非法惡意資料潮的大肆侵襲呢?

要做到可靠的傳訊保護作業,其中一個方法就是在網際網路及生產環境之間的周邊網路上,部署 Exchange Server 2007 Edge Transport Server 和 Forefront Security for Exchange Server。此舉相當於在您的周邊部下高達 10 個以上 Edge Transport 代理程式的組織團隊,協助您保護實際執行系統和使用者。而這種盡量在最初階段封鎖不速之客的作法,效果也相當卓著。其實理想的情況是在資料送達伺服器之前就進行封鎖,以免加重傳訊環境在發生緊急狀況時的負擔。但是保護傳訊作業不僅僅是封鎖郵件而已。

我們把 Exchange Server 2007 和 Forefront Security for Exchange Server 的防堵垃圾郵件和防毒代理程式的架構和主要功能,分為兩個部分來討論,這是第一個部分。為了讓解說更切合實際,我將在本文告訴各位,如何根據 Microsoft 在公司生產環境中所用的傳訊保護設計,建立一個測試實驗室。接著再詳細說明 Exchange Server 2007 的 Edge Transport 架構。

我將在本文大量使用指令碼和批次檔,把最重要的組態作業自動化。這些檔案包含了解說個別執行步驟的備註。您可以從 TechNet Magazine 網站 (technetmagazine.com/code07.aspx) 上下載這些指令碼。

Edge Transport 拓樸

[圖 1] 所示範的,是 Microsoft IT 在公司生產環境中實作的 Edge Transport。在介紹 Edge Transport 架構之前,我想先提出幾項相當有趣的設計功能。如果您對詳細的完整實作感興趣,請參閱「Exchange 資源」資訊看板中所參照的 IT 百寶箱白皮書。

[圖 1] Microsoft 內部的 Edge Transport 拓樸

[圖 1]** Microsoft 內部的 Edge Transport 拓樸 **(按影像可放大)

您在分析 [圖 1] 時,請注意 Micorosoft 內部的 Edge Transport 拓樸在冗餘方面做得相當完善,絕不容單點失敗發生。為了取得負載平衡,Microsoft IT 在外部使用 DNS 循環配置資源,並且使用傳訊連接器,在內部連接多個 Bridgehead。另外值得注意的一點是,所有的傳輸伺服器 (Hub Transport 和 Edge Transport),都是執行 Forefront Security for Exchange Server 來掃描病毒,讓 Microsoft IT 得以在郵件扺達郵件路由拓樸的傳輸伺服器時,掃描所有輸入、輸出和內部郵件。

另一項重要的安全設計功能是,Edge Transport Server 並不屬於公司 Active Directory® 環境的一部分。事實上,您根本不需要將 Edge Transport Server 部署在任何 Active Directory 樹系上。但是為了維護管理架構一致、套用共同的原則集以及支援單一登入,Microsoft IT 把所有的 Edge Transport Server 都部署在外部網路樹系上,與生產環境區隔開來。

最後,您可以清楚看到所有來自網際網路的郵件,都是透過北美的 Edge Transport Server 送達 Microsoft,至於都柏林和新加坡的 Edge Transport Server,則只負責處理輸出郵件。這種將所有輸入流量集中在北美 Edge Transport Server 的好處是,集中控制安全保護和垃圾郵件防堵,以防止輸出郵件從大型區域資料中心流向內部傳訊骨幹。

Microsoft 內部的 Edge Transport 拓樸是由 Microsoft IT 系統工程師 Omesh Desai 負責設計。當我向 Omesh 請教最重要的設計功能時,他說道:「我們的 Edge Transport 設計是採用原始的 Exchange 垃圾郵件防堵和防毒功能,在傳訊骨幹中以多層次進行傳訊保護。雖然傳訊周邊網路安全被視為第一優先,但是簡單的管理模型對我們來說也是很重要的。Edge Transport Server 可以幫助我們透過更緊密的防火牆組態來提升安全性,並且透過 IP 信譽服務、自動內容篩選器更新、安全清單彙總以及電子郵件郵戳驗證,提升篩選垃圾郵件的精確度。不但所有內部伺服器對伺服器的通訊一律預設加密,與外部目的地的通訊也會儘可能加密。

我們在 Edge Transport Server 中使用兩個雙核心 64 位元處理器,以及 8 GB 的記憶體。其中有六部伺服器負責維持兩個資料中心的負載平衡,足以應付像網際網路病毒侵擾時所發生的郵件提交量暴增危機。

Edge Transport 測試實驗室

準備測試實驗室

由於網域名稱和私密 IP 位址最好以虛構為宜,因此我使用 AdventureWorks.com 以及 192.168.xxx.0-24 範圍內的 IP 位址。我的目的並不在測試負載平衡或容錯能力,因此沒有安排其他多餘的系統或防火牆陣列 (當然嘍,為了安全起見,我們不能在此討論 Microsoft IT 實際所用的防火牆系統)。反正這些詳細資訊對於這個測試實驗室也不重要。

我的測試實驗室是使用 ISA Server 2006,因為它可能是 Exchange Server 2007 最常用的防火牆系統。在外部和內部防火牆執行 ISA Server 2006,可以幫助我們將測試實驗室保持在適當的複雜度,但是在生產環境中,我們建議使用多樣化的外部和內部防火牆系統來提升安全性。我沒有部署 IP 安全性 (IPsec) 原則,也沒有準備專供傳輸層安全性 (TLS) 所用的環境,因為這些主題都不在本文的討論範圍內。

不過我用了虛擬機器和 32 位元的評估軟體,這些都可以從 Microsoft 網站上下載。Microsoft 的生產環境並不支援 32 位元版本的 Exchange Server 2007,不過這在測試環境中並不是問題。

在可能範圍內,我的測試實驗室會盡量採用預設值,只有 IP 組態、防火牆和 DNS 區域,才需要在執行 Exchange Server 2007 安裝以及為生產環境訂閱 Edge Transport Server 之前特別注意。如需有關 IP 組態的詳細資訊,請參閱下載區的 Test Lab—IP Configuration.xls 檔。如果您是使用同樣的 IP 位址指派,就可以直接在 ISA01 電腦上執行 ISA01_Firewall_Policies.vbs 指令碼,快速設定一個名為 ISA01 的外部防火牆,並且在內部防火牆 (ISA02) 使用 ISA02_Firewall_Policies.vbs。下載區也含有設定 DNS 伺服器所用的批次檔 (INTERNET01_DNS_Config.bat、AD01_DNS_Config.bat 和 AD02_DNS_Config.bat)。由於這些批次檔是使用 DNS 命令列工具 (dnscmd.exe),因此必須安裝 Windows 支援工具,否則就必須在 DNS 主控台以手動方式建立 DNS 記錄。

為了防止現有環境的干擾,我的測試實驗室並未連接網際網路。這種隔離是一項很好的預防措施。這種作法會使所有下載的簽章更新檔、IP 信譽和內容篩選器更新檔失效,但是就測試來說倒沒什麼影響。為了防止錯誤訊息出現,請前往 Forefront Server Security 管理員主控台的 [掃描器更新],將所有掃描引擎的更新頻率設為一次,然後指定過去的一個日期。

若要探勘這些功能實際運作的情況,最好是建立一個測試環境 — 根據常識判斷,千萬不要使用生產環境來進行測試。這個測試環境最少要有一部伺服器執行 Exchange Server 2007 來負責信箱、用戶端存取和 Hub Transport server role。另外還要準備一部 Exchange 伺服器來執行 Edge Transport server role。如果您會執行 Install-AntispamAgents.ps1 指令碼 (在 Hub Transport Server 的 %ProgramFiles%\Microsoft\Exchange Server\Scripts 資料夾中) ,將所有的傳輸代理程式部署在多角色的伺服器上,就可以跳過 Edge Transport Server 安裝。但是這個方法與 Microsoft IT 部署不太一樣。真正的測試實驗室還需要再多加幾部伺服器才算可行。[圖 2] 所示範的,是我在研究本文所用的測試環境。下載區中提供比較詳盡的圖例說明。有關準備實驗室的詳細資訊,請參閱「準備測試實驗室」資訊看板。

[圖 2] Edge Transport 測試環境

[圖 2]** Edge Transport 測試環境 **(按影像可放大)

在訂閱 Edge Transport Server 和設定相關連接器時,Microsoft IT 會移除所有預設的連接器,然後建立四個傳送連接器,與不同類型的簡易郵件傳送通訊協定 (SMTP) 主機和內部 Hub Transport Server 有效進行通訊。第一個傳送連接器是一般的網際網路連接器,專供所有不符合特定位址空間定義的目的地使用。

第二個傳送連接器是含有詳細位址空間定義的網際網路連接器,專供不支援延伸 SMTP (HELO 網域) 的已知目的地使用。Microsoft IT 將這個連接器的 ForceHELO 參數設為 $true,目的是在建立 SMTP 連線時,避開不必要的 EHLO、失敗回應 500、HELO 序列。

第三個傳送連接器是含有詳細位址空間定義的網際網路連接器,專供合作夥伴及其他支援 TLS 以透過加密連線 (TLS 網域) 進行安全通訊的遠端網域使用。這個連接器會將 RequireTLS 參數設為 $true。

第四個傳送連接器是一個輸入連接器,負責將接收到的網際網路郵件轉送到公司環境的 Hub Transport Server。再次強調,如需有關 Edge Transport Server 組態的詳細資訊,請參閱本文結尾「Exchange 資源」資訊看板中所參照的 IT 百寶箱白皮書。

此處我完全採用根據 Omesh 建立供內部 Microsoft IT 使用之指令碼所寫的程序,將 Microsoft IT 型的連接器拓樸套用到測試實驗室。為了安全方面的顧慮,我大幅更動並且縮短了個別命令,但是所得出的連接器拓樸仍不失為 Microsoft IT 拓樸。其步驟如下:

  1. 在多角色 Exchange Server (HUB-MBX-01) 和 Edge Transport Server (EDGE01) 上,移除預設連接器。
  2. 在 HUB-MBX-01 上,執行您可以在本文下載區找到的 HUB-MBX-01_recv_connector.ps1 指令碼,以建立新的接收連接器。
  3. 在 EDGE01 上,執行 EDGE01_recv_connector.ps1 指令碼,以建立兩個新的接收連接器,供內部和外部傳訊連線使用。
  4. 在 EDGE01 上,執行下面這個命令來建立訂閱檔:
    New-EdgeSubscription -FileName 
    "c:\subscriptionfile.xml" 

然後將得出的訂閱檔複製到 Hub Transport Server 的根資料夾 (c:\subscriptionfile.xml)。

5. 在 HUB-MBX-01 上,確定訂閱檔的路徑是 c:\subscriptionfile.xml,然後執行 HUB-MBX-01_complete_subscription.ps1 指令碼。這個指令碼會匯入 Edge 同步處理的訂閱檔 (而不需要建立自動傳送連接器);建立網際網路和內部連線用的傳送連接器;以及透過 Edge 同步處理,將得出的組態複寫到 Edge Transport Server。

6. 您可以利用 Contoso.User@contoso.com 和 ,將測試郵件從網際網路主機傳送到 ,然後回覆收到的郵件,以確保輸入和輸出郵件的傳送作業正常,藉此驗證組態是否正確。

我建議您以記事本個別開啟指令碼檔案,並且分析這些指令碼執行組態所用的 Cmdlet 和參數。這些 Cmdlet 和參數的詳細資訊,都記錄在線上的 Exchange Server 2007 的產品文件中。

Edge Transport 架構

現在讓我們開始探討 Edge Transport 代理程式吧。從我開始安裝 Edge Transport server role 那一刻開始,它就在等待誰能開口說 HELO 或 EHLO 了。如果您在 Edge Transport Server 上執行 Get-TransportAgent Cmdlet,應該會看到 [圖 3] 所列的 11 個項目。在預設情況下,它會啟用所有的代理程式,以適當的設定提供傳訊保護。

Figure 3 傳輸代理程式

SMTP 接收代理程式
連線篩選代理程式
位址重寫輸入代理程式
Edge 規則代理程式
內容篩選器代理程式
寄件者識別碼代理程式
寄件者篩選代理程式
收件者篩選代理程式
通訊協定分析代理程式
附件篩選代理程式
路由代理程式
位址重寫輸出代理程式
FSE 路由代理程式
 

Get-TransportAgent Cmdlet 和 [圖 3] 會根據優先順序列出代理程式,但是這並非代理程式執行工作的順序。工作順序主要是根據登錄代理程式的 SMTP 接收事件和路由事件順序而定。若要查看代理程式和事件的搭配方式,請看看 [圖 4] 所示的圖表,該圖表將示範傳輸代理程式整合到 Edge Transport 架構的情形。

[圖 4] Edge Transport 架構中的傳輸代理程式

[圖 4]** Edge Transport 架構中的傳輸代理程式 **(按影像可放大)

傳輸事件是發生在處理郵件期間各個不同的階段發生,以啟動其他程式碼來篩選垃圾郵件、掃描病毒以及其他工作。在這個耦合鬆散且可以擴充的設計中,Edge Transport 處理序 (EdgeTransport.exe) 是扮演事件來源的角色。事件處理器 (其實就是傳輸代理程式) 是以 Microsoft® .NET Framework 2.0 為根據的管理委派物件,它是登錄在事件來源來接收回呼通知。

[圖 5] 所示範的,是所有與 Forefront Security 一起安裝在 Edge Transport Server 之代理程式的事件登錄。由於代理程式登錄數量相當龐大,因此這些登錄可能不太容易排序,不過您也別太失望。如果您在 Edge Transport Server 執行 Get-TransportPipeline | Format-List 命令,就可以更方便的分析每一個個別傳輸事件的登錄。不過您必須確定 Microsoft Exchange Transport Service (MSExchangeTransport.exe) 正在執行中,而且自從上次重新啟動服務之後,至少已經透過 Edge Transport Server 傳送一封郵件了。根據結果顯示,多個代理程式可以登錄同一個事件類型,而個別的代理程式也可以登錄多個事件。事件登錄完全根據對應代理程式的處理需求而定。

[圖 5] 傳輸代理程式的事件登錄

[圖 5]** 傳輸代理程式的事件登錄 **(按影像可放大)

在這些事件當中,最重要的一個事件是 OnSubmittedMessage 路由事件,它是在郵件扺達提交佇列時觸發。所有的郵件都必須經由這個佇列傳遞,無論它們是經由 SMTP、檔案系統還是其他任何機制進來都一樣。分類程式是 Exchange Server 傳輸架構的核心元件,負責收件者解析、郵件分枝和路由、以及產生傳遞狀態通知 (DSN)。因此,對於必須處理所有接收郵件的代理程式來說,OnSubmittedMessage 事件是一個絕佳的登錄選擇。FSE 路由代理程式是一個 Forefront Security 元件,它登錄 OnSubmittedMessage 事件的目的,是為了將所有接收到的郵件傳遞到病毒掃描引擎。正因為 FSE 路由代理程式是登錄 OnSubmittedMessage 事件,因此沒有一封郵件可以逃過防毒解決方案的法眼。

那為什麼不乾脆就讓所有的代理程式都登錄 OnSubmittedMessage 事件,一舉完成工作就好?那是因為您希望在伺服器確認傳遞成功之前,能夠儘早封鎖不要的郵件。萬一遭到垃圾郵件或病毒的攻擊,伺服器可能就得處理 9000 萬封不要的郵件,產生 9000 萬份非傳遞報告 (NDR),而對無辜群眾造成重大威脅。垃圾郵件和病毒攻擊幾乎都是使用偽造的源頭資訊。傳送幾百萬個沒有建立原始郵件的 NDR 給收件者,不僅浪費您的資源和目標公司的資源,也讓不懷好意的使用者得以趁機發動郵件癱瘓和 DDoS 攻擊。為了保護自己和他人的安全,一定要阻止不懷好意的送件人。

不過傳輸代理程式必須在伺服器以 250 OK 狀態碼確認接收資料之前,中斷 SMTP 與遠端主機的交談,才能有效封鎖郵件。根據 SMTP 儲存再轉寄 (store-and-forward) 原則,只要不確認郵件傳遞,您的伺服器都可以安全捨棄所有接收的資料,而不會產生 NDR。SMTP 接收代理程式正可以做到這點。當遠端主機連接到伺服器、建立 SMTP 工作階段、傳輸 SMTP 動作指令、提交郵件以及終止連線時,傳輸管線都會根據 SMTP 接收事件來呼叫這些代理程式,因此 SMTP 接收代理程式會與 SMTP 工作階段互動 ([圖 6] 列出了與每一個步驟相關聯的 SMTP 接收事件)。由於具備在傳遞之前拒絕郵件、以及切斷遠端 SMTP 主機連線的能力,因此所有的 Exchange Server 2007 反垃圾郵件代理程式,都被當作 SMTP 接收代理程式加以實作。

Figure 6 SMTP 工作階段事件

動作 相關事件
連線到伺服器 OnConnectEvent
建立 SMTP 工作階段 OnHeloCommand、OnEhloCommand、OnAuthCommand、OnEndOfAuthentication
傳輸 SMTP 動詞 OnMailCommand、OnRcptCommand、OnDataCommand、OnNoopCommand、OnHelpCommand
提交郵件 OnEndOfHeaders、OnEndOfData
拒絕命令或郵件 OnReject
重設連線 OnRsetCommand
終止連線 OnDisconnect
   

您必須認出 SMTP 接收代理程式和路由代理程式在處理方面的差異。路由代理程式對於郵件內容具有完整的存取權,而 SMTP 接收代理程式就要看情形而定,因為這些代理程式必須與 SMTP 工作階段互動。舉個例說,垃圾郵件篩選器必須等到遠端主機真的將郵件傳送出去之後,才能對郵件內容採取動作。因此您一定要將代理程式登錄到正確的 SMTP 接收代理程式才行。如需更深入的探討,請參閱「開發傳輸代理程式」資訊看板。

Exchange 資源

敬請期待

讓我們先休息一下,再繼續探討傳輸架構和測試案例吧。我所涵蓋的主題,小自 Microsoft IT 開發的 Edge Transport Server,大至傳輸管線中在處理郵件期間所觸發的內部事件,範圍相當廣泛。在接下來的兩部分系列連載中,我會以幾個有趣的測試案例分析 Edge Transport 代理程式的行為。

同時,我也建議您下載 Microsoft Visual Studio 2005 Professional Edition 的 90 天試用版(go.microsoft.com/fwlink/?LinkId=98043),遵循 Steve 的解說來編譯範例代理程式,並且將它安裝在您的測試環境中。這些工作相當簡單,就算不是開發人員也能順利完成。Exchange Server 2007 以 Visual Studio 2005 開發這些元件這麼方便,看來很快就會有越來越多的商務應用程式開始使用自訂代理程式了。

Kay Unkroth 是一位企業家,曾擔任過支援工程師、系統開發人員、諮詢人員、訓練人員和作者等職,鑽研 Microsoft 伺服器技術長達 15 年以上。同時他也是專營管理文件與本土化服務之 Biblioso Corporation 的合夥創辦人暨董事長。

© 2008 Microsoft Corporation and CMP Media, LLC. 保留所有權利;未經允許,嚴禁部分或全部複製.