Verwalten von Windows-Firewallregeln mit PowerShell

In diesem Artikel werden die Grundlagen der Verwaltung der Einstellungen und Regeln der integrierten Windows Defender-Firewall mit erweiterter Sicherheit über die PowerShell-Befehlszeile behandelt. Wir schauen uns an, wie Sie die Firewall für verschiedene Netzwerkprofile aktivieren/deaktivieren, Firewallregeln erstellen oder entfernen und Windows-Firewallregeln mit PowerShell importieren/exportieren.

Inhalt:

Die Einstellungen der Windows-Firewall werden normalerweise über einen separaten grafischen MMC-Snap verwaltetwf.msc(Systemsteuerung -> System und Sicherheit -> Windows Defender Firewall -> Erweiterte Einstellungen). Sie können die meisten Vorgänge zur Konfiguration und Einstellungsverwaltung der Windows-Firewall über die PowerShell-Befehlszeile ausführen. Sie können das integrierte verwendenNetSecurityModul dazu (das in der Version von Windows PowerShell 5.1 oder neuer verfügbar ist).

Sie können die verfügbaren Cmdlets im NetSecurity-Modul auflisten, indem Sie den folgenden Befehl verwenden:

Get-Command -Module NetSecurity

Zuvor war dienetsh advfirewall firewallDer Befehl wurde zum Verwalten der Windows-Firewallregeln und -einstellungen verwendet.

So schalten Sie die Windows Defender-Firewall mit PowerShell ein oder aus

Die Windows Defender-Firewall ist standardmäßig aktiviert.

Get-NetFirewallProfile | Format-Table Name, Enabled

Es gibt drei Arten von Netzwerkprofilen in der Windows-Firewall:

  • Domain– wird auf die Computer angewendet, die einer Active Directory-Domäne angeschlossen sind;
  • Privat– Heim-, SOHO- oder Arbeitsgruppennetzwerke;
  • Öffentlich– öffentliche Netzwerke.

Standardmäßig lässt die Windows-Firewall für jedes Netzwerkprofil alle ausgehenden Verbindungen zu und blockiert alle eingehenden Verbindungen (außer denen, die zugelassen sind).

Der Network Location Awareness (NLA)-Dienst speichert Informationen über Netzwerktypen in einer Datenbank. Sie können das Netzwerkprofil (Standort) in Windows manuell ändern, wenn es nicht richtig erkannt wird.

Für jedes Netzwerkprofil (Standort) können unterschiedliche Firewallregeln verwendet werden. Standardmäßig sind alle Netzwerkschnittstellen des Computers durch eine Firewall geschützt und alle drei Profiltypen werden auf sie angewendet.

Um die Windows-Firewall vollständig zu deaktivieren, führen Sie den folgenden Befehl aus

Set-NetFirewallProfile -All -Enabled False

Oder geben Sie stattdessen einen bestimmten Profilnamen anAlle:

Set-NetFirewallProfile -Profile Public -Enabled False

Um die Windows-Firewall für alle drei Netzwerkprofile zu aktivieren, verwenden Sie den folgenden Befehl

Set-NetFirewallProfile -All -Enabled True

Zeigt den Profiltyp an, der für die Netzwerkverbindung gilt:

Get-NetConnectionProfile

In diesem Beispiel wird das DomainAuthenticated-Profil auf die Ethernet0-Netzwerkverbindung angewendet.

Wenn PowerShell Remoting (WinRM) auf Remotecomputern konfiguriert ist, können Sie Windows-Firewallregeln auf diesen Computern verwalten. In diesem Beispiel verwenden wir das Cmdlet Invoke-Command, um eine Verbindung zu Remotecomputern in der Liste herzustellen und die Firewall auf ihnen zu deaktivieren.

$computers = @('WKS01', 'WKS02', 'WKS03')
Invoke-Command -ComputerName $computers {Set-NetFirewallProfile -All -Enabled False}

Sie können die Standardaktion für das öffentliche Profil ändern, um alle eingehenden Verbindungen zu blockieren.

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Die aktuellen Profileinstellungen können wie folgt angezeigt werden:

Get-NetFirewallProfile -Name Public

Wenn Sie die Windows-Firewall-Einstellungen über ein Gruppenrichtlinienobjekt verwalten, können Sie die aktuell resultierenden Profileinstellungen wie folgt anzeigen:

Get-NetFirewallProfile -policystore activestore

Stellen Sie sicher, dass alle Firewall-Einstellungen auf alle Netzwerkschnittstellen des Computers angewendet werden:

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Wenn alle Schnittstellen geschützt sind, sollte der Befehl Folgendes zurückgeben:

DisabledInterfaceAliases : {NotConfigured}

Sie können ein bestimmtes Profil für eine Netzwerkschnittstelle deaktivieren (Sie können Netzwerkadapter in Windows mit dem Cmdlet Get-NetIPInterface auflisten):

Empfohlene Lektüre:So aktivieren oder deaktivieren Sie die Windows-Firewall in Windows 10

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Wie Sie sehen, wird das öffentliche Profil nicht mehr auf die Ethernet0-Schnittstelle angewendet::

DisabledInterfaceAliases : {Ethernet0}

Sie können die verwendenSet-NetFirewallProfileCmdlet zum Ändern der Profileinstellungen (Standardaktion, Protokollierungseinstellungen, Pfad und Größe der Protokolldatei, Benachrichtigungseinstellungen usw.). Sie können Einstellungen für die Netzwerkverbindungsprotokollierung für jedes Netzwerkstandortprofil konfigurieren. Standardmäßig werden Protokolle der Windows-Firewall in gespeichert%systemroot%system32LogFilesFirewall, und die Dateigröße beträgt 4 MB. Sie können die Verbindungsprotokollierung aktivieren und die maximale Dateigröße erhöhen:

Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%system32LogFilesFirewallpfirewall.log’

Erstellen Sie Windows-Firewallregeln mit PowerShell

Es gibt 9 PowerShell-Cmdlets zum Verwalten von Firewallregeln unter Windows:

  • Neue-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Benennen Sie „NetFirewallRule“ um
  • Set-NetFirewallRule
  • Show-NetFirewallRule

Schauen wir uns ein paar einfache Beispiele an, wie man Ports in der Windows-Firewall öffnet.

Wenn Sie beispielsweise eingehende TCP-Verbindungen auf den TCP-Ports 80 und 443 sowohl für das Domänen- als auch das private Profil zulassen möchten, führen Sie den folgenden Befehl aus:

New-NetFirewallRule -DisplayName 'HTTP-Inbound' -Profile @('Domain', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort @('80', '443')

Sie können den Netzwerkzugriff für eine bestimmte Anwendung (ausführbare Datei) zulassen oder blockieren. Beispielsweise möchten Sie möglicherweise ausgehende Verbindungen für den Firefox-Browser blockieren:

New-NetFirewallRule -Program “C:Program Files (x86)Mozilla Firefoxfirefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox browser” -Description “Block Firefox browser” -Direction Outbound

Lassen wir eine eingehende RDP-Verbindung auf dem Standard-TCP3389-Port von nur einer IP-Adresse zu:

New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.2.200 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow

Um ICMP-Pings für IP-Adressen aus den angegebenen IP-Adressbereichen und Subnetzen zuzulassen, erstellen Sie die folgende Regel:

$ips = @("192.168.2.15-192.168.2.40", "192.168.100.15-192.168.100.200", ”10.1.0.0/16”)
New-NetFirewallRule -DisplayName "Allow inbound ICMPv4" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -RemoteAddress $ips -Action Allow
New-NetFirewallRule -DisplayName "Allow inbound ICMPv6" -Direction Inbound -Protocol ICMPv6 -IcmpType 8 -RemoteAddress $ips -Action Allow

Fügen Sie der Firewall-Regel eine Liste von IP-Adressen aus einer Nur-Text-Datei hinzu (eine IP-Adresse pro Zeile):

$ips=Get-Content C:tempip.txt
Get-NetFirewallrule -DisplayName 'AllowRDP'|Set-NetFirewallRule -RemoteAddress $ips

Im vorherigen Artikel haben wir Ihnen gezeigt, wie Sie mit PowerShell den Zugriff auf eine Website nicht nur anhand der IP-Adresse, sondern auch anhand des DNS-Namens der Site blockieren.

Alle eingehenden Verbindungen von der angegebenen IP-Adresse zulassen. Dadurch wird die IP-Adresse zur Firewall-Whitelist hinzugefügt:

$IP = '192.168.1.20'
New-NetFirewallRule -DisplayName "Allow $IP" -Direction Inbound -Action Allow -RemoteAddress $IP

Ändern einer vorhandenen Windows-Firewallregel mit PowerShell

Wenn Sie eine Firewall-Regel bearbeiten möchten, verwenden Sie dieSet-NetFirewallRuleCmdlet. Beispielsweise möchten Sie möglicherweise eingehende Verbindungen von einer bestimmten IP-Adresse für eine Regel zulassen, die Sie zuvor erstellt haben:

Get-NetFirewallrule -DisplayName 'HTTP-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.10

Um mehrere IP-Adressen zu einer Firewallregel hinzuzufügen, verwenden Sie das folgende PowerShell-Skript:

$ips = @("192.168.2.15", "192.168.2.17",”192.168.100.15”)
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$current_ips += $ips
Get-NetFirewallrule -DisplayName 'HTTP-Inbound'|Set-NetFirewallRule -RemoteAddress $current_ips

Liste aller IP-Adressen in einer Firewall-Regel:

Get-NetFirewallrule -DisplayName 'Http_inbound'|Get-NetFirewallAddressFilter

Entfernen Sie eine IP-Adresse aus einer Firewall-Regel:

$removeip = "192.168.100.5"
$current_ips = (Get-NetFirewallRule -DisplayName 'HTTP-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$filterIP = $current_ips | Where-Object{ $_ -notin $removeip }
Get-NetFirewallrule -DisplayName 'HTTP-Inbound'|Set-NetFirewallRule -RemoteAddress $filterIP

So aktivieren/deaktivieren/entfernen Sie die Windows-Firewallregel mit PowerShell

Sie können die verwendenDisable-NetFirewallRuleUndEnable-NetFirewallRuleCmdlets zum Aktivieren und Deaktivieren von Firewallregeln.

Disable-NetFirewallRule –DisplayName 'HTTP-Inbound'

Um ICMP (Ping) zuzulassen, führen Sie diesen Befehl aus:

Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In

Um eine Firewall-Regel zu entfernen, verwenden Sie dieRemove-NetFirewallRuleCmdlet.

Remove-NetFirewallRule -DisplayName 'HTTP-Inbound'

Führen Sie den folgenden Befehl aus, um alle Microsoft-Firewall-Regeln zurückzusetzen und die Standardeinstellungen wiederherzustellen

netsh advfirewall reset

oder:

(New-Object -ComObject HNetCfg.FwPolicy2).RestoreLocalFirewallDefaults()

Dadurch werden alle benutzerdefinierten Einstellungen sowie die Microsoft Defender-Firewallregeln gelöscht. Lediglich die in Windows integrierten Netzwerkzugriffsregeln bleiben erhalten.

Vor dem Zurücksetzen der Firewall-Regeln können Sie die aktuellen Einstellungen in eine Datei exportieren.

netsh advfirewall export "C:Backupfirewall-config.wfw"

Später können Sie die alten Firewall-Einstellungen wiederherstellen, indem Sie die Regeldatei importieren:

netsh advfirewall import "C:Backupfirewall-config.wfw"

PowerShell: Aktive Regeln in der Windows-Firewall auflisten

Die Liste der aktivierten Firewall-Regeln für eingehenden Datenverkehr kann wie folgt angezeigt werden

Get-NetFirewallRule | where {($_.enabled -eq $True) -and ($_.Direction -eq "Inbound")} |ft

Sie können nur ausgehende Blockierungsregeln auflisten:

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

Wenn Sie den Namen des Programms (der ausführbaren Datei) in der Regel anzeigen möchten:

Get-NetFirewallRule -Action Block -Enabled True -Direction Outbound | %{$_.Name; $_ | Get-NetFirewallApplicationFilter}

Wie Sie sehen, zeigt das Cmdlet „Get-NetFirewallRule“ keine Netzwerkports und IP-Adressen für Firewallregeln an. Um die detaillierten Informationen zu erlaubten eingehenden (ausgehenden) Verbindungen bequemer mit den Portnummern anzuzeigen, verwenden Sie das folgende PowerShell-Skript:

Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Format-Table -Property Name,
@{Name="Protocol";Expression={($PSItem | Get-NetFirewallPortFilter).Protocol}},
@{Name="LocalPort";Expression={($PSItem | Get-NetFirewallPortFilter).LocalPort}},
@{Name="RemotePort";Expression={($PSItem | Get-NetFirewallPortFilter).RemotePort}},
@{Name="RemoteAddress";Expression={($PSItem | Get-NetFirewallAddressFilter).RemoteAddress}},
Enabled,Profile,Direction,Action

PowerShell bietet zahlreiche Optionen zum Verwalten von Windows-Firewallregeln über die Eingabeaufforderung. Sie können PowerShell-Skripte automatisch ausführen, um Ports zu öffnen/schließen, wenn bestimmte Ereignisse eintreten. Im folgenden Artikel betrachten wir einfache PowerShell- und Windows-Firewall-basierte Lösungen, um RDP-Brute-Force-Angriffe auf Ihren Windows VDS-Host automatisch zu blockieren, indem wir die IP-Adresse des Angreifers zur Firewall-Regel hinzufügen.

Related Posts