使用Windows防火墙API创build适用于所有由服务运行的应用程序的规则

我正在尝试为Windows服务设置防火墙规则,以拒绝所有入站和出站TCP和UDP连接,除了使用Windows Service Hardening API的主机和端口白名单之外,请遵循此处的VBScript示例。

现在,这个服务可能产生新的进程(因为它是一个持续的集成构build和testing代理),所以仅仅设置NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe"NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe"上面 – 我需要一个规则适用于服务运行的所有应用程序。

但是,如果我尝试设置新的入站规则,在INetFw接口上未指定可选的ApplicationName属性,则添加新规则的调用将失败(位于上面脚本的wshRules.Add NewOutboundRule行中)。 其他一切都是正确的,就好像我指定了ApplicationName ,调用成功了。

有什么方法可以创build适用于ApplicationName所有可能值的规则,或者是一些替代方法吗?

经过一番实验,事实证明,WSH规则是这样工作的:对INetFwServiceRestriction::RestrictService (带有restrictService=TRUE )的调用只需要包含被调用来启动服务的主要可执行文件的名称。 如果该进程使用任何其他可执行文件产生新进程,则默认情况下新进程将阻止所有入站和出站网络连接。 即使通过INetFwServiceRestriction::Rules为主可执行文件添加了异常,情况也是如此。

因此,如果由服务运行的辅助可执行文件需要网络访问,则还需要为这些可执行文件添加显式的INetFwRule异常。 这很有道理 – 对RestrictService的调用会阻止所有内容,然后可以添加包含应用程序名称的例外白名单。