淺談如何鎖定AD動態RPC埠範圍

像教授發表於2017-11-26

 


談到 RPC Dynamic Port Range Restriction (動態RPC 埠範圍限制)的中文類文章很少很少,希望籍此文淺談一下AD Dynamic Port Range 在 Server 2008 / Server 2008 R2上是如何做限制的,當大家有需要的時候,可以做一個參考。選 AD 來舉例,是因為AD是生產環境中 IT 其中最重要的一環了,假如能對AD的Domain Controller做埠範圍限制,其他伺服器做類似改變就更有信心了。

為什麼Dymanic Port Range 要提及呢?因為這個預設動態埠範圍在 Server 2008/2008 R2改變了!一般的企業可能對此還沒有很多的留意,因為很可能內網是沒有防火牆的, 但對於對資料敏感的機構,例如某些銀行或金融機構,他們可能在內網豎起了重重的防火牆,這就不得不提到防火牆在Server 2008/Server 2008 R2情況下防火牆要開什麼新埠的問題,而Server 2008之後使用的埠哦和以前Server 2003的環境有差異,不能照搬。

 


什麼是RPC

 

“RPC 是一種程式間通訊 (IPC) 方法,客戶端和伺服器可使用這種方法來進行相互之間的通訊。簡單地說,RPC 可被程式(通常是客戶端計算機上的程式)用來執行伺服器計算機上的程式。例如,Microsoft Outlook 客戶端可通過使用 RPC 與 Microsoft Exchange Server 通訊。客戶端計算機會使用某些引數將訊息傳送到伺服器計算機。而伺服器則會以一條包含執行程式的結果的訊息響應客戶端。

此過程的組成部分是終結點,即計算機上的名稱、埠或埠組,由伺服器監視經過其傳入的客戶端請求。更具體地講,它是用於 RPC 的伺服器程式特定於網路的地址。

終結點對映程式 (Endpoint Mapper) 是 RPC 子系統的一個組成部分,負責響應客戶端要解析動態終結點的請求。在某些情況下,終結點對映程式還負責動態地將終結點分配給伺服器。

另一個重要的 RPC 元件就是 Locator 服務。它維護網路上的 RPC 服務和伺服器列表。Windows 客戶端會連線到伺服器訊息塊 (SMB) 埠(TCP 139 和 445)上的域控制器,並通過 Locator 服務搜尋 RPC 服務或伺服器。

大多數內建的 Windows 服務都通過 RPC 相互通訊。例如,證書服務、DCOM、FRS、MSMQ、MAPI 和 Active Directory 複製服務都使用 RPC 來進行通訊。因此,如果 RPC 服務不能網路上正常執行,則您可能就會遇到很多通訊問題。

在RPC通訊中,Endpoint Mapper 是一個用來儲存RPC服務資訊的資料庫。RPC服務偵聽TCP135埠來獲知哪個客戶端嘗試呼叫相關的RPC請求。當得到相關的客戶請求,RPC服務則動態分配一個埠供客戶端的伺服器通訊使用。” 


這些概念和原理看上去深奧難懂,有興趣可以去看看是RPC的工作原理 “How RPC Works”(只有英文網頁) 
http://technet.microsoft.com/zh-cn/library/cc738291(v=ws.10).aspx 

 

我在這裡只想通俗地說一下動態RPC埠運作的過程。 


動態RPC埠是如何運作的呢?舉一個例子,一臺應用程式伺服器( App Server ) 與域控制器( DC ) 之間的通訊,App Server先連線DC 的RPC Endpoint Mapper (RPC Locator Services, 使用TCP埠135),接著 RPC Endpoint Mapper再通知App Server應該要連線的埠(它是動態的,使用的埠可能是1024-5000,可能是49152-65535,也可能是其他預先預定的範圍),App Server得知埠後, 再連線DC上的這個動態埠。

 

 


RPC 動態埠在2003到2008/2008R2的轉變 

在由基於 Windows Server(R) 2003 的域控制器、基於 Microsoft(R) Windows(R) 2000 Server 的域控制器或以前版本的客戶端計算機組成的混合模式的域中,預設動態埠範圍為 1025 到 5000。Windows Server 2008 和 Windows Vista(R) 根據 Internet 號碼分配機構 (IANA) 建議增加了傳出連線的動態客戶端埠範圍。新的預設開始埠為 49152,新的預設結束埠為 65535。因此,必須在防火牆中增加遠端過程呼叫 (RPC) 埠範圍。如果您擁有包含一個 Windows Server 2008 伺服器的混合域環境,則允許從埠 1025 到 5000 的通訊以及從 49152 到 65535 的通訊。

埠 1025 到 5000,這是 Windows Server 2003 和以前版本的客戶端作業系統的預設埠範圍,對於 Windows Server 2008 和 Windows Vista,則為埠 49152 到 65535。

明顯,在Server 2008之後,假如Dynamic Port 按預設全開,49152-65535要放16000多個埠,比以前03時代多了很多。有些客戶就想在內網也限制防火牆埠以變得更安全。 


其實,微軟並不建議做埠範圍的限制,假如真的需要,仍然建議開放所有的動態埠,封裝在IPSEC或者VPN tunnel中。

“Generally speaking, we don`t recommend that you restrict traffic between servers on your internal network. If you must deploy firewalls between servers, you should use IPSEC or VPN tunnels to allow all traffic between those servers to pass through, regardless of source or destination ports. “ 

參考 
http://blogs.technet.com/b/askds/archive/2007/08/24/dynamic-client-ports-in-windows-server-2008-and-windows-vista-or-how-i-learned-to-stop-worrying-and-love-the-iana.aspx 

 

 

 

 


操作方法比較



 



然而,客戶真的要求要做AD Port Dynamic Port Restriction呢?微軟提供了3個KB說類似這個。 


方法一: 修改登錄檔,將AD複製鎖定到某個特定的埠。假如不做限制,預設AD會使用到動態埠去做AD複製,例如AD站點間的複製。這種方法只適用於AD複製。

 

Registry key 1 

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNTDSParameters 

Registry value: TCP/IP Port 

Value type: REG_DWORD 

Value data: (available port) 

Registry key 2 

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetlogonParameters 

Registry value: DCTcpipPort 

Value type: REG_DWORD 

Value data: (available port) 

參考 
http://support.microsoft.com/kb/224196 

 

方法二:修改登錄檔,將動態RPC埠限制在指定範圍內。可以對DHCP, WINS等可能使用到動態埠範圍做鎖定。

在以下路徑下新增一個名為Internet的項,並新增如下三個數值

HKEY_LOCAL_MACHINESOFTWAREMicrosoftRpc

數值名稱

資料型別

數值

Ports

REG_MULTI_SZ(多字串值)

自定義,例如5000~5020

PortsInternetAvailable

REG_SZ(字串值)

Y

UseInternetPorts

REG_SZ(字串值)

Y

參考 
http://support.microsoft.com/kb/154596

方法三:命令列輸入 


這種方法適用於Server 2008以及Server 2008 R2,以改變動態埠範圍。對於舊的Server 2003不適用。 埠範圍最少為255個。 


例如需要設定1000個埠,在防火牆上放埠50000-51000,那可以輸入

  • netsh int ipv4 set dynamicport tcp start=50000 num=1000
  • netsh int ipv4 set dynamicport udp start=50000 num=1000
  • netsh int ipv6 set dynamicport tcp start=50000 num=1000
  • netsh int ipv4 set dynamicport udp start=50000 num=1000

參考 
http://support.microsoft.com/kb/929851 

方法一當域功能級別不是Server 2008或以上版本,在複製SYSVOL資料夾時,會使用FRS(File Replication Service)。FRS可以用這樣做限制,但當域功能級別提升到Server 2008的時候,會使用DFS代替FRS進行AD複製,而DFS也是採用動態RPC埠,我們需要使用另外的DFSRDIAG.EXE程式來將其設定到一個靜態埠,這樣可能會增加我們操作的複雜度。而且方法一隻能用於AD的複製,假如這臺DC上執行了其他服務,那動態埠需要用其他方法做限制。方法二在沒有方法三的時候,在Server 2003時代用得比較多,現在有Server 2008之後有了命令列的方法,顯得更為方便。 


 

 

 


詳細操作

 

以下是方法三的詳細操作. 

 

1. netsh int ipv4 show dynamicport 命令可以列出Dynamic port range。



開啟命令列,Run as administrator

netsh int ipv4 show dynamicport tcp 

netsh int ipv4 show dynamicport udp 

netsh int ipv6 show dynamicport tcp 

netsh int ipv6 show dynamicport udp 

image_thumb 

 

2. 例如要將動態埠範圍限制到50000到53000,輸入

netsh int ipv4 set dynamicport tcp start=50000 num=3000 

netsh int ipv4 set dynamicport udp start=50000 num=3000 

netsh int ipv6 set dynamicport tcp start=50000 num=3000 

netsh int ipv6 set dynamicport udp start=50000 num=3000



3. 確認一下更改是否成功

netsh int ipv4 show dynamicport tcp 

netsh int ipv4 show dynamicport udp 

netsh int ipv6 show dynamicport tcp 

netsh int ipv6 show dynamicport udp

image_thumb2 

4. 重啟並檢視Event Log看下有無異常。當所有伺服器都鎖定了埠範圍後,防火牆就可以做相應的設定了,將埠限制到50000-53000。 


 

回滾計劃 (Roll back plan) 

在生產環境,做任何的操作都需要備份和回滾計劃,特別是AD的操作,因為是用輸入命令的方法,所以輸入相應命令並重啟,就返回到原來的預設埠範圍49152-65535了。

netsh int ipv4 set dynamicport tcp start=49152 num=16384 

netsh int ipv4 set dynamicport udp start=49152 num=16384 

netsh int ipv6 set dynamicport tcp start=49152 num=16384 

netsh int ipv6 set dynamicport udp start=49152 num=16384

image_thumb3

 

一口氣寫完了,以上是淺談一下Dymanic Port Range 動態埠範圍做鎖定限制的方法,因行文稍顯倉促,如有錯漏,請多多指正。給點鼓勵吧,假如有大家的支援和回覆,下一節將說下做埠限制可能需要注意的一些技術和非技術性細節問題。

 




本文轉自 VirtualTom 51CTO部落格,原文連結:http://blog.51cto.com/virtualtom/831963,如需轉載請自行聯絡原作者


相關文章