Windows включает в себя надежный (в целом 🙄), но простой в использовании, брандмауэр с расширенными возможностями. А с помощью PowerShell 7 можно легко настроить его из командной строки. В этой статье описываются общие команды, используемые в межсетевом экране Windows, а также возможные способы их использования.
Модуль NetSecurity хорошо задокументирован. Учтите, что эта статья относится только к операционной системе Windows. Для других операционных систем существуют другие инструменты командной строки, которые могут использоваться для выполнения тех же задач, такие как UFW или IPTables в Linux.
Вызов модуля NetSecurity
Предустановленный в системе модуль NetSecurity обладает всем необходимым функционалом для управления правилами межсетевого экрана Windows. Чтобы задействовать данный модуль, достаточно импортировать его показанным ниже способом (конечно же команду запускаем в PowerShell):
Import-Module -Name 'NetSecurity'
Вывод списка правил
Командлет Get-NetFirewallRule выводит список настроенных правил. В системе большое количество предварительно настроенных правил, но для примера мы выбрали первые 10:
Get-NetFirewallRule | Select-Object DisplayName, Enabled, Direction, Action -First 10
По умолчанию, командлет выводит все параметры, но на примере выше мы выбрали всего четыре из них (они, собственно, перечислены в команде). А получить все параметры можно командой:
Get-NetFirewallRule | Select-Object * -First 1
Создание нового правила
Создать новое правило позволяет команда New-NetFirewallRule. Основные параметры, которые нужно передать команде следующие:
- DisplayName - название правила;
- Direction - Направление трафика, которое нужно блокировать. Может быть либо входящим (Inbound), либо Исходящим (Outbound);
- Action - Действие правила. Правило может быть либо Разрешающим (Allow), либо Запрещающим (Block).
$Params = @{ "DisplayName" = 'Block WINS' "Direction" = 'Inbound' "Action" = 'Block' "RemoteAddress" = 'WINS' } New-NetFirewallRule @Params
Если не указан параметр Name, система сгенерирует случайный GUID. DisplayName может быть читабельным, но сам Name будет сгенерирован случайным образом.
Изменение существующего правила
Что если нужно изменить какой-то параметр правила, не удаляя и пересоздавая его? Для этого нужно задействовать командлет Set-NetFirewallRule.
$Params = @{ "DisplayName" = 'Block WINS' "Action" = 'Allow' } Set-NetFirewallRule @Params
Данная команда также позволяет вносить изменения в несколько правил сразу. Это можно сделать, передав команде одно из трех параметров правила:
- Name - Параметр по умолчанию. Если команде переданы несколько параметров Name в виде строки или же через пайплайн (|), изменения коснутся каждого из правил;
- DisplayName - так же, как и в случае с параметром Name, команде можно передать нескольких правил, чтобы изменить их;
- DisplayGroup или Group - Если несколько правил сгруппированы, то команде можно передать название этой группы и внести изменения во все члены указанной группы.
Удаление правила
И, наконец, мы хотим удалить правило, которое больше не нужно. Для этого запускаем командлет Remove-NetFirewallRule. Также при удалении часто рекомендуется использовать параметр WhatIf, который позволяет убедиться в том, что будет удалено нужное правило.
Remove-NetFirewallRule -DisplayName "Block WINS"
Следует отметить, что данный командлет позволяет удалять несколько правил сразу. На примере ниже мы удаляем все отключенные правила, которые содержит групповая политика firewall_gpo в домене ad.local.test.
Remove-NetFirewallRule -Enabled 'False' -PolicyStore 'ad.local.test\firewall_gpo'
Запущенный сам по себе командлет Remove-NetFirewallRule достаточно полезный, но в то же время опасный, так как удаляет все локально созданные правила. Если есть доменная групповая политика, определяющая правила межсетевого экрана, данная команда удалит все локальные правила, конфликтующие с правилами групповой политики.
Дополнительные возможности
Модуль NetSecurity включает в себя множество других команд, которые мы не затронули в данной статье. Поэтому ниже приводим список и возможности данных команд.
- Copy-NetFirewallRule - данная команда копирует существующее правило и все связанные с ними фильтры в то же или другое хранилище политик;
- Disable-NetFirewallRule - отключает ранее созданное правило. Отключенное правило не удаляется из базы, но уже никак не влияет на трафик. Если запустить эту команду без параметров, то она отключит все активные правила на целевой машине. Поэтому если не указано конкретное правило или группа правил, рекомендуется всегда запускать данную команду с параметром WhatIf;
- Enable-NetFirewallRule - в противовес предыдущей команде, данный командлет включает все отключенные правила. Если не указано конкретное правило, то данную команду также рекомендуется запускать с параметром WhatIf;
- Get-NetFirewallProfile - эта команда отображает параметры, настроенные для указанного профиля, например, профилей Domain, Private или Public;
- Get-NetFirewallSettings - глобальные параметры брандмауэра можно получить с помощью команды Get-NetFirewallSettings. Это такие параметры, как параметры сертификатов, организация очередей пакетов или списки авторизации;
- Rename-NetFirewallRule - данная команда позволяет переименовать существующее правило. Это полезно, если правило было создано без указания имени, таким образом получив случайный GUID в качестве название, и предпочтительно назначить читабельное название;
- Set-NetFirewallProfile - для установки определенных параметров отдельных профилей можно использовать команду Set-NetFirewallProfile. Это позволяет каждому профилю иметь различные настройки;
- Set-NetFirewallSettings - позволяет настроить поведение межсетевого экрана независимо от используемого профиля сети;
- Show-NetFirewallRule - эта вспомогательная команда отображает правила брандмауэра и связанные с ними объекты в виде отформатированного списка.
Данный модуль также включает расширенные возможности для управления IPSec. Указанные выше команды управляют стандартными настройками межсетевого экрана Windows.
Заключение
Существует множество команд для управления межсетевым экраном Windows. В этой статье рассматриваются только некоторые из них, наиболее важные команды для быстрого вывода списка, создания, изменения и удаления правил брандмауэра. Но с помощью модуля NetSecurity можно сделать настройки и посложнее.