Zarządzanie regułami zapory systemu Windows za pomocą programu PowerShell

W tym artykule omówiono podstawy zarządzania ustawieniami i regułami wbudowanej zapory systemu Windows Defender z zabezpieczeniami zaawansowanymi z poziomu wiersza poleceń programu PowerShell. Przyjrzymy się, jak włączyć/wyłączyć zaporę dla różnych profili sieciowych, utworzyć lub usunąć reguły zapory oraz importować/eksportować reguły Zapory systemu Windows za pomocą programu PowerShell.

Zawartość:

Ustawieniami Zapory systemu Windows zarządza się zwykle za pomocą osobnej graficznej przystawki MMCwf.msc(Panel sterowania -> System i zabezpieczenia -> Zapora systemu Windows Defender -> Ustawienia zaawansowane). Większość operacji konfiguracji i zarządzania ustawieniami Zapory systemu Windows można wykonać z wiersza poleceń programu PowerShell. Możesz skorzystać z wbudowanegoBezpieczeństwo siecimoduł do tego (który jest dostępny w wersji Windows PowerShell 5.1 lub nowszej).

Możesz wyświetlić listę dostępnych poleceń cmdlet w module NetSecurity za pomocą polecenia:

Get-Command -Module NetSecurity

Wcześniejnetsh advfirewall firewallpolecenie zostało użyte do zarządzania regułami i ustawieniami Zapory systemu Windows.

Jak włączyć lub wyłączyć zaporę systemu Windows Defender za pomocą programu PowerShell

Zapora systemu Windows Defender jest domyślnie włączona.

Get-NetFirewallProfile | Format-Table Name, Enabled

W Zaporze systemu Windows istnieją trzy typy profili sieciowych:

  • Domena– dotyczy komputerów przyłączonych do domeny Active Directory;
  • Prywatny– sieci domowe, SOHO lub grupowe;
  • Publiczny– sieci publiczne.

Domyślnie Zapora systemu Windows zezwala na wszystkie połączenia wychodzące i blokuje wszystkie połączenia przychodzące (z wyjątkiem tych, które są dozwolone) dla każdego profilu sieciowego.

Usługa Network Location Awareness (NLA) przechowuje w bazie danych informacje o typach sieci. Możesz ręcznie zmienić profil sieciowy (lokalizację) w systemie Windows, jeśli nie zostanie on poprawnie wykryty.

Dla każdego profilu sieciowego (lokalizacji) mogą być stosowane inne reguły zapory sieciowej. Domyślnie wszystkie interfejsy sieciowe komputera są chronione przez zaporę sieciową i stosowane są do nich wszystkie trzy typy profili.

Aby całkowicie wyłączyć zaporę systemu Windows, uruchom następujące polecenie

Set-NetFirewallProfile -All -Enabled False

Możesz też zamiast tego podać konkretną nazwę profiluWszystko:

Set-NetFirewallProfile -Profile Public -Enabled False

Aby włączyć Zaporę systemu Windows dla wszystkich trzech profili sieciowych, użyj następującego polecenia

Set-NetFirewallProfile -All -Enabled True

Wyświetla typ profilu mający zastosowanie do połączenia sieciowego:

Get-NetConnectionProfile

W tym przykładzie do połączenia sieciowego Ethernet0 zastosowano profil DomainAuthenticated.

Jeśli na komputerach zdalnych skonfigurowano usługę PowerShell Remoting (WinRM), można zarządzać regułami Zapory systemu Windows na tych komputerach. W tym przykładzie użyjemy polecenia cmdlet Invoke-Command do połączenia się ze zdalnymi komputerami na liście i wyłączenia na nich zapory sieciowej.

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

Możesz zmienić domyślną akcję dla profilu publicznego, aby blokowała wszystkie połączenia przychodzące.

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Aktualne ustawienia profilu można wyświetlić w następujący sposób:

Get-NetFirewallProfile -Name Public

Jeśli zarządzasz ustawieniami Zapory systemu Windows za pomocą obiektu GPO, możesz wyświetlić bieżące ustawienia profilu w następujący sposób:

Get-NetFirewallProfile -policystore activestore

Upewnij się, że wszystkie ustawienia zapory sieciowej są zastosowane do wszystkich interfejsów sieciowych na komputerze:

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Jeśli wszystkie interfejsy są chronione, komenda powinna zwrócić:

DisabledInterfaceAliases : {NotConfigured}

Możesz wyłączyć określony profil dla interfejsu sieciowego (możesz wyświetlić listę kart sieciowych w systemie Windows za pomocą polecenia cmdlet Get-NetIPInterface):

Sugerowana lektura:Jak włączyć lub wyłączyć Zaporę systemu Windows w systemie Windows 10

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Jak widać, profil Publiczny nie jest już stosowany do interfejsu Ethernet0::

DisabledInterfaceAliases : {Ethernet0}

Możesz skorzystać zUstaw NetFirewallProfilecmdlet do zmiany ustawień profilu (domyślna akcja, ustawienia rejestrowania, ścieżka i rozmiar pliku dziennika, ustawienia powiadomień itp.). Możesz skonfigurować ustawienia rejestrowania połączeń sieciowych dla każdego profilu lokalizacji sieciowej. Domyślnie dzienniki Zapory systemu Windows są przechowywane w%systemroot%system32LogFilesFirewall, a rozmiar pliku to 4MB. Możesz włączyć rejestrowanie połączeń i zwiększyć maksymalny rozmiar pliku:

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

Istnieje 9 poleceń cmdlet programu PowerShell do zarządzania regułami zapory w systemie Windows:

  • Nowa reguła NetFirewall
  • Skopiuj regułę NetFirewallRule
  • Wyłącz regułę NetFirewallRule
  • Włącz — NetFirewallRule
  • Pobierz regułę NetFirewall
  • Usuń-NetFirewallRule
  • Zmień nazwę-NetFirewallRule
  • Ustaw regułę NetFirewallRule
  • Pokaż-NetFirewallRule

Rzućmy okiem na kilka prostych przykładów otwierania portów w Zaporze systemu Windows.

Na przykład, jeśli chcesz zezwolić na przychodzące połączenia TCP na portach TCP 80 i 443 zarówno dla profili domeny, jak i prywatnego, uruchom następującą komendę:

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

Możesz zezwolić lub zablokować dostęp do sieci dla określonej aplikacji (pliku wykonywalnego). Możesz na przykład zablokować połączenia wychodzące w przeglądarce Firefox:

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

Zezwólmy na przychodzące połączenie RDP na domyślnym porcie TCP3389 tylko z jednego adresu IP:

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

Aby zezwolić na pingi ICMP dla adresów IP z określonych zakresów adresów IP i podsieci, utwórz następującą regułę:

$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

Dodaj listę adresów IP z pliku tekstowego do reguły zapory sieciowej (jeden adres IP w wierszu):

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

W poprzednim artykule pokazaliśmy, jak używać programu PowerShell do blokowania dostępu do witryny internetowej nie tylko na podstawie adresu IP, ale także nazwy DNS witryny.

Zezwalaj na wszystkie połączenia przychodzące z określonego adresu IP. Spowoduje to dodanie adresu IP do białej listy zapory:

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

Modyfikowanie istniejącej reguły zapory systemu Windows za pomocą programu PowerShell

Jeśli chcesz edytować regułę zapory sieciowej, użyj metodyUstaw regułę NetFirewallRulepolecenie cmdlet. Na przykład możesz zezwolić na połączenia przychodzące z określonego adresu IP dla wcześniej utworzonej reguły:

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

Aby dodać wiele adresów IP do reguły zapory, użyj następującego skryptu PowerShell:

$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

Lista wszystkich adresów IP w regule zapory:

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

Usuń jeden adres IP z reguły zapory:

$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

Jak włączyć/wyłączyć/usunąć regułę zapory systemu Windows za pomocą programu PowerShell

Możesz skorzystać zWyłącz regułę NetFirewallRuleIWłącz — NetFirewallRulepolecenia cmdlet służące do włączania i wyłączania reguł zapory.

Disable-NetFirewallRule –DisplayName 'HTTP-Inbound'

Aby zezwolić na ICMP (ping), uruchom to polecenie:

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

Aby usunąć regułę zapory sieciowej, użyj metodyUsuń-NetFirewallRulepolecenie cmdlet.

Remove-NetFirewallRule -DisplayName 'HTTP-Inbound'

Aby zresetować wszystkie reguły zapory Microsoft i przywrócić ustawienia domyślne, uruchom następujące polecenie

netsh advfirewall reset

Lub:

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

Spowoduje to usunięcie wszystkich ustawień zdefiniowanych przez użytkownika, a także reguł zapory Microsoft Defender. Pozostaną tylko reguły dostępu do sieci wbudowane w system Windows.

Przed zresetowaniem reguł zapory możesz wyeksportować bieżące ustawienia do pliku.

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

Później możesz przywrócić stare ustawienia zapory, importując plik reguł:

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

PowerShell: Wyświetl listę aktywnych reguł w zaporze systemu Windows

Listę włączonych reguł zapory sieciowej dla ruchu przychodzącego można wyświetlić w następujący sposób

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

Możesz wyświetlić tylko listę reguł blokowania ruchu wychodzącego:

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

Jeśli chcesz wyświetlić w regule nazwę programu (pliku wykonywalnego):

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

Jak widać, polecenie cmdlet Get-NetFirewallRule nie wyświetla portów sieciowych ani adresów IP dla reguł zapory. Aby w wygodniejszy sposób wyświetlić szczegółowe informacje o dozwolonych połączeniach przychodzących (wychodzących) wraz z numerami portów, użyj następującego skryptu PowerShell:

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 zapewnia szeroką gamę opcji zarządzania regułami Zapory systemu Windows z poziomu wiersza poleceń. Możesz automatycznie uruchamiać skrypty PowerShell, aby otwierać/zamykać porty, jeśli wystąpią określone zdarzenia. W następnym artykule przyjrzymy się prostym rozwiązaniom opartym na programie PowerShell i zaporze systemu Windows, które umożliwiają automatyczne blokowanie ataków brute-force RDP na hosta VDS z systemem Windows poprzez dodanie adresu IP atakującego do reguły zapory.

Related Posts