Windows 防火牆其實是個非常不錯的玩意,只是一般人比較不清楚要如何游刃有餘的設定他,我這幾年經手過不少 Windows 伺服器,我發現設定錯誤的人其實蠻多的,而更有大部分的伺服器主機根本預設關閉 Windows Firewall 服務,只依賴客戶額外採購的硬體式防火牆來保護主機的網路安全,這篇文章裡我打算分享一些我在設定這些輸入/輸出規則的一些經驗與檢查現有防火牆規則的一些步驟,跟大家一起分享與探討,看是否有更好的方式能將 Windows 防火牆設定的更安全。
以下是開啟「具有進階安全性的 Windows 防火牆」的方式,你也可以直接執行 wf.msc 開啟此視窗:
我在替客戶設定與檢查防火牆規則時,會區分「輸入規則」與「輸出規則」,檢查的方法與步驟都類似:
1. 先以群組排序,找出所有「自訂」的防火牆規則
因為自訂防火牆規則無法歸類到特定群組,因此可以找出是否有系統管理員自行設定的防火牆規則,看是否有不適當的連線被開啟。
備註:如果以 Windows Server 內建的服務來說,幾乎所有內建的服務都會有相對應的規則定義,在大部分的情況下,系統管理者應該不需要自行定義規則才對,如果有的話,一定要在描述欄提供非常詳細的描述,否則就會被我停用或刪除。
2. 設定「依已啟用狀態篩選」
我們必須過濾出到底有哪些規則被不當啟用,所以專注在已啟用的規則即可。
3. 設定「依設定檔篩選」
在設定完「依已啟用狀態篩選」之後,我會依據不同的設定檔篩選來進一步分析在特定設定檔內是否有不符合規定的防火牆規則,如果你用顯示全部來看,有時後無法看出駭客可能的攻擊路徑,透過設定檔來看,你可以很清楚的知道這一條規則到底是用來防堵哪一個介面進來的封包!
我們從控制台的網路連線就可以看到你有多少網路的介面,而在 Windows 裡每個網路介面都會被歸類到一個「網路類別」,而這裡的網路類別就會自動套用如上圖的「防火牆設定檔」之中。如以下圖為例,我們的介面是「網域網路」,所以這個介面就會套用所有「網域設定檔」的防火牆規則,也代表我們只要選取上圖的「依網域設定檔篩選」即可專注在我們要檢查的所有規則,如此一來篩選出來的規則數量就會少很多,也比較容易看出問題。
4. 依據不同的群組來設定防火牆規則,盡可能不要自訂規則
在篩選完設定檔之後,你可以進一步透過「群組」來篩選這些規則,這些規則跟你目前的網路服務有非常直接的關係,而且微軟幫你定義好的規則比較完整,所以並不需要再自訂額外的規則。
話雖如此,規則定義的比較完整 並不等同於 安全的定義!所以還需要進一步檢查才行:
5. 針對輸入規則的部分,應注意「通訊協定、本機連接埠、程式、遠端位址」這四個欄位
由於是輸入規則,這部分必須特別小心,一個設定不妥當就會導致系統陷入風險,而且啟用的輸入規則越少越好,只要能降低攻擊的面積,就能有效降低被發現弱點的機會。
在設定「遠端 IP 位址」時,可以善用「預先定義的電腦集」來簡化防火牆規則的複雜度:
補充說明:雖然你設定的是「網域設定檔」,所有封包只會來自於網域內的網段,但請注意:網域內的網段包括該網段的所有 IP 位址,並不一定代表是網域內的主機!所以如果同網段內有其他非網域內的主機,也是有可能透過這個網路介面攻擊你,因此在設定網域設定檔時千萬不要掉以輕心的相信透過這個介面來的網路封包是安全的!
6. Windows 的預設輸出規則為「允許」,建議可視情況修改成「封鎖」
若要將輸出連線設定為「封鎖」,有可能會導致部分叢集服務發生異常,一般來說都是 RPC 之類的服務無法正常運作,想要這樣設定的人必須多加測試確認沒問題才能進行設定,否則會導致服務發生異常。請參考本文最後的 !! 重要觀念 !! 說明。
7. 適當的紀錄防火牆丟棄的封包,以利後續追蹤與分析
Windows 防火牆所記錄的資訊可以利用 LogParser 進行分析:
建議不同的設定檔使用不同的記錄檔名,以利區分。另外,預設的紀錄檔儲存路徑為:
C:\Windows\System32\LogFiles\Firewall
!! 重要觀念 !!
假設你有兩張網路卡,一張設定為「網域網路」,另一張設定為「公用網路」,在 Windows Server 2008 與 Windows Server 2008 R2 將會有不同的防火牆套用規則的結果,這點必須特別小心!
- 在 Windows Server 2008 版本,雖然 Windows 防火牆有三個設定檔,但事實上只有一個設定檔會生效,而且 Windows 會自動挑選最嚴格的規則來生效。
其中套用的順序為:公用設定檔 > 私人設定檔 > 網域設定檔
- 在 Windows Server 2008 R2 版本,Windows 防火牆會依據網路介面所設定的網路類別分別套用防火牆設定檔,這才是比較彈性的作法,在設定預設輸出規則為「封鎖」時也比較不容易出問題!
相關連結