Holen Sie sich die Windows-Firewall, um Test-Builds zu ignorieren

318
Lex R

Ich habe ein kontinuierliches Integrationssystem auf meinem Computer, das die Testbuild-Ausgaben in temporäre Dateien auf dem System platziert.
Leider bedeutet dies, dass die Windows-Firewall jede einzelne Anwendung als separate Anwendung betrachtet und für jeden einzelnen Build eine Benachrichtigung anzeigt. Dies ist im Verlauf eines Testlaufs mehrere.
Diese Builds kommunizieren ausschließlich über localhost, sodass es absolut keinen Grund gibt, sie durch die Firewall zu lassen. Sie verwenden derzeit Port 8081, können aber auf irgendetwas gesetzt werden.

Gibt es eine Möglichkeit, die Windows-Firewall dazu zu bringen, jedes Programm einfach zu %TEMP%blockieren?

Die Windows-Firewall hat einige Funktionen dieser App blockiert

2

2 Antworten auf die Frage

1
Crippledsmurf

Sie erhalten diese Aufforderung, weil es keine explizite Regel für die Anwendung gibt. Die Standard-Firewall-Richtlinie lässt zu, dass ausgehende Verbindungen mit keiner Regel übereinstimmen. Dies bezieht sich in der Regel darauf, dass die Anwendung eingehende Verbindungen akzeptiert, die standardmäßig blockiert sind. Daher muss eine bestimmte Firewall-Regel vorhanden sein, bevor sie die Firewall passieren darf.

Die Windows-Firewall betrachtet Ihre Builds als separate Programme, da sie unterschiedliche ausführbare Dateien mit unterschiedlichen Pfaden sind.

Es gibt verschiedene Möglichkeiten, dieses Problem anzugehen:

Lassen Sie jedes Build eine Regel festlegen

Sie können eine Firewall-Regel erstellen, entweder als Teil des Anwendungscodes oder als Post-Build-Schritt, der von Ihrem CI-Tool ausgeführt wird.

Wenn Sie Ihrer ausführbaren Datei (oder dem Einrichtungsprozess) keinen spezifischen Code hinzufügen möchten, um eine Regel festzulegen, können Sie mit Ihrem CI-Tool ein PowerShell-Skript ausführen, das dem unten stehenden ähnlich ist

Dieses Skript entfernt alle vorhandenen Firewall-Regeln für den Testaufbau und fügt eine Regel hinzu, die eingehende Verbindungen für den aktuellen Build zulässt:

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 

Um das mitgelieferte Skript verwenden zu können, müssen Sie Folgendes tun:

  1. Lassen Sie PowerShell v4.0 auf dem CI-Server installieren. Dies sollte für Windows 8x oder Server 2012 der Fall sein
  2. Speichern Sie das Skript in einem Verzeichnis, für das Ihr CI-Tool Lese- und Ausführungsrechte besitzt, in einer Datei mit der .ps1Erweiterung
  3. Führen Sie das Skript als Administrator aus. Dies ist erforderlich, da das Ändern von Firewall-Regeln eine privilegierte Operation ist
  4. Lassen Sie Ihr CI-Tool das Skript mit einem Befehl ausführen, der dem folgenden ähnelt: powershell.exe -ExecutionPolicy Bypass Add-BuildFirewallRule.ps1 -BuildPath %FULL_BUILD_PATHSie müssen %FULL_BUILD_PATH%im obigen Befehl den vollständigen Pfad zur erstellten ausführbaren Datei ersetzen - Ihr CI-Tool sollte dies relativ leicht tun können.

Entsperren Sie den Zielport

Sie können festlegen, dass die Windows-Firewall den gesamten Datenverkehr (oder den gesamten Datenverkehr eines bestimmten Protokolls) für bestimmte Ports zulässt. Dadurch können Ihre Builds (und jede andere Anwendung, die diesen Port verwendet) miteinander kommunizieren. Sie können möglicherweise festlegen, dass die Kommunikation auf den lokalen Computer beschränkt werden soll. Verwenden Sie dazu die Windows-Firewall mit erweiterter Sicherheitsoberfläche, um die Regel zu erstellen. Ich würde dies jedoch nach Möglichkeit vermeiden.

0
Lex R

Durch Recherchen wurde mir klar, dass ich an alle Adressen auf dem Computer gebunden war, einschließlich der externen Adressen - was die Firewall ausgelöst hat. Ich habe die Tests geändert, um explizit zu binden, 127.0.0.1und die Firewall hat sich seitdem nicht mehr beschwert.