В этой статье рассматриваются основы управления настройками и правилами встроенного брандмауэра Windows Defender Firewall with Advanced Security из командной строки PowerShell. Мы рассмотрим, как включать/отключать брандмауэр для различных сетевых профилей, создавать или удалять правила брандмауэра, а также импортировать/экспортировать правила брандмауэра Windows с помощью PowerShell.

Настройки брандмауэра Windows обычно управляются с помощью отдельной графической оснастки MMC wf.msc (Панель управления -> Система и безопасность -> Брандмауэр Windows Defender -> Дополнительные параметры). Большинство операций по управлению конфигурацией и настройками брандмауэра Windows можно выполнять из командной строки PowerShell. Можно использовать встроенные NetSecurity модуль для этого (который доступен в версии Windows PowerShell 5.1 или более новой).

Список доступных команд в модуле NetSecurity можно получить с помощью команды:

Get-Command -Module NetSecurity

powershell NetSecurity на windows 10 для управления расширенным брандмауэром windows defenderpowershell NetSecurity на windows 10 для управления расширенным брандмауэром windows defender

Ранее netsh advfirewall firewall команда использовалась для управления правилами и настройками брандмауэра Windows.

Как включить или выключить брандмауэр Windows Defender с помощью PowerShell

Брандмауэр Windows Defender включен по умолчанию.

Get-NetFirewallProfile | Format-Table Name, Enabled

отключение или включение брандмауэра в windows с помощью powershellотключение или включение брандмауэра в windows с помощью powershell

В брандмауэре Windows существует три типа сетевых профилей:

  • Домен — применяется к компьютерам, подключенным к домену Active Directory;
  • Частный — домашние сети, сети SOHO или сети рабочих групп;
  • Публичный — общественные сети.

По умолчанию брандмауэр Windows разрешает все исходящие соединения и блокирует все входящие соединения (кроме разрешенных) для каждого сетевого профиля.

брандмауэр windows defender по умолчанию блокирует все входящие соединениябрандмауэр windows defender блокирует все входящие соединения по умолчанию

Служба Network Location Awareness (NLA) хранит информацию о типах сетей в базе данных. Вы можете вручную изменить профиль (расположение) сети в Windows, если она определяется неправильно.

В каждом сетевом профиле (местоположении) могут использоваться различные правила брандмауэра. По умолчанию все сетевые интерфейсы компьютера защищены брандмауэром, и к ним применяются все три типа профилей.

Чтобы полностью отключить брандмауэр Windows, выполните следующую команду

Set-NetFirewallProfile -All -Enabled False

Или укажите конкретное имя профиля вместо Все:

Set-NetFirewallProfile -Profile Public -Enabled False

Чтобы включить брандмауэр Windows для всех трех сетевых профилей, выполните следующую команду

Set-NetFirewallProfile -All -Enabled True

Отображает тип профиля, который применяется к сетевому подключению:

Get-NetConnectionProfile

Get-NetConnectionProfile проверка профиля, используемого для сетевой картыGet-NetConnectionProfile проверка профиля, используемого для сетевой карты

Сайт ДоменАутентифицированный профиль применяется к сетевому подключению Ethernet0 в этом примере.

Если PowerShell Remoting (WinRM) настроен на удаленных компьютерах, вы можете управлять правилами брандмауэра Windows на этих компьютерах. В этом примере мы используем команду Invoke-Command для подключения к удаленным компьютерам в списке и отключения брандмауэра на них.$computers = @('WKS01', 'WKS02', 'WKS03')
Invoke-Command -ComputerName $computers {Set-NetFirewallProfile -All -Enabled False}

Можно изменить действие по умолчанию для профиля Public на блокирование всех входящих подключений.

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Текущие настройки профиля можно отобразить следующим образом:

Get-NetFirewallProfile -Name Public

Set-NetFirewallProfileSet-NetFirewallProfile

Если вы управляете параметрами брандмауэра Windows с помощью GPO, вы можете просмотреть текущие настройки результирующего профиля следующим образом:

Get-NetFirewallProfile -policystore activestore

Убедитесь, что все параметры брандмауэра применены ко всем сетевым интерфейсам компьютера:

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

Если все интерфейсы защищены, команда должна вернуться:

DisabledInterfaceAliases : {NotConfigured}

Get-NetFirewallProfileGet-NetFirewallProfile

Вы можете отключить определенный профиль для сетевого интерфейса (список сетевых адаптеров в Windows можно получить с помощью команды Get-NetIPInterface):

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

Как вы можете видеть, профиль Public больше не применяется к интерфейсу Ethernet0::

DisabledInterfaceAliases : {Ethernet0}

отключить публичное расположение для интерфейса ehernet0отключить публичное расположение для интерфейса ehernet0

Вы можете использовать команду Set-NetFirewallProfile команда для изменения настроек профиля (действие по умолчанию, настройки ведения журнала, путь и размер файла журнала, настройки уведомлений и т. д.). Вы можете настроить параметры ведения журнала сетевых подключений для каждого профиля сетевого расположения. По умолчанию журналы брандмауэра Windows хранятся в %systemroot%\system32\LogFiles\Firewall, а размер файла составляет 4 МБ. Вы можете включить регистрацию соединений и увеличить максимальный размер файла:

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

Создание правил брандмауэра Windows с помощью PowerShell

Существует 9 команд PowerShell для управления правилами брандмауэра в Windows:

  • New-NetFirewallRule
  • Copy-NetFirewallRule
  • Disable-NetFirewallRule
  • Enable-NetFirewallRule
  • Get-NetFirewallRule
  • Remove-NetFirewallRule
  • Переименовать-NetFirewallRule
  • Set-NetFirewallRule
  • Show-NetFirewallRule

Давайте рассмотрим несколько простых примеров того, как открывать порты в брандмауэре Windows.

Например, если вы хотите разрешить входящие TCP-соединения на TCP-портах 80 и 443 для профилей Domain и Private, выполните следующую команду:

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

New-NetFirewallRule создание нового правила брандмауэра с помощью powershellNew-NetFirewallRule создание нового правила брандмауэра с помощью powershell

Вы можете разрешить или заблокировать доступ к сети для определенного приложения (исполняемого файла). Например, вы можете заблокировать исходящие соединения для браузера Firefox:

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

Давайте разрешим входящее RDP-соединение на стандартном порту TCP\3389 только с одного IP-адреса:

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

Чтобы разрешить ICMP-пинги для IP-адресов из указанных диапазонов IP-адресов и подсетей, создайте следующее правило:

$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

Добавьте список IP-адресов из обычного текстового файла в правило брандмауэра (по одному IP-адресу в строке):

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

В предыдущей статье мы показали вам, как использовать PowerShell для блокирования доступа к веб-сайту не только по IP-адресу, но и по DNS-имени сайта.

Разрешить все входящие соединения с указанного IP-адреса. Это добавит IP-адрес в белый список брандмауэра:

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

Изменение существующего правила брандмауэра Windows с помощью PowerShell

Если вы хотите отредактировать правило брандмауэра, используйте команду Set-NetFirewallRule команда. Например, вы можете захотеть разрешить входящие соединения с определенного IP-адреса для ранее созданного правила:

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

Чтобы добавить несколько IP-адресов в правило брандмауэра, используйте следующий сценарий 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

Список всех IP-адресов в правиле брандмауэра:

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

Удаление одного IP-адреса из правила брандмауэра:

$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

добавить ip-адрес в существующее правило брандмауэрадобавить ip-адрес к существующему правилу брандмауэра

Как включить/отключить/удалить правило брандмауэра Windows с помощью PowerShell

Вы можете использовать команду Disable-NetFirewallRule и Enable-NetFirewallRule Команды для включения и отключения правил брандмауэра.

Disable-NetFirewallRule –DisplayName 'HTTP-Inbound'

Чтобы разрешить ICMP (ping), выполните эту команду:

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

Чтобы удалить правило брандмауэра, используйте команду Remove-NetFirewallRule команда.

Remove-NetFirewallRule -DisplayName 'HTTP-Inbound'

Чтобы сбросить все правила Microsoft Firewall и восстановить настройки по умолчанию, выполните следующую команду

netsh advfirewall reset

или:

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

Это приведет к удалению всех пользовательских настроек, а также правил брандмауэра Microsoft Defender. Останутся только правила доступа к сети, встроенные в Windows.

Перед сбросом правил брандмауэра можно экспортировать текущие настройки в файл.netsh advfirewall export "C:\Backup\firewall-config.wfw"

Позже можно восстановить старые настройки брандмауэра, импортировав файл правил:

netsh advfirewall import "C:\Backup\firewall-config.wfw"

PowerShell: Список активных правил в брандмауэре Windows

Список включенных правил брандмауэра для входящего трафика можно отобразить следующим образом

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

Можно перечислить только правила блокировки исходящего трафика:

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

Если вы хотите отобразить имя программы (исполняемого файла) в правиле:

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

Get-NetFirewallrule - просмотр свойств правила брандмауэраGet-NetFirewallrule - просмотр свойств правила брандмауэра

Как видите, команда Get-NetFirewallRule не показывает сетевые порты и IP-адреса для правил брандмауэра. Чтобы отобразить подробную информацию о разрешенных входящих (исходящих) соединениях в более удобном виде с указанием номеров портов, используйте следующий сценарий 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 для списка правил брандмауэра с нумерацией портовИспользование PowerShell для составления списка правил брандмауэра с нубберами портов

PowerShell предоставляет широкий спектр возможностей для управления правилами брандмауэра Windows из командной строки. Вы можете автоматически запускать сценарии PowerShell для открытия/закрытия портов при наступлении определенных событий. В следующей статье мы рассмотрим простые решения на базе PowerShell и брандмауэра Windows для автоматического блокирования RDP-атак методом грубой силы на хост Windows VDS путем добавления IP-адреса атакующего в правило брандмауэра.