Управление на правилата на защитната стена на Windows с PowerShell

Тази статия обхваща основите на управлението на настройките и правилата на вградената защитна стена на Windows от командния ред PowerShell. Ще разгледаме как да активирате / деактивирате защитната стена за различни профили, да създадете и изтриете правила за защитна стена и да разгледаме малък скрипт, който ви позволява да създадете удобна таблица с текущия набор от правила за активна защитна стена.

Съдържание:

  • Управление на мрежови профили на Windows Firewall от PowerShell
  • Създавайте, редактирайте и изтривайте правилата за защитна стена на Windows от PowerShell
  • Изброяване на правилата на защитната стена на Windows чрез PowerShell

Можете да управлявате настройките на защитната стена на Windows от Контролния панел на графичната конзола -> Система и сигурност -> Защитна стена на Windows Defender. Въпреки това, като се започне от Windows 8.1 (Windows Server 2012R2), към системата беше добавен вграден модул PowerShell за контрол на вградената защитна стена NetSecurity.

Преди това командата, използвана за управление на правилата и настройките на защитната стена на Windows netsh защитна стена на advfirewall .

В модула NetSecurity на Windows 10 има 85 команди. Можете да ги изброите:

Get-Command -Module NetSecurity

Управление на мрежови профили на Windows Firewall от PowerShell

Има три типа мрежови профили в защитната стена на Windows:

  • Домен - важи за компютри, включени в домейн на Active Directory;
  • Частни (частни) - домашни или работни мрежи;
  • Обществено - публични мрежи.

Информацията за типа на мрежата се съхранява от услугата Network Location Awareness (NLA) в база данни. Можете да промените мрежовия профил, ако е дефиниран неправилно.

Всеки профил може да се различава в набора от използвани правила за защитна стена. По подразбиране всички мрежови интерфейси на компютър са защитени от защитна стена и към тях се прилагат и трите типа профили..

За да активирате и трите мрежови профила Domain, Public и Private, използвайте командата:

Set-NetFirewallProfile -All -Enabled True

Или посочете конкретен профил вместо Всички:

Set-NetFirewallProfile -Profile Public -Enabled True

За да деактивирате защитната стена и за трите мрежови профила, използвайте командата:

Set-NetFirewallProfile -All -Enabled False

Използване на командлета Set-NetFirewallProfile можете да промените настройките на профила (действие по подразбиране, регистрация, път и размер на лог файла, настройки за предупреждение и т.н.).

Както вероятно знаете, по подразбиране защитната стена на Windows е включена в съвременните операционни системи за всички профили. В настройките на профила са разрешени всички изходящи връзки, а входящите връзки са блокирани (с изключение на тези, които са разрешени).

Променете действието по подразбиране за публичния профил - блокирайте всички входящи връзки.

Set-NetFirewallProfile -Name Public -DefaultInboundAction Block

Текущите настройки на профила могат да бъдат показани, както следва:

Get-NetFirewallProfile -Name Public

Ако контролирате настройките на защитната стена на Windows чрез GPO, можете да покажете текущите получени настройки на профила, както следва:

Get-NetFirewallProfile -policystore activestore

Проверете дали всички настройки на защитната стена важат за всички мрежови интерфейси на компютъра.

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Ако всички интерфейси са защитени, командата трябва да върне:

DisabledInterfaceAliases: NotConfigured

Можете да деактивирате конкретен профил за интерфейс (можете да изброите имената на интерфейса с помощта на командлета Get-NetIPInterface).

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Както можете да видите, сега публичният профил не важи за Ethernet0:

DisabledInterfaceAliases: Ethernet0

Можете да конфигурирате настройките за регистриране на мрежови връзки на нивото на всеки профил. По подразбиране регистрационните файлове на защитната стена на Windows се съхраняват в директорията% systemroot% \ system32 \ LogFiles \ Firewall, размерът на файла е 4 MB. Можете да промените, за да активирате регистрирането на връзката и да увеличите максималния размер на файла:

Set-NetFireWallProfile -Profile домейн -LogBlocked True -LogMaxSize 20000 -LogFileName '% systemroot% \ system32 \ LogFiles \ Firewall \ pfirewall.log'

Създавайте, редактирайте и изтривайте правилата за защитна стена на Windows от PowerShell

Има 9 cmdlets за управление на правила за защитна стена:

  • Нова NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Активиране-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Преименуване-NetFirewallRule
  • Set-NetFirewallRule
  • Покажи-NetFirewallRule

Нека разгледаме някои прости примери за отваряне на портове в защитната стена на Windows.

Например, ако искате да разрешите входящи TCP връзки към портове 80 и 443 за домейн и частни профили, използвайте тази команда:

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

Можете да разрешите или блокирате трафика за конкретна програма. Например, искате да блокирате изходящи връзки за FireFox:

New-NetFirewallRule -Program „C: \ Program Files (x86) \ Mozilla Firefox \ firefox.exe“ -Акционен блок -Профил на домейна, Private -DisplayName „Block Firefox“ -Описание „Block Firefox“ -Direction Outbound

Разрешаване на входяща RDP връзка на порт 3389 само с един IP адрес:

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

За да активирате ping за адреси от посочената подмрежа, използвайте командите:

$ 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 "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

В предишната статия показахме как с помощта на PowerShell можете да блокирате достъпа до сайтове не само чрез IP адрес, но и от DNS домейн / име на сайт.

За да редактирате съществуващо правило за защитна стена, използвайте командлета Set-NetFirewallRule. Например, искате да разрешите входящи връзки от посочения IP адрес за предварително създадено правило:

Get-NetFirewallrule -DisplayName 'WEB-Inbound' | Get-NetFirewallAddressFilter | Set-NetFirewallAddressFilter -RemoteAddress 192.168.1.20

Ако трябва да добавите няколко IP адреса към правилото на защитната стена, използвайте следния скрипт:

$ ips = @ ("192.168.1.50", "192.165.2.22", "192.168.1.20")

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

Отпечатайте всички IP адреси, съдържащи се в правилото на защитната стена:

Get-NetFirewallrule -DisplayName 'Allow inbound ICMPv4' | Get-NetFirewallAddressFilter

Можете да активирате / деактивирате правилата на защитната стена, като използвате командлетите Disable-NetFirewallRule и Enable-NetFirewallRule.

Disable-NetFirewallRule -DisplayName 'WEB-Inbound'

За да активирате ICMP (ping), изпълнете командата:

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

За да премахнете правило за защитна стена, използвайте командлета Remove-NetFirewallRule..

Изброяване на правилата на защитната стена на Windows чрез PowerShell

Списъкът с активни правила за входящ трафик може да бъде показан, както следва:

Get-NetFirewallRule | където ($ _. активиран -eq $ True) -и ($ _. посока -eq "Входящ") | ft

Ако например трябва да изброим блокиращите изходящи правила:

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

Ако искате да покажете името на програмата в правилото:

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

Както можете да видите, командлетът Get-NetFirewallRule не изброява мрежовите портове и IP адреси за правила на защитната стена. За да покажете цялата информация за разрешени входящи (изходящи) връзки в по-удобна форма с показани номера на портове, използвайте следния скрипт:

Get-NetFirewallRule -Action Allow -Enabled True -Direction Inbound |
Формат-таблица-Име на свойството,
@ 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,
Активиран, профил, посока, действие

PowerShell осигурява широко управление на командния ред на правилата на защитната стена на Windows. Можете автоматично да стартирате скриптове на PowerShell, за да отворите / затворите портовете, когато се случват определени събития. В следващата статия ще разгледаме проста система, базирана на PowerShell и защитната стена на Windows за автоматично блокиране на IP адреси, от които отдалечено познаване на парола чрез RDP се извършва на Windows VDS сървър.