通过服务创建适用于所有应用程序 运行 的 Windows 防火墙 API 规则
Creating a rule with the Windows Firewall API that applies to all applications run by a service
我正在尝试为 Windows 服务设置防火墙规则以拒绝所有入站和出站 TCP 和 UDP 连接,但使用 Windows 服务强化 API,遵循 VBScript 示例 here。
现在,该服务可能会产生新的进程(因为它是一个持续集成构建和测试代理),所以仅仅像上面的示例脚本那样设置 NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe"
是不够的 - 我需要一个规则来适用于服务所有 个应用程序运行。
但是,如果我尝试设置一个新的入站规则,其中据称可选的 ApplicationName
属性 没有在 INetFw
接口上指定,调用添加新的规则失败(在上面脚本的 wshRules.Add NewOutboundRule
行)。其他都对,就好像我指定了ApplicationName
,调用成功
有没有什么方法可以创建适用于 ApplicationName
所有可能值的规则,或者有其他替代方法吗?
经过一些实验,事实证明 WSH 规则是这样工作的:对 INetFwServiceRestriction::RestrictService
的调用(使用 restrictService=TRUE
)只需要包含被调用的主要可执行文件的名称启动服务。如果该进程使用任何其他可执行文件生成一个新进程,则默认情况下该新进程会阻止所有入站和出站网络连接。即使通过 INetFwServiceRestriction::Rules
.
为主要可执行文件添加了异常也是如此
因此,如果服务的辅助可执行文件 运行 需要网络访问权限,也有必要为这些可执行文件添加明确的 INetFwRule
例外。这是有道理的 - 对 RestrictService
的调用会阻止所有内容,然后可以添加包含应用程序名称的异常白名单。
我正在尝试为 Windows 服务设置防火墙规则以拒绝所有入站和出站 TCP 和 UDP 连接,但使用 Windows 服务强化 API,遵循 VBScript 示例 here。
现在,该服务可能会产生新的进程(因为它是一个持续集成构建和测试代理),所以仅仅像上面的示例脚本那样设置 NewOutboundRule.ApplicationName = "%systemDrive%\WINDOWS\system32\svchost.exe"
是不够的 - 我需要一个规则来适用于服务所有 个应用程序运行。
但是,如果我尝试设置一个新的入站规则,其中据称可选的 ApplicationName
属性 没有在 INetFw
接口上指定,调用添加新的规则失败(在上面脚本的 wshRules.Add NewOutboundRule
行)。其他都对,就好像我指定了ApplicationName
,调用成功
有没有什么方法可以创建适用于 ApplicationName
所有可能值的规则,或者有其他替代方法吗?
经过一些实验,事实证明 WSH 规则是这样工作的:对 INetFwServiceRestriction::RestrictService
的调用(使用 restrictService=TRUE
)只需要包含被调用的主要可执行文件的名称启动服务。如果该进程使用任何其他可执行文件生成一个新进程,则默认情况下该新进程会阻止所有入站和出站网络连接。即使通过 INetFwServiceRestriction::Rules
.
因此,如果服务的辅助可执行文件 运行 需要网络访问权限,也有必要为这些可执行文件添加明确的 INetFwRule
例外。这是有道理的 - 对 RestrictService
的调用会阻止所有内容,然后可以添加包含应用程序名称的异常白名单。