Obtenha o firewall do Windows para ignorar as compilações de teste

2

Eu tenho um sistema de integração contínua em execução no meu computador  que está colocando as saídas de compilação de teste em arquivos temporários no sistema.
Infelizmente, isso significa que o Firewall do Windows considera cada um como um aplicativo separado e exibe uma notificação para cada compilação, que é várias ao longo de uma execução de teste. Essas compilações se comunicam exclusivamente via localhost, portanto, não há absolutamente nenhum motivo para deixá-las passar pelo firewall. Atualmente, eles usam a porta 8081 , mas podem ser definidos para qualquer coisa.

Existe uma maneira de fazer com que o Firewall do Windows simplesmente deixe cada programa em %TEMP% bloqueado?

    
por Lex R 26.11.2014 / 11:45

2 respostas

1

Você está recebendo este prompt porque não há uma regra explícita relacionada ao aplicativo. A política de firewall padrão permite conexões de saída que não correspondem a nenhuma regra, o que na maioria das vezes se relaciona ao aplicativo que aceita conexões de entrada, que são bloqueadas por padrão e exigem uma regra de firewall específica antes de serem permitidas pelo firewall. p>

O Firewall do Windows vê suas compilações como programas separados porque são executáveis diferentes com caminhos diferentes.

Existem várias maneiras possíveis de resolver esse problema:

Cada build deve definir uma regra

Você pode criar uma regra de firewall, como parte do código do aplicativo ou como uma etapa de pós-compilação executada pela sua ferramenta de IC.

Se você não quiser adicionar um código específico ao seu executável (ou processo de configuração) para configurar uma regra, você pode fazer com que sua ferramenta de CI execute um script do PowerShell semelhante ao abaixo

Este script remove as regras de firewall de compilação de teste existentes e adiciona uma regra que permite conexões de entrada para a compilação atual:

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

Para usar o script fornecido, você precisa:

  1. Tenha o PowerShell v4.0 instalado no servidor do CI. Este deve ser o caso do Windows 8x ou Server 2012
  2. Salve o script em um diretório que sua ferramenta de CI tenha como leitura & Executar direitos em um arquivo com extensão .ps1
  3. Execute o script como administrador - isso é necessário porque a alteração das regras de firewall é uma operação privilegiada
  4. Peça à sua ferramenta de CI para executar o script usando um comando semelhante a: powershell.exe -ExecutionPolicy Bypass Add-BuildFirewallRule.ps1 -BuildPath %FULL_BUILD_PATH Você precisa substituir %FULL_BUILD_PATH% no comando acima pelo caminho completo para o executável construído - sua ferramenta de CI deve ser capaz de fazer isso com bastante facilidade.

Desbloquear a porta de destino

Você pode ter o firewall do Windows permitindo todo o tráfego (ou todo o tráfego de um determinado protocolo) em portas específicas. Isso permitiria que suas compilações (e qualquer outro aplicativo usando essa porta) se comuniquem. Você pode ser capaz de especificar que a comunicação deve ser limitada à máquina local usando a interface de usuário do Firewall do Windows com Segurança Avançada para criar a regra, mas ainda assim evitaria isso, se possível.

    
por 26.11.2014 / 13:09
0

Por meio de pesquisa, percebi que estava vinculando todos os endereços do computador, inclusive os externos - que é o que acionou o firewall. Eu mudei os testes para vincular explicitamente a 127.0.0.1 e o firewall não reclamou desde então.

    
por 28.11.2014 / 17:20