3

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

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

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

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

4

1 回答 1

3

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

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

于 2016-06-25T02:36:50.747 回答