我们正在将 Windows 10 LTSC 映像部署到多台设备。该映像配置了一个管理员用户和第二个非管理员用户。非管理员用户是设备日常使用的主要帐户。配置的另一部分是为一组自定义应用程序提供防火墙规则。
此防火墙配置目前给我们带来了麻烦:
大多数预捕获图像配置都是由 Powershell 脚本驱动的 - 包括防火墙部分 - 使用管理员帐户。
该脚本最终使用 Invoke-Expression 从 Powershell 内部调用“netsh advfirewall ...”,并使用脚本参数。下面显示了一个示例:
netsh advfirewall firewall add rule name='Custom App Rule' enable=Yes profile=Domain,Private,Public dir=In action=Allow protocol=any localip='Any' remoteip='Any' program="C:\Program Files (x86)\Some Company\Bin\CustomApp.exe" edge=deferapp
之后,我们可以通过 Windows Defender 防火墙编辑器(“wf.msc”)检查该条目是否已创建(从导出列表输出 - 文本制表符分隔;制表符更改为逗号以节省空间):
Name,Group,Profile,Enabled,Action,Override,Program,Local Address,Remote Address,Protocol,Local Port,Remote Port,Authorized Users,Authorized Computers,Authorized Local Principals,Local User Owner,Application Package
Custom App Rule,,All,Yes,Allow,No,C:\Program Files (x86)\Some Company\Bin\CustomApp.exe,Any,Any,Any,Any,Any,Any,Any,Any,Any,Any
或者重新格式化以提高可见性:
Name = Custom App Rule
Group
Profile = All
Enabled = Yes
Action = Allow
Override = No
Program = C:\Program Files (x86)\Some Company\Bin\CustomApp.exe
Local Address = Any
Remote Address = Any
Protocol = Any
Local Port = Any
Remote Port = Any
Authorized Users = Any
Authorized Computers = Any
Authorized Local Principals = Any
Local User Owner = Any
Application Package = Any
配置过程中没有出现表明存在问题的错误消息。
重新启动系统会自动将我们登录到非管理员帐户(这是设计使然),并启动我们的“customapp.exe”。这反过来会触发意外的防火墙提示:
Windows Defender Firewall has blocked some features of this app
Your network administrator can unlock this app for you.
...
Path: C:\program files (x86)\some company\bin\customapp.exe
Network location: Public, private networks
果然,在检查 Windows Defender 防火墙编辑器时,我们的“customapp.exe”已创建了两个新的“阻止”规则:一个用于 TCP,一个用于 UDP(两者的配置文件均为公共)。唯一的额外区别似乎是“程序”中的路径全部是小写字母。尝试将应用程序与规则匹配时,路径中的大写字母是否重要?
关注点:
- 为什么我们专门为我们的应用程序创建的防火墙规则似乎被忽略了?
- 我们是否错误地使用了“netsh”?正确的方法是什么?
- 是否有任何日志可以提供类似信息:应用程序 A 请求对 X 进行网络访问,检查防火墙规则 1 ... n,规则 y 由于 z 而不适用?(pfirewall.log 似乎仅列出 IP/端口,但没有列出应用程序名称 - 至少默认情况下。)
感谢您花时间阅读本文并就此问题提出建议。