winmgmt 與 限制指定Port口的解決方案
標題沒下的很好。
最近接觸了一套跑WMI的軟件,幫忙管理subnet內的Server的健康情況。
這套軟件是跑WMI的,所以需要WMI Service。但當我做完所有要求的設定並成功地開始監控Client Server時,安全憂慮就開始產生了。
要一台Server A去監管另一台Server B,需要用到網路和端口,可是我一開始留意到的是,當Server A 連線到 Server B後,Server B 卻產生一個動態端口去讓Server A連接,這大大挑戰了防火牆設定的難度。
以下文章記錄了小弟研究解決方案的心路歷程(笑),難度可能是大學階段吧。
整個軟件(似乎太多數軟件)是這樣跑的。
1. A訪問B的135Port(RPC),嘗試與B連線。
2. A與B建立連線後,B的RPC找尋一個可用的端口,呼叫winmgmt聆聽,並將端口資訊傳回給A。(編按:注意! 將端口資訊傳回給A是RPC的工作,並不是winmgmt的工作,因為到現在為止A的Client只有和B的135Port連線,而端口資訊是經由這條連線回傳的,這是由擷取的封包中得到的答案)
3. A收到B的winmgmt聆聽端口後,嘗試對此端口建立連線,一旦成功則從此連線中擷取B的wmi資料。
就是以上這麼簡單的流程,但中間一旦隔一層防火牆,即時出現問題。A->B開B的135Port是肯定的了,問題是步驟2的端口,到底要開甚麼呢? 這將視乎RPC在當時找到哪一個可用的端口給winmgmt用,而預設情況下,RPC會開1025-5000中的其中一個Port,大概會從1025開始一個一個嘗試吧,如果防火牆中把1025-5000開起來,在網絡安全的角度裡似乎不太合理。
既然是RPC找的端口,當然方向是只好從RPC著手。在上述的理據中,很容易讓人聯想到,假如能限制RPC開放端口的範圍,問題就好解決了。當我知道這事實之後,前途一片光明,因為要設定RPC的方法太好找了。
解決:如果你不想手動地搞到註冊表,你需要一件工具去輔助你。
上述網址有個rktool.exe,是給Window Server 2003用的,裡面有很多工具,其中一件叫rpccfg.exe的工具,可以讓你設定RPC。
如果你想讓winmgmt落在一些不常用的端口中,如 60000-60030,只開30個端口,則只要在command prompt執行
rpccfg.exe -pe 60000-60030 -d 0
重新啟動電腦後,所有經由RPC啟動的Service都會落在上述的範圍中。
這方法很簡單,亦稍為對防火牆設定有重要幫助,但我還想找出方法去分派一個固定端口給winmgmt使用的方案。
參考資訊:
留言