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 查询
- 限制包括:通过代理访问的网站、安全 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 的 DNS (DoH) 。 若要配置首选浏览器,可以使用以下设置:
- 设备的默认 DNS 解析设置适用。 此功能不提供 DNS 安全性或功能更改
提示
还可以从那里下载 ADMX 文件,按照说明进行操作,并通过 gpedit.msc 对其进行配置,以便进行本地测试。
使用 Windows PowerShell 管理动态关键字
本部分提供一些如何使用 Windows PowerShell 管理动态关键字的示例。 使用动态关键字时需要考虑的一些重要事项包括:
- 所有动态关键字 (keyword) 对象必须具有唯一标识符 (GUID) 才能表示它们
- 防火墙规则可以使用动态关键字,而不是为其条件显式定义 IP 地址
- 防火墙规则可以使用动态关键字和静态定义的地址范围
- 动态关键字 (keyword) 对象可以跨多个防火墙规则重复使用
- 如果防火墙规则没有任何配置的远程地址,则不会强制实施该规则。 例如,如果规则仅
AutoResolve
配置了尚未解析的对象 - 如果规则使用多个动态关键字,则会对 当前 解析的所有地址强制实施该规则。 即使存在未解析的对象,也会强制实施该规则。 更新动态关键字 (keyword) 地址时,所有关联的规则对象都会更新其远程地址
- Windows 不会在规则和动态关键字 (keyword) 地址之间强制实施任何依赖项,并且可以先创建任一对象。 规则可以引用尚不存在的动态关键字 (keyword) ID,在这种情况下,不会强制实施规则
- 即使防火墙规则正在使用动态关键字 (keyword) 地址,也可以删除该地址
允许出站
下面是允许从 PowerShell 使用 FQDN 的示例脚本。 将 $fqdn
变量值替换为要阻止的 FQDN (行 #1) :
$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
动态关键字 (keyword) 地址。 如果 AutoResolve
设置为 $true
,则 Windows 会尝试将关键字 (keyword) 解析为 IP 地址。
阻止出站
下面是阻止 PowerShell 中的 FQDN 的示例脚本。 将 $fqdn
变量值替换为要阻止的 FQDN (行 #1) :
$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
的所有动态关键字 (keyword) 地址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
}
}
类似的脚本可用于使用 执行 DNS 解析 nslookup.exe
:
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。
重要提示
这不是完整列表,也不是建议。 它是如何评估应用程序以确保正确连接和功能的示例。
若要了解有关 Internet 连接的 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 结构的信息,请参阅 防火墙动态关键字。