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 z wiersza polecenia programu PowerShell. Przyjrzymy się, jak włączyć / wyłączyć zaporę ogniową dla różnych profili, tworzyć i usuwać reguły zapory ogniowej oraz rozważyć mały skrypt, który pozwala utworzyć wygodną tabelę z bieżącym zestawem aktywnych reguł zapory ogniowej.

Treść

  • Zarządzanie profilami sieciowymi Zapory systemu Windows za pomocą programu PowerShell
  • Twórz, edytuj i usuwaj reguły Zapory systemu Windows z PowerShell
  • Wyświetlanie reguł Zapory systemu Windows za pomocą programu PowerShell

Możesz zarządzać ustawieniami Zapory systemu Windows z konsoli sterowania Panel sterowania -> System i zabezpieczenia -> Zapora systemu Windows Defender. Jednak począwszy od systemu Windows 8.1 (Windows Server 2012R2) do systemu dodano wbudowany moduł PowerShell w celu sterowania wbudowaną zaporą Netsecurity.

Wcześniej polecenie służyło do zarządzania regułami i ustawieniami Zapory systemu Windows Zapora sieciowa netsh advfirewall .

W module NetSecurity w systemie Windows 10 dostępnych jest 85 poleceń. Możesz je wymienić:

Get-Command -Moduł NetSecurity

Zarządzanie profilami sieciowymi Zapory systemu Windows za pomocą programu PowerShell

Istnieją trzy rodzaje profili sieciowych w Zaporze systemu Windows:

  • Domena - dotyczy komputerów wchodzących w skład domeny Active Directory;
  • Prywatne (prywatne) - sieci domowe lub służbowe;
  • Publiczne - sieci publiczne.

Informacje o typie sieci są przechowywane przez usługę NLA (Network Location Awareness) w bazie danych. Możesz zmienić profil sieci, jeśli jest niepoprawnie zdefiniowany.

Każdy profil może różnić się zestawem używanych reguł zapory. Domyślnie wszystkie interfejsy sieciowe komputera są chronione zaporą ogniową, a wszystkie trzy typy profili są do nich stosowane..

Aby włączyć wszystkie trzy profile sieciowe Domena, Publiczny i Prywatny, użyj polecenia:

Set-NetFirewallProfile -All -Enabled True

Lub określ konkretny profil zamiast Wszystkie:

Set-NetFirewallProfile -Profile Public -Enabled True

Aby wyłączyć zaporę dla wszystkich trzech profili sieciowych, użyj polecenia:

Set-NetFirewallProfile -All -Enabled False

Za pomocą polecenia cmdlet Set-NetFirewallProfile możesz zmienić ustawienia profilu (domyślne działanie, rejestrowanie, ścieżka i rozmiar pliku dziennika, ustawienia alertów itp.).

Jak zapewne wiesz, domyślnie Zapora systemu Windows jest zawarta w nowoczesnych systemach operacyjnych dla wszystkich profili. W ustawieniach profilu wszystkie połączenia wychodzące są dozwolone, a połączenia przychodzące są blokowane (oprócz dozwolonych).

Zmień domyślną akcję dla profilu publicznego - blokuj wszystkie połączenia przychodzące.

Set-NetFirewallProfile -Name Public -DefaultInboundAction Block

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

Get-NetFirewallProfile -Name Public

Jeśli kontrolujesz ustawienia Zapory systemu Windows za pomocą obiektu zasad grupy, możesz wyświetlić bieżące ustawienia profilu wynikowego w następujący sposób:

Get-NetFirewallProfile -policystore activestore

Sprawdź, czy wszystkie ustawienia zapory mają zastosowanie do wszystkich interfejsów sieciowych komputera.

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Jeśli wszystkie interfejsy są chronione, polecenie powinno zwrócić:

DisabledInterfaceAliases: NotConfigured

Możesz wyłączyć określony profil dla interfejsu (możesz wyświetlić nazwy interfejsów za pomocą polecenia cmdlet Get-NetIPInterface).

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases „Ethernet0”

Jak widać, teraz profil publiczny nie dotyczy Ethernet0:

DisabledInterfaceAliases: Ethernet0

Możesz skonfigurować ustawienia rejestrowania połączeń sieciowych na poziomie każdego profilu. Domyślnie dzienniki Zapory systemu Windows są przechowywane w katalogu% systemroot% \ system32 \ LogFiles \ Firewall, rozmiar pliku to 4 MB. Możesz zmienić, aby włączyć rejestrowanie połączeń i zwiększyć maksymalny rozmiar pliku:

Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName '% systemroot% \ system32 \ LogFiles \ Firewall \ pfirewall.log'

Twórz, edytuj i usuwaj reguły Zapory systemu Windows z PowerShell

Dostępnych jest 9 poleceń cmdlet do zarządzania regułami zapory:

  • New-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Rename-NetFirewallRule
  • Set-NetFirewallRule
  • Show-NetFirewallRule

Spójrzmy 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 do portów 80 i 443 dla profili domen i prywatnych, użyj tego polecenia:

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

Możesz zezwolić lub zablokować ruch dla określonego programu. Na przykład chcesz zablokować połączenia wychodzące dla FireFox:

New-NetFirewallRule -Program „C: \ Program Files (x86) \ Mozilla Firefox \ firefox.exe” -Akcja Blok -Profile Domena, Prywatna -DisplayName „Blokuj Firefox” -Opis „Blokuj Firefox” -Kierunek wychodzący

Zezwalaj na przychodzące połączenie RDP na porcie 3389 z tylko jednym adresem IP:

New-NetFirewallRule -DisplayName „AllowRDP” -RemoteAddress 192.168.1.55 -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow

Aby włączyć polecenie ping dla adresów z określonej podsieci, użyj poleceń:

$ ips = @ („192.168.1.50-192.168.1.60”, „192.165.2.22-192.168.2.200”, „10.10.0.0/16”)

New-NetFirewallRule -DisplayName "Zezwól na przychodzące ICMPv4" -Direction Przychodzące-Protokół ICMPv4 -IcmpType 8 -RemoteAddress $ ips -Action Allow

New-NetFirewallRule -DisplayName "Zezwól na przychodzące ICMPv6" -Direction Przychodzące-Protokół ICMPv6 -IcmpType 8 -RemoteAddress $ ips -Action Allow

W poprzednim artykule pokazaliśmy, jak za pomocą programu PowerShell można blokować dostęp do witryn nie tylko według adresu IP, ale także domeny DNS / nazwy witryny.

Aby edytować istniejącą regułę zapory, użyj polecenia cmdlet Set-NetFirewallRule. Na przykład chcesz zezwolić na połączenia przychodzące z określonego adresu IP dla wcześniej utworzonej reguły:

Get-NetFirewallrule -DisplayName „WEB-Inbound” | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.20

Jeśli chcesz dodać kilka adresów IP do reguły zapory, użyj następującego skryptu:

$ ips = @ („192.168.1.50”, „192.165.2.22”, „192.168.1.20”)

Get-NetFirewallrule -DisplayName „WEB-Inbound” | Set-NetFirewallRule -RemoteAddress $ ips

Wydrukuj wszystkie adresy IP zawarte w regule zapory:

Get-NetFirewallrule -DisplayName „Zezwól na przychodzące ICMPv4” | Get-NetFirewallAddressFilter

Można włączyć / wyłączyć reguły zapory za pomocą poleceń cmdlet Disable-NetFirewallRule i Enable-NetFirewallRule.

Disable-NetFirewallRule -DisplayName „WEB-Inbound”

Aby włączyć ICMP (ping), uruchom polecenie:

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

Aby usunąć regułę zapory, użyj polecenia cmdlet Remove-NetFirewallRule..

Wyświetlanie reguł Zapory systemu Windows za pomocą programu PowerShell

Lista aktywnych reguł dla ruchu przychodzącego może być wyświetlana w następujący sposób:

Get-NetFirewallRule | gdzie ($ _. włączone -eq $ True) -i ($ _. Kierunek -eq „Przychodzące”) | ft

Jeśli na przykład musimy wymienić reguły blokujące wychodzące:

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

Jeśli chcesz wyświetlić nazwę programu w regule:

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

Jak widać, polecenie cmdlet Get-NetFirewallRule nie wyświetla portów portów sieciowych i adresów IP dla reguł zapory. Aby wyświetlić wszystkie informacje o dozwolonych połączeniach przychodzących (wychodzących) w wygodniejszej formie z wyświetlonymi numerami portów, użyj następującego skryptu:

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,
Włączone, profil, kierunek, działanie

PowerShell zapewnia kompleksowe zarządzanie regułami Zapory systemu Windows w wierszu polecenia. Możesz automatycznie uruchamiać skrypty PowerShell, aby otwierać / zamykać porty, gdy wystąpią określone zdarzenia. W następnym artykule rozważymy prosty system oparty na PowerShell i Zaporze systemu Windows do automatycznego blokowania adresów IP, z których zdalne odgadywanie hasła przez RDP odbywa się na serwerze Windows VDS.