我尝试为Windows服务设置防火墙规则,使用Windows服务强化API拒绝所有入站和出站TCP和UDP连接,但主机和端口的白名单除外,遵循VBScript示例{{3} }。
现在,这个服务可能会产生新的进程(因为它是一个持续的集成构建和测试代理),所以仅仅像上面的示例脚本中那样设置NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe"
是不够的 - 我需要一个规则适用于服务运行的所有应用程序。
但是,如果我尝试设置一个新的入站规则,其中here接口上未指定所谓的可选ApplicationName
属性,则添加新规则的调用将失败(at上面脚本中的行wshRules.Add NewOutboundRule
。其他一切都是正确的,就像我指定ApplicationName
一样,呼叫成功。
是否有某种方法可以创建适用于ApplicationName
所有可能值的规则,或者某种替代方法?
答案 0 :(得分:2)
经过一些实验,结果证明WSH规则的工作原理如下:对INetFwServiceRestriction::RestrictService
(带restrictService=TRUE
)的调用只需要包含被调用以启动的主要可执行文件的名称服务。如果该进程使用任何其他可执行文件生成新进程,则默认情况下新进程会阻止所有入站和出站网络连接。即使通过INetFwServiceRestriction::Rules
为主要可执行文件添加了例外,也是如此。
因此,如果服务运行的辅助可执行文件需要网络访问,则还需要为这些可执行文件添加显式INetFwRule
例外。这是有道理的 - 调用RestrictService
会阻止所有内容,然后可以添加包含应用程序名称的异常白名单。