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

时间:2016-06-14 10:52:35

标签: windows windows-services windows-firewall windows-firewall-api

我尝试为Windows服务设置防火墙规则,使用Windows服务强化API拒绝所有入站和出站TCP和UDP连接,但主机和端口的白名单除外,遵循VBScript示例{{3} }。

现在,这个服务可能会产生新的进程(因为它是一个持续的集成构建和测试代理),所以仅仅像上面的示例脚本中那样设置NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe"是不够的 - 我需要一个规则适用于服务运行的所有应用程序。

但是,如果我尝试设置一个新的入站规则,其中here接口上未指定所谓的可选ApplicationName属性,则添加新规则的调用将失败(at上面脚本中的行wshRules.Add NewOutboundRule。其他一切都是正确的,就像我指定ApplicationName一样,呼叫成功。

是否有某种方法可以创建适用于ApplicationName所有可能值的规则,或者某种替代方法?

1 个答案:

答案 0 :(得分:2)

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

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