Windows 防火牆動態關鍵詞
重要
本文說明處於預覽狀態的功能或設定。 內容可能會變更,而且可能相依於預覽中的其他功能或服務。
Windows 防火牆包含稱為 動態關鍵詞的功能,可簡化 Windows 防火牆的設定和管理。
使用動態關鍵詞,您可以定義一組IP位址範圍、完整功能變數名稱 (FQDN) ,以及一或多個防火牆規則可以參考的 自動回應 選項。
設定動態關鍵詞
若要設定動態關鍵字,您可以使用:
- 防火牆 CSP,可與行動裝置 裝置管理 (MDM) 解決方案搭配使用,例如 Microsoft Intune
- Windows PowerShell
提示
Microsoft Intune 提供簡化的管理體驗,稱為可重複使用的設定群組。 如需詳細資訊,請 參閱將可重複使用的設定群組新增至防火牆規則的配置檔。
本文說明如何使用 Windows PowerShell 設定動態關鍵詞。
FQDN (的動態關鍵詞和完整功能變數名稱)
您可以藉由定義一組IP位址範圍或 FQDN 來設定動態關鍵字。 以下是使用 FQDN 時要考慮的重要事項:
- FQDN 支援可減少管理IP位址為動態且經常變更的IP規則的額外負荷
- FQDN 不會取代所有案例中的IP位址。 基於安全性和效能考慮,應盡可能使用IP位址
- 由於 DNS 延遲和其他因素,FQDN 規則可能會影響端點上的效能
- FQDN 不是安全的 DNS 服務。 FQDN 解析會使用端點的預設 DNS 設定
- FQDN 規則需要進行 DNS 查詢,才能將該 FQDN 解析為 IP 位址。 IP 位址的流量必須產生 FQDN 規則的 DNS 查詢
- 限制包括:透過 Proxy 存取的網站、安全的 DNS 服務、特定 VPN 通道設定、端點上的快取 IP
- 雖然允許部分限定功能變數名稱 (PQDN) ,但偏好使用 FQDN。 主機支援通配符
*
,例如*.contoso.com
FQDN 規則的兩個範例如下:
- 默認封鎖所有輸出和輸入,並允許特定輸出流量
- 默認封鎖所有輸入,並封鎖某些特定的輸出流量
注意
原生不支持輸入 FQDN 規則。 不過,您可以使用 預先串行化 腳本來產生規則的輸入IP專案。
注意
針對某些高度安全的環境,可以考慮針對輸出規則 封鎖 的默認設定。 不過, 輸入規則組 態絕對不應該以默認允許流量的方式變更。
在高安全性環境中,應維護所有應用程式的清查。 記錄應該包含應用程式是否需要網路連線。 系統管理員應該使用裝置管理解決方案,為每個需要網路連線的應用程式建立特定的新規則,並集中推送這些規則。
函式和已知限制
Windows 防火牆 FQDN 功能會使用網路保護外部註標驅動程式,檢查 DNS 查詢符合 FQDN 規則的 DNS 回應。 功能的一些重要功能和限制如下:
- 網路保護元件不會定期執行 DNS 查詢。 它需要應用程式執行 DNS 查詢
- Windows 防火牆會在裝置重新啟動時排清所有已儲存的已解析IP位址
- 網路保護不會同步檢查 DNS 回應,因為它不會在檢查期間保存 UDP 封包。 結果是應用程式在收到 DNS 回應後嘗試連線,但如果速度比防火牆規則更新更快,則會遭到封鎖的可能狀況
- 一般而言,應用程式有初始失敗連線的重試邏輯,因此對終端使用者而言,問題是透明的
- 有時元件在初始連線失敗時可能不會有重試邏輯。 解決方法有兩種:
- 用戶可以在正在使用的應用程式中叫用 重新 整理,而且應該會成功連線
- 系統管理員可以精確地使用 解除凍結 腳本,而這種情況發生在其環境中
FQDN 功能需求
以下是 FQDN 功能的需求:
- Microsoft Defender 防病毒軟體必須開啟並執行平臺版本或更新版本
4.18.2209.7
。- 若要確認,請開啟 [Windows 安全性],然後選取 [關於設定]>
- 網路保護必須處於 封鎖 或 稽核 模式。 如需詳細資訊,請 參閱檢查網路保護是否已啟用。
- 必須停用透過 HTTPS (DoH) 的 DNS。 若要設定慣用的瀏覽器,您可以使用下列設定:
- 套用裝置的預設 DNS 解析設定。 此功能不會提供 DNS 安全性或功能變更
提示
您也可以從該處下載 ADMX 檔案、遵循指示,並透過 gpedit.msc 進行本機測試進行設定。
使用 Windows PowerShell 管理動態關鍵詞
本節提供一些範例,說明如何使用 Windows PowerShell 來管理動態關鍵詞。 使用動態關鍵詞時要考慮的一些重要事項如下:
- 所有動態關鍵詞對象都必須有唯一標識碼 (GUID) 才能代表它們
- 防火牆規則可以使用動態關鍵詞,而不是針對其條件明確定義IP位址
- 防火牆規則可以同時使用動態關鍵詞和靜態定義的位址範圍
- 動態關鍵詞物件可以跨多個防火牆規則重複使用
- 如果防火牆規則沒有任何已設定的遠端位址,則不會強制執行規則。 例如,如果規則只
AutoResolve
以尚未解析的對象進行設定 - 如果規則使用多個動態關鍵詞,則會針對 目前 已解析的所有位址強制執行規則。 即使有無法解析的物件,也會強制執行規則。 更新動態關鍵字位址時,所有相關聯的規則對象都會更新其遠端位址
- Windows 不會強制執行規則與動態關鍵詞地址之間的任何相依性,而且可以先建立任一物件。 規則可以參考尚不存在的動態關鍵詞標識碼,在此情況下不會強制執行規則
- 您可以刪除動態關鍵字位址,即使防火牆規則正在使用該位址
允許輸出
以下是允許來自 PowerShell 之 FQDN 的範例腳本。
$fqdn
將變數值取代為您想要封鎖 (行 #1 的 FQDN) :
$fqdn = 'contoso.com'
$id = '{' + (new-guid).ToString() + '}'
New-NetFirewallDynamicKeywordAddress -id $id -Keyword $fqdn -AutoResolve $true
New-NetFirewallRule -DisplayName "allow $fqdn" -Action Allow -Direction Outbound -RemoteDynamicKeywordAddresses $id
您可以使用設定為 $true
或 $false
的 AutoResolve
參數來建立動態關鍵字位址。 如果 AutoResolve
設定為 $true
,則 Windows 會嘗試將 關鍵詞解析為 IP 位址。
封鎖輸出
以下是從 PowerShell 封鎖 FQDN 的範例腳本。
$fqdn
將變數值取代為您想要封鎖 (行 #1 的 FQDN) :
$fqdn = 'contoso.com'
$id = '{' + (new-guid).ToString() + '}'
New-NetFirewallDynamicKeywordAddress -id $id -Keyword $fqdn -AutoResolve $true
New-NetFirewallRule -DisplayName "block $fqdn" -Action Block -Direction Outbound -RemoteDynamicKeywordAddresses $id
顯示自動解析規則和相關聯的已解析IP位址
此範例示範如何顯示參數設定為 $true
的所有動態關鍵詞位址AutoResolve
,以及相關聯的已解析IP位址。
Get-NetFirewallDynamicKeywordAddress -AllAutoResolve
注意
在觀察到 DNS 查詢之前,不會填入 IP 位址。
將 FQDN 規則串行化
下列範例腳本會讀取目前的 Windows 防火牆設定、擷取 FQDN 型規則,以及在每個網域上執行 DNS 解析。 結果是這些規則的IP位址會「預先凍結」。
Get-NetFirewallDynamicKeywordAddress -AllAutoResolve |`
ForEach-Object {
if(!$_.Keyword.Contains("*")) {
Write-Host "Getting" $_.Keyword
resolve-dnsname -Name $_.Keyword -DNSOnly | out-null
}
}
類似的文稿可用來使用 nslookup.exe
來執行 DNS 解析:
Get-NetFirewallDynamicKeywordAddress -AllAutoResolve |`
ForEach-Object {
if(!$_.Keyword.Contains("*")) {
Write-Host "Getting" $_.Keyword
nslookup $_.Keyword
}
}
如果使用 nslookup.exe
,您必須在使用 封鎖所有輸出 狀態時建立輸出防火牆規則。 以下是建立輸出規則的 nslookup.exe
指令:
$appName = 'nslookup'
$appPath = 'C:\Windows\System32\nslookup.exe'
New-NetFirewallRule -DisplayName "allow $appName" -Program $appPath -Action Allow -Direction Outbound -Protocol UDP -RemotePort 53
封鎖所有輸出並允許某些 FQDN
在下一個範例中,會剖析應用程式清單以進行 FQDN 評估。 檢查第一次啟動 Microsoft Edge 時的流量時,會觀察到腳本中所列的 FQDN。
重要
這不是完整的清單,也不是建議。 這是如何評估應用程式以確保正確連線和運作的範例。
若要深入瞭解因特網連線的 Microsoft Edge 需求,請參閱 Microsoft Edge 端點的允許清單。
$domains = @(
'*.microsoft.com',
'*.msftconnecttest.com',
'assets.msn.com',
'client.wns.windows.com',
'config.edge.skype.com',
'ctldl.windowsupdate.com',
'dns.msftncsi.com',
'login.live.com',
'ntp.msn.com'
)
foreach ($domain in $domains) {
$id = '{' + (New-Guid).ToString() + '}'
New-NetFirewallDynamicKeywordAddress -Id $id -Keyword $domain -AutoResolve $true
New-NetFirewallRule -DisplayName "allow $domain" -Action Allow -Direction Outbound -RemoteDynamicKeywordAddresses $id
}
如需用來管理動態關鍵詞之 PowerShell Cmdlet 的詳細資訊,請參閱:
- Get-NetFirewallDynamicKeywordAddress
- New-NetFirewallDynamicKeywordAddress
- Remove-NetFirewallDynamicKeywordAddress
- Update-NetFirewallDynamicKeywordAddress
如需 API 結構的相關信息,請參閱 防火牆動態關鍵詞。