Управление правилами Windows Firewall с помощью PowerShell

Эта статья посвящена основам управления настройками и правилами встроенного Windows Firewall из командной строки PowerShell. Мы рассмотрим, как включать/отключать брандмауэр для различных профилей, создавать и удалять правила файервола, и рассмотрим небольшой скрипт, позволяющий сформировать удобную таблицу с текущим набором активных правил брандмауэра.

Вы можете управлять настройками Windows Firewall из графической консоли Control Panel -> System and Security -> Windows Defender Firewall. Однако начиная с Windows 8.1 (Windows Server 2012R2) для управления встроенным брандмауэром в систему был добавлен встроенный PowerShell модуль NetSecurity.

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

В модуле NetSecurity в Windows 10 доступно 85 команд. Вы можете вывести их список:

Get-Command -Module NetSecurity

модуль NetSecurity для управления Windows Defender Firewall из PowerShell

Управление сетевыми профилями брандмауэра Windows из PowerShell

В Windows Firewall есть три типа сетевых профилей:

  • Domain (Доменный) – применяется к компьютерам, включенным в домен Active Directory;
  • Private (Частный) – домашние или рабочие сети;
  • Public (Общий) – общедоступные сети.

Windows Defender Firewall управление из панели управления

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

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

Чтобы включить все три сетевых профиля Domain, Public и Private, используйте команду:

Set-NetFirewallProfile -All -Enabled True

Либо укажите конкретный профиль вместо All:

Set-NetFirewallProfile -Profile Public -Enabled True

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

Set-NetFirewallProfile -All -Enabled False

С помощью командлета Set-NetFirewallProfile вы можете изменить параметры профиля (действие по-умолчанию, журналирование, путь и размер файла журнала, настройки оповещений и т.д.).

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

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

Set-NetFirewallProfile –Name Public –DefaultInboundAction Block

Текущие настройки профиля можно вывести так:

Get-NetFirewallProfile -Name Public

настройки по умолчанию для public профиля Windows Firewall

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

Get-NetFirewallProfile -policystore activestore

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

Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases

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

DisabledInterfaceAliases : {NotConfigured}

Get-NetFirewallProfile

Можно отключить определенный профиль для интерфейса (вывести список имен интерфейсов можно с помощью командлета Get-NetIPInterface).

Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"

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

DisabledInterfaceAliases : {Ethernet0}

Set-NetFirewallProfile - изсенить настройки профиля Firewall

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

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

Создание, редактирование и удаление правил Windows Firewall из PowerShell

Для управления правилами брандмауэра есть 9 командлетов:

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

Рассмотрим несколко простых примеров открытия портов в Windows Firewall.

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

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

New-NetFirewallRule - создать новое правило Windows Firewall с помощью PowerShell

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

New-NetFirewallRule -Program “C:\Program Files (x86)\Mozilla Firefox\firefox.exe” -Action Block -Profile Domain, Private -DisplayName “Block Firefox” -Description “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

Get-NetFirewallrule - Get-NetFirewallAddressFilter - получить IP адреса для правила

Вы можете включать/отключать правила файервола с помощью командлетов Disable-NetFirewallRule и Enable-NetFirewallRule.

Disable-NetFirewallRule –DisplayName 'WEB-Inbound'

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

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

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

Вывод правил Windows Firewall через PowerShell

Список активных правил для входящего трафика можно вывести так:

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 вывод правил Windows Firewall

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

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

Get-NetFirewallRule вывести IP адрес и имя порта

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


Предыдущая статья Следующая статья


Комментариев: 4 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)