Firewall-Regeln verwalten mit PowerShell

    Windows-FirewallDie Windows-Firewall lässt sich bekanntlich mit dem MMC-Snap-in verwalten, außerdem eignet sich dafür auch das Dienstprogramm netsh.exe. PowerShell bietet seit Windows 8 mehrere Cmdlets, die Regeln oft schneller analysieren und anpassen als die beiden anderen Werkzeuge.

    Grundsätzlich ist das MMC-basierte Windows-Firewall mit erweiterter Sicherheit ein komfortables und mächtiges Tool, um vorhandene Regeln zu verwalten oder neue anzulegen. Es bietet auch ein paar vordefinierte Filter, um die große Zahl an Regeln einzugrenzen. Dagegen leidet netsh.exe unter seiner wenig intuitiven Syntax und verwirrt den Anwender mit den übersetzten Gruppennamen.

    Regeln filtern mit Get-NetFirewallRule

    PowerShell bietet beim Filtern von Regeln noch mehr Flexibilität als die grafische Konsole und vermeidet dabei die Nachteile von netsh.exe. Das wichtigste Cmdlet für die Analyse von vorhandenen Regeln ist Get-NetFirewallRule. Ruft man es ohne Parameter auf, dann spukt es eine Liste aller Regeln aus und zeigt für jede einige Eigenschaften an.

    Wenn man etwa herausfinden möchte, ob die Firewall dafür verantwortlich ist, dass die Kommunikation mit einem entfernten Rechner nicht funktioniert, dann wird man die Auswahl auf jene Regeln eingrenzen wollen, die dafür als Ursache in Frage kommen.

    Get-NetFirewallRule unterstützt mehrere Parameter, mit denen sich die Regeln eingrenzen lassen.

    Zu diesem Zweck stehen einige Parameter zur Verfügung, mit denen sich die Auswahl anhand der wichtigsten Eigenschaften einschränken lässt. Zum einen kann man hier, wie von anderen Cmdlets gewohnt, den Namen der Regel oder der Gruppe verwenden (Name, DisplayName, Group, DisplayGroup):

    Get-NetFirewallRule -DisplayGroup Remote*

    Dieser Aufruf verwendet ein Wildcard, so dass er unter anderem die Regeln für Remotedesktop oder Remote-Verwaltung ausgibt.

    Auswahl über ein-/ausgehend, zulassen/blockieren

    Weitere wichtige Kriterien, die über eigene Parameter abgedeckt werden, sind Action, Enabled und Direction. Als Werte für Action kommen Allow und Block in Frage, bei Direction sind es Inbound und Outbound. Enabled erwartet dagegen True oder False.

    Get-NetFirewallRule -Action Block -Enabled True -Direction Inbound

    Dieser Befehl würde alle Regeln anzeigen, die auf eingehende Verbindungen zutreffen, aktiviert sind und die entsprechende Verbindung blockieren.

    Programme in Regeln anzeigen

    In den meisten Fällen reicht diese Information nicht aus, weil man keinen Hinweis darauf bekommt, für welche Programme sie gelten. Wenn das nicht aus dem Namen oder der Beschreibung Regeln hervorgeht, bleibt Get-NetFirewallRule diese Auskunft schuldig.

    Dafür benötigt man Get-NetFirewallApplicationFilter, dem man die Ausgabe von Get-NetFirewallRule über eine Pipe weiterleitet:

    Get-NetFirewallRule -Action Block -Enabled True | Get-NetFirewallApplicationFilter

    Unterscheidung nach Profilen

    Eine weitere wichtige Eigenschaft von Firewall-Regeln, die bis dato nicht vorkam, ist ihre Gültigkeit für bestimmte Profile. Möchte man etwa in einer Domänen-Umgebung herausfinden, welche Regel eine bestimmte Anwendung blockiert, dann kann man solche ausblenden, die für die Profile Öffentlich und Privat gelten.

    Get-NetFirewallProfile filtert Firewall-Regeln nach Profilen.

    Grundsätzlich könnte man dafür einen Filter mit Hilfe von Where-Object definieren, der das Attribut Profile untersucht. Dieses Vorgehen ist aber relativ umständlich, weil diese Eigenschaft den Wert Any annimmt, wenn eine Regel für alle Profile aktiviert ist. Besser geht es dagegen mit Get-NetFirewallProfile:

    Get-NetFirewallProfile -Name Domain | Get-NetFirewallRule | ? DisplayName -like Tril*

    Dieser Aufruf liefert alle Regeln für das Profil Domäne, deren DisplayName mit Tril beginnt und gibt die von Get-NetFirewallRule standardmäßig bereitgestellten Eigenschaften aus.

    Regeln (de)aktivieren oder löschen

    Möchte man Regeln deaktivieren, weil sie etwa eine erforderliche Verbindung blockieren, dann kann man das mit dem Cmdlet Disable-NetFirewallRule tun. In den meisten Fällen wird man ihm den Namen einer einzelnen Regel übergeben, die abgeschaltet werden soll.

    Alternativ besteht auch hier die Möglichkeit, die Auswahl mit den Parametern Action, Enabled und Direction einzuschränken. So würde etwa

    Disable-NetFirewallRule -Action Block -Enabled True -Direction Inbound

    alle aktiven Regeln mit den Eigenschaften Blockieren und Ausgehend deaktivieren. Da ein solcher Befehl unerwünschte Nebenwirkungen haben kann, empfiehlt es sich, ihn erst zusätzlich mit dem Schalter WhatIf auszuführen. Dadurch würde man sehen, auf welche Regeln er sich auswirkt.

    Das Cmdlet Disable-NetFirewallRule belässt Regeln in der Konfiguration der Firewall und deaktiviert sie nur. Sie lassen sich bei Bedarf mit seinem Gegenspieler Enable-NetFirewallRule wieder anschalten.

    Dagegen löscht sie Remove-NetFirewallRule, so dass sie neu angelegt werden müssten, wenn man sie wieder benötigt. Alle drei Cmdlets unterstützen die gleichen Parameter wie Get-NetFirewallRule, um die Regeln einzugrenzen.

    Keine Kommentare