让 Windows 防火墙忽略测试版本

让 Windows 防火墙忽略测试版本

我的计算机上运行着一个持续集成系统,它将测试构建输出放入系统上的临时文件中。
不幸的是,这意味着 Windows 防火墙将每个构建视为一个单独的应用程序,并为每个构建弹出通知,在测试运行过程中会有几个构建。
这些构建仅通过本地主机进行通信,因此绝对没有理由让它们通过防火墙。它们目前使用端口8081,但可以设置为任何值。

有没有办法让 Windows 防火墙直接阻止所有程序%TEMP%

Windows 防火墙已阻止此应用程序的某些功能

答案1

您收到此提示是因为没有与应用程序相关的明确规则。默认防火墙策略允许不匹配任何规则的出站连接,因此大多数情况下这与应用程序接受入站连接有关,这些连接默认情况下会被阻止,因此需要存在特定的防火墙规则才能允许它们通过防火墙。

Windows 防火墙将您的构建视为单独的程序,因为它们是具有不同路径的不同可执行文件。

有多种可能的方法可以解决这个问题:

让每个构建都设置一个规则

您可以创建防火墙规则,作为应用程序代码的一部分,或作为 CI 工具执行的后构建步骤。

如果你不想在可执行文件(或设置过程)中添加特定代码来设置规则,则可以让 CI 工具执行类似于下面的 PowerShell 脚本

此脚本将删除所有现有的测试构建防火墙规则,并添加允许当前构建的入站连接的规则:

Param
(
    [Parameter(Mandatory=$true)]
    [string] $BuildPath
)
function Add-TestBuildFirewallRule
{
    Param
    (
        [Parameter(Mandatory=$true)]
        [string] $BuildPath
    )
    $existingRule = Get-NetFirewallRule -Name YourApp-LatestTestBuild -ErrorAction SilentlyContinue
    if($existingRule -ne $null)
    {
        Remove-NetFirewallRule -Name YourApp-LatestTestBuild
    }
    New-NetFirewallRule -Name "YourApp-TestBuild" -DisplayName "Latest Test Build" -Description "Allow the latest test build to accept incomming connections" -Enabled True -Direction Inbound -Program $BuildPath
}
Add-TestBuildFirewallRule -BuildPath $BuildPath

为了使用提供的脚本,您需要:

  1. 在 CI 服务器上安装 PowerShell v4.0。Windows 8x 或 Server 2012 应该如此
  2. 将脚本保存在 CI 工具具有读取和执行权限的目录中,并以.ps1扩展名为
  3. 以管理员身份运行脚本 - 这是必需的,因为更改防火墙规则是一项特权操作
  4. 让您的 CI 工具使用类似于以下命令执行脚本: powershell.exe -ExecutionPolicy Bypass Add-BuildFirewallRule.ps1 -BuildPath %FULL_BUILD_PATH您需要%FULL_BUILD_PATH%在上面的命令中用构建的可执行文件的完整路径替换 - 您的 CI 工具应该能够相当轻松地完成此操作。

解除目标端口封锁

您可以让 Windows 防火墙允许特定端口上的所有流量(或特定协议的所有流量)。这将允许您的构建(以及使用该端口的任何其他应用程序)进行通信。您可能能够使用具有高级安全性的 Windows 防火墙 UI 创建规则来指定通信应仅限于本地计算机,但如果可能的话,我还是会避免这样做。

答案2

通过研究,我意识到我绑定了计算机上的所有地址,包括外部地址 - 这触发了防火墙。我将测试更改为明确绑定,127.0.0.1此后防火墙再也没有抱怨过。

相关内容