关于通过PowerShell修改Windows防火墙组策略设置以符合STIG V-17442要求的技术问询
通过PowerShell修改Windows防火墙组策略设置以符合STIG V-17442要求的技术问询
嗨,作为Windows安全领域的新手,你的问题提得非常清晰,先帮你理清几个关键概念和关系,再解决你的核心需求:
一、组策略防火墙设置和本地防火墙设置的关系
你提到的“Firewall Policy Settings”(标准术语是本地组策略对象(LGPO)中的防火墙配置)优先级远高于“Local Firewall Settings”(即Windows Defender防火墙本地设置):
- 当组策略中配置了防火墙相关选项(比如你要改的“应用本地防火墙规则”),本地防火墙的对应设置会被锁定,GUI里甚至可能无法修改,就算改了也不会生效
- 简单来说,组策略是“管控规则”,本地设置是“执行层”,组策略说了算,只有当组策略没有配置对应项时,本地设置才会生效
二、用PowerShell修改组策略中的“应用本地防火墙规则”为“否”
你之前用的Set-NetFirewallProfile是修改本地防火墙设置的,而STIG要求的是修改组策略层面的配置,所以没用。这里提供两种可靠的方法:
方法1:直接修改组策略对应的注册表项(适用于所有Windows版本,包括家庭版)
组策略的防火墙配置都存在HKLM:\Software\Policies\Microsoft\WindowsFirewall路径下,对应公开配置文件的“应用本地防火墙规则”项是AllowLocalFirewallRules,DWORD值设为0就是“否”:
# 先确认注册表路径存在,不存在就创建 if (-not (Test-Path "HKLM:\Software\Policies\Microsoft\WindowsFirewall\PublicProfile")) { New-Item -Path "HKLM:\Software\Policies\Microsoft\WindowsFirewall\PublicProfile" -Force | Out-Null } # 设置"应用本地防火墙规则"为"否" Set-ItemProperty -Path "HKLM:\Software\Policies\Microsoft\WindowsFirewall\PublicProfile" -Name "AllowLocalFirewallRules" -Value 0 -Type DWord -Force # 刷新组策略让设置立即生效 gpupdate /force
方法2:使用组策略PowerShell cmdlet(仅适用于Windows专业版/企业版,有组策略编辑器的版本)
如果你用的是专业版或企业版,可以直接通过Set-GPRegistryValue修改本地组策略对象:
# 修改本地组策略中的对应配置 Set-GPRegistryValue -Name "Local Group Policy Object" -Key "HKLM\Software\Policies\Microsoft\WindowsFirewall\PublicProfile" -ValueName "AllowLocalFirewallRules" -Type DWord -Value 0 # 刷新组策略 gpupdate /force
补充说明
执行这些命令需要以管理员身份运行PowerShell,否则会没有权限修改注册表或组策略。另外,修改后你可以通过gpedit.msc验证配置是否生效:进入计算机配置>Windows设置>安全设置>Windows Defender防火墙高级安全>Windows Defender防火墙属性>公开配置文件>自定义>规则合并,查看“应用本地防火墙规则”是否已经设为“否”。
备注:内容来源于stack exchange,提问作者Minh Tran




