В этой статье рассматриваются основы управления настройками и правилами встроенного брандмауэра 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
netsh advfirewall firewall
команда использовалась для управления правилами и настройками брандмауэра Windows.Как включить или выключить брандмауэр Windows Defender с помощью PowerShell
Брандмауэр Windows Defender включен по умолчанию.
Get-NetFirewallProfile | Format-Table Name, Enabled
В брандмауэре Windows существует три типа сетевых профилей:
- Домен — применяется к компьютерам, подключенным к домену Active Directory;
- Частный — домашние сети, сети SOHO или сети рабочих групп;
- Публичный — общественные сети.
По умолчанию брандмауэр Windows разрешает все исходящие соединения и блокирует все входящие соединения (кроме разрешенных) для каждого сетевого профиля.
В каждом сетевом профиле (местоположении) могут использоваться различные правила брандмауэра. По умолчанию все сетевые интерфейсы компьютера защищены брандмауэром, и к ним применяются все три типа профилей.
Чтобы полностью отключить брандмауэр Windows, выполните следующую команду
Set-NetFirewallProfile -All -Enabled False
Или укажите конкретное имя профиля вместо Все:
Set-NetFirewallProfile -Profile Public -Enabled False
Чтобы включить брандмауэр Windows для всех трех сетевых профилей, выполните следующую команду
Set-NetFirewallProfile -All -Enabled True
Отображает тип профиля, который применяется к сетевому подключению:
Get-NetConnectionProfile
Сайт ДоменАутентифицированный профиль применяется к сетевому подключению Ethernet0 в этом примере.
$computers = @('WKS01', 'WKS02', 'WKS03')
Invoke-Command -ComputerName $computers {Set-NetFirewallProfile -All -Enabled False}
Можно изменить действие по умолчанию для профиля Public на блокирование всех входящих подключений.
Set-NetFirewallProfile –Name Public –DefaultInboundAction Block
Текущие настройки профиля можно отобразить следующим образом:
Get-NetFirewallProfile -Name Public
Если вы управляете параметрами брандмауэра Windows с помощью GPO, вы можете просмотреть текущие настройки результирующего профиля следующим образом:
Get-NetFirewallProfile -policystore activestore
Убедитесь, что все параметры брандмауэра применены ко всем сетевым интерфейсам компьютера:
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases
Если все интерфейсы защищены, команда должна вернуться:
DisabledInterfaceAliases : {NotConfigured}
Вы можете отключить определенный профиль для сетевого интерфейса (список сетевых адаптеров в Windows можно получить с помощью команды Get-NetIPInterface):
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
Как вы можете видеть, профиль Public больше не применяется к интерфейсу Ethernet0::
DisabledInterfaceAliases : {Ethernet0}
Вы можете использовать команду 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')
Вы можете разрешить или заблокировать доступ к сети для определенного приложения (исполняемого файла). Например, вы можете заблокировать исходящие соединения для браузера 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
Разрешить все входящие соединения с указанного 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
Как включить/отключить/удалить правило брандмауэра 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 не показывает сетевые порты и 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 предоставляет широкий спектр возможностей для управления правилами брандмауэра Windows из командной строки. Вы можете автоматически запускать сценарии PowerShell для открытия/закрытия портов при наступлении определенных событий. В следующей статье мы рассмотрим простые решения на базе PowerShell и брандмауэра Windows для автоматического блокирования RDP-атак методом грубой силы на хост Windows VDS путем добавления IP-адреса атакующего в правило брандмауэра.