Windows 10 防火墙出站规则配置问题:无法允许svchost.exe托管的Windows更新及传递优化服务联网
Windows 10 防火墙出站规则配置问题:无法允许svchost.exe托管的Windows更新及传递优化服务联网
大家好,我最近在配置Windows防火墙出站规则时卡壳了,想请各位帮忙看看问题出在哪。
我的核心需求
我想搭建一套严格的出站防火墙策略:
- 默认阻止所有出站流量,仅通过明确创建的规则放行
- 允许所有程序连接DNS(53端口)、DHCP这类基础网络服务端口
- 仅允许指定程序(比如浏览器)正常联网
- 仅允许两个系统服务联网:Windows Update服务和Delivery Optimization Service
环境基础信息
- 系统版本:Windows 10 x64 22H2,已安装所有最新更新补丁
- 目标服务的运行形式:两个服务都是以.dll文件形式托管在svchost.exe中,且每个svchost.exe实例仅运行一个服务(没有多服务共享一个svchost进程的情况)
- 服务权限:这两个服务都已设置为“不受限制”状态,拥有独立的S-1-5-80-xxx格式的服务SID,理论上可以被防火墙规则精准识别
我已经完成的配置操作
- 将防火墙的三个配置文件(公开、私有、域)全部设置为「阻止所有出站连接,仅允许规则明确放行」
- 创建了两条出站允许规则,分别对应Windows Update(服务短名
wuauserv)和Delivery Optimization Service(服务短名DoSvc),规则覆盖所有三个配置文件 - 通过PowerShell命令
Set-NetConnectionProfile将当前网络标记为私有网络
遇到的问题现象
- 浏览器等指定程序可以正常联网(DNS解析、HTTP/HTTPS访问都没问题),但Windows Update完全无法连接到服务器,重启服务后依然无效
- 查看防火墙日志和安全审计日志,发现是默认的阻止规则在生效:wuauserv对应的svchost.exe发起的TCP 443端口连接被拒绝
- 我用ProcessExplorer和SystemInformer工具确认过:被阻止的svchost进程确实属于wuauserv服务,且进程的安全令牌里包含对应的服务SID,按道理规则应该匹配,但就是没生效
尝试过的无效方案
- 试过网上一个针对类似问题的配置方案,调整后依然无法解决问题
- 临时禁用所有服务相关规则,改成直接允许svchost.exe整体出站,此时Windows Update可以正常更新,但这个方案不符合我的安全需求——因为svchost还托管了很多我不想放行的其他服务
补充验证的细节信息
我用PowerShell查看了规则的服务过滤配置,结果如下:
PS C:\Windows\system32> Get-NetFirewallRule -DisplayName 'Windows Update Service (tcp) - by service SID' | Get-NetFirewallServiceFilter Service : Any PS C:\Windows\system32> Get-NetFirewallRule -DisplayName 'Windows Update Service (tcp) - by service name' | Get-NetFirewallServiceFilter Service : wuauserv PS C:\Windows\system32> Get-NetFirewallRule -DisplayName 'Delivery Optimization Service (tcp) - by service SID' | Get-NetFirewallServiceFilter Service : Any PS C:\Windows\system32> Get-NetFirewallRule -DisplayName 'Delivery Optimization Service (tcp) - by service name' | Get-NetFirewallServiceFilter Service : DoSvc
另外我启用了WFP连接审计(执行命令:auditpol.exe /set /subcategory:"{0CCE9226-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable),导出日志后明确看到wuauserv的svchost进程被阻止:
"Index","TimeGenerated","EventID","Decision","Direction","Proto","SrcAddr","SrcPort","DstAddr","DstPort","Operation","ProcId","ProcPath","ProcCmdLine","SvcName","SvcDisplay" ... "209643","2023-12-10 10:32:51 PM","5157","Block","Out","TCP","192.168.0.249","63342","20.114.59.183","443","Connect","7472","C:\Windows\system32\svchost.exe","C:\Windows\system32\svchost.exe -k netsvcs -p -s wuauserv","wuauserv","Windows Update" ...
Windows防火墙日志里也有大量对应的DROP记录,示例如下:
2023-12-11 21:30:04 DROP TCP 192.168.0.249 40.127.240.158 59536 443 0 - 0 0 0 - - - SEND ...
我的疑问
到底是哪里配置出错了?怎么才能正确实现「仅允许指定svchost托管的服务出站」的目标?
麻烦大家帮忙分析下,谢谢!
备注:内容来源于stack exchange,提问作者shadowpool




