Получить брандмауэр Windows, чтобы игнорировать тестовые сборки

На моем компьютере работает система непрерывной интеграции, которая помещает результаты тестовой сборки во временные файлы системы.
К сожалению, это означает, что брандмауэр Windows рассматривает каждое из них как отдельное приложение и выдает уведомление для каждой сборки, а это несколько в ходе тестового запуска.
Эти сборки взаимодействуют исключительно через localhost, поэтому нет абсолютно никакой причины пропускать их через брандмауэр. В настоящее время они используют порт 8081 но может быть установлен на что угодно.

Есть ли способ заставить брандмауэр Windows просто оставить все программы под %TEMP% заблокирован?

брандмауэр Windows заблокирована некоторые функции этого приложения

2 ответа

Вы получаете это приглашение, потому что нет явного правила, относящегося к приложению. Политика брандмауэра по умолчанию позволяет исходящим соединениям не соответствовать ни одному правилу, поэтому в большинстве случаев это относится к приложению, принимающему входящие соединения, которые по умолчанию блокируются и, следовательно, требуют наличия определенного правила брандмауэра, прежде чем они будут пропущены через брандмауэр.

Брандмауэр 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. Установите PowerShell v4.0 на сервере CI. Это должно быть в случае 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 с расширенным интерфейсом безопасности для создания правила, но я все равно буду этого избегать, если это возможно.

Благодаря исследованиям я понял, что привязан ко всем адресам на компьютере, включая внешние, - именно это вызвало брандмауэр. Я изменил тесты, чтобы явно связать с 127.0.0.1 и брандмауэр с тех пор не жаловался.

Другие вопросы по тегам