Эта статья посвящена основам управления настройками и правилами встроенного Windows Defender Firewall из командной строки PowerShell. Мы рассмотрим, как включать/отключать брандмауэр для различных профилей, создавать, редактировать и удалять правила, экспортировать/импортировать правила Windows Firewall с помощью PowerShell.
Для управления настройками Windows Firewall обычно используется отдельная графическая MMC оснастка
wf.msc
(Control Panel -> System and Security -> Windows Defender Firewall -> Advanced settings). Большинство операций по настройке и управлению параметрами Windows Firewall можно выполнять из командной строки PowerShell. Для этого, начиная с версии Windows PowerShell 5.1, можно использовать встроенный модуль NetSecurity
Полный список командетов в модуле NetSecurity можно вывести с помощью команды:
Get-Command -Module NetSecurity
netsh advfirewall firewall
.Как включить и отключить Windows Defender Firewall через PowerShell?
По умолчанию Defender Firewall в Windows включен.
Get-NetFirewallProfile | Format-Table Name, Enabled
Как вы видите, в Windows Firewall есть три типа сетевых профилей:
- Domain (Доменный) – применяется к компьютерам, включенным в домен Active Directory;
- Private (Частный) – домашние или рабочие сети;
- Public (Общий) – общедоступные сети.
В настройках профилей по-умолчанию разрешены все исходящие подключения и блокируется входящие (кроме разрешенных).
Каждый профиль может отличаться используемым набором правил файервола. По умолчанию все сетевые интерфейсы компьютера защищены фаейрволом и к ним применяются все три типа профилей.
Чтобы полностью отключить Firewall в Windows, выполните команду:
Set-NetFirewallProfile -All -Enabled False
Либо укажите конкретный профиль вместо All:
Set-NetFirewallProfile -Profile Public -Enabled False
Чтобы включить файервол для всех трех сетевых профилей, используется команда:
Set-NetFirewallProfile -All -Enabled True
Вывести тип профиля, который применяется к сетевому подключению:
Get-NetConnectionProfile
В этом примере к сетевому подключению Ethernet0 применяется доменный профиль (DomainAuthenticated).
$computers = @('PC01', 'PC02', 'PC03')
Invoke-Command -ComputerName $computers {Set-NetFirewallProfile -All -Enabled False}
Можно изменить действие по-умолчнию для профиля Public и заблокировать все входящие подключения.
Set-NetFirewallProfile –Name Public –DefaultInboundAction Block
Текущие настройки профиля можно вывести так:
Get-NetFirewallProfile -Name Public
Если вы управляете настройками Windows Firewall через GPO, вы можете вывести текущие результирующие настройки профилей так:
Get-NetFirewallProfile -policystore activestore
Проверим, что все параметры брандмауэра применяются ко всем сетевым интерфейса компьютера.
Get-NetFirewallProfile -Name Public | fl DisabledInterfaceAliases
Если все интерфейсы защищены, команда должна вернуть:
DisabledInterfaceAliases : {NotConfigured}
Можно отключить определенный профиль для интерфейса (вывести список имен интерфейсов можно с помощью командлета Get-NetIPInterface).
Set-NetFirewallProfile -Name Public -DisabledInterfaceAliases "Ethernet0"
Как вы видите, теперь профиль Public не применяется к интерфейсу Ethernet0:
DisabledInterfaceAliases : {Ethernet0}
С помощью командлета
Set-NetFirewallProfile
вы можете изменить параметры профиля (действие по-умолчанию, журналирование, путь и размер лог файла, настройки оповещений и т.д.).
Вы можете настроить параметры логирования сетевых подключений на уровне каждого профиля. По умолчанию журналы Windows Firewall хранятся в каталоге
%systemroot%\system32\LogFiles\Firewall
, размер файла – 4 Мб. Вы можете изменить включить журналирование подключений и увеличить максимальный размер файла:
Set-NetFireWallProfile -Profile Domain -LogBlocked True -LogMaxSize 20000 -LogFileName ‘%systemroot%\system32\LogFiles\Firewall\pfirewall.log’
Создать новое правило Windows Firewall
Для управления правилами брандмауэра используются 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')
Вы можете разрешить или заблокировать трафик для конкретной программы. Например, вы хотите заблокировать исходящие соединения для 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 подключение по стандартному порту TCP\3389 только с одного IP адреса:
New-NetFirewallRule -DisplayName "AllowRDP" –RemoteAddress 192.168.1.55 -Direction Inbound -Protocol TCP –LocalPort 3389 -Action Allow
Чтобы разрешить ICMP ping для адресов из указанных диапазонов IP адресов и подсети, используйте команды:
$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
Добавить в правило файервола список IP адресов из текстового файла (по одному IP в строке):
$ips=Get-Content C:\temp\ip.txt
Get-NetFirewallrule -DisplayName 'AllowRDP'|Set-NetFirewallRule -RemoteAddress $ips
Разрешить все входящие подключения с указанного IP адреса (добавить адрес в белый список):
$IP = '192.168.1.20'
New-NetFirewallRule -DisplayName "Allow $IP" -Direction Inbound -Action Allow -RemoteAddress $IP
Изменить правило Windows Firewall с помощью PowerShell
Чтобы отредактировать правило брандмауэра, используется командлет 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.21”)
$current_ips = (Get-NetFirewallRule -DisplayName 'WEB-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$current_ips += $ips
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $current_ips
Вывести все IP адреса, которые содержатся в правиле брандмауэра:
(Get-NetFirewallrule -DisplayName 'Web-Inbound'|Get-NetFirewallAddressFilter).remoteaddress
Удалить один IP адрес из правила:
$removeip = "192.168.1.21"
$current_ips = (Get-NetFirewallRule -DisplayName 'WEB-Inbound'| Get-NetFirewallAddressFilter).RemoteAddress
$filterIP = $current_ips | Where-Object{ $_ -notin $removeip }
Get-NetFirewallrule -DisplayName 'WEB-Inbound'|Set-NetFirewallRule -RemoteAddress $filterIP
Включить/отключить правило Windows Defender Firewall
Вы можете включать/отключать правила файервола с помощью командлетов Disable-NetFirewallRule и Enable-NetFirewallRule.
Disable-NetFirewallRule –DisplayName 'WEB-Inbound'
Чтобы разрешить ICMP (ping), выполните команду:
Enable-NetFirewallRule -Name FPS-ICMP4-ERQ-In
Чтобы удалить правило брандмауэре используется командлет Remove-NetFirewallRule.
Remove-NetFirewallRule -DisplayName 'WEB-Inbound'
Чтобы сбросить все правила Microsoft Defender Firewall и восстановить настройки по умолчанию, выполните команду:
netsh advfirewall reset
или
(New-Object -ComObject HNetCfg.FwPolicy2).RestoreLocalFirewallDefaults()
Это очистит все пользовательские настройки и правила Microsoft Defender Firewall. В списке правил останутся только стандартные правила сетевого доступа Windows.
netsh advfirewall export "C:\Backup\firewall-config.wfw"
В дальнейшем вы можете вернуть старые настройки файервола, импортировав файл с правилами:
netsh advfirewall import "C:\Backup\firewall-config.wfw"
PowerShell: вывести список активных правил Windows Firewall
Список активных правил для входящего трафика можно вывести так:
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 адреса для правил брандмауэра. Чтобы вывести всю информацию о разрешенных входящих (исходящих) подключениях в более удобном виде с отображением номеров портов, используйте такой скрипт:
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 Firewall из командной строки. Вы можете автоматически запускать скрипты PowerShell для открытия/закрытия портов при возникновении определенных событий. В следующей статье мы рассмотрим простую систему на базе PowerShell и Windows Firewall для автоматической блокировки IP адресов, с которых выполняется удаленный перебор паролей по RDP на Windows VDS сервере.
Опечатка.»конкретный интерфейс»,а должно быть «конкретный профиль»
Верно, поправил текст. Спс!
Пытаюсь создать новое правило брандмауэра, и получаю ошибку:
New-NetFirewallRule : Сопоставление между именами пользователей и идентификаторами безопасности не было произведено.
Что делать?
Отбой, разобрался. Я переименовал учетку и не сделал логоф.
Нет, ну разве не идиотизм таким образом устанавливать сетевую защиту? Все через командную строку. Похоже винда возвращается в DOS. Что бы создать и настроить домашнюю ЛВС с общими ресурсами, пальцы отсохнут, пока заработает. Тупее десятки еще не видел.
Спасибо полезно!
Вот тут еще блал пример кода как добавить в firewall список IP адресов из текстового файла
_https://www.saotn.org/how-to-add-list-and-remove-ip-addresses-in-windows-firewall/
Как узнать какой профиль Активный (а не просто включенный) ?
профиль применяется к сетевому интерфейсу (в зависимости от типа сети на нем public/private/domain).
Get-NetConnectionProfile
Хай народ!
Использую альтернативный системному в W10 а именно Evorim Free FireWall, очень доволен, но вот такая засада. В нем я поотключал все, что можно и у меня перестала работать консоль. Хотя на нее и на повершелл все разрешено и тем не менее, ничего не работает. Ни где не могу найти ответа на то, что еще включить, что бы консоль работала. Нет, конечно я могу все откатить обратно а потом поочереди обратно все запрещать, пока консоль снова не перестанет работать, но уж больно долгий процесс. Может знает хто? Что минимально необходимо для работы вЫндовской консоли, просто я по линуксам больше а тут необходимость нарисовалась=)))… зачет, если кто скажет;)…
А если конкретно, то там ping не идет а очень хочется Python поставить=))…
C:\>ping _www.yandex.ru
Обмен пакетами с _www.yandex.ru с 32 байтами данных:
Общий сбой.
Общий сбой.
Общий сбой.
Общий сбой.
Статистика Ping для _www.yandex.ru:
Пакетов: отправлено = 4, получено = 0, потеряно = 4
(100% потерь)
C:\>
Какая консоль? Локальной консоли все должны работать, а если удаленная — то все зависит от того какая консоль, как и куда подключаетесь
То что пинг исходящий не работает — разрешайте icmp в прфилах вашего стороннего файервола.
Здравствуйте. Подскажите пожалуйста, как добавить больше 100 IP адрессов в 1 правило.
По одному ИП добавлять это долго и муторно.
Сохраните список IP в текстовом файле (один IP на строчку). Затем выполните:
$ips=Get-Content C:\temp\ip.txt
Get-NetFirewallrule -DisplayName 'MyRule'|Set-NetFirewallRule -RemoteAddress $ips
Скажите, пожалуйста, а как пополнить уже имеющееся правило новыми адресами из файла?
Такое решение будет верным?
$ips=Get-Content C:\temp\ip_add.txt
$current_ips = (Get-NetFirewallRule -DisplayName ‘MyRule’| Get-NetFirewallAddressFilter).RemoteAddress
$current_ips += $ips
Get-NetFirewallrule -DisplayName ‘MyRule’|Set-NetFirewallRule -RemoteAddress $current_ips
Да, этот код рабочий. Единственныю нюанс — значения в графической консоли файкрвола обновляются не сразу. Но фактически применяются. Проверьте это:
(Get-NetFirewallrule -DisplayName 'MyRule'| Get-NetFirewallAddressFilter).RemoteAddress
Как отключить firewall для определенного интерфейса? У меня одна сетевая карта смотрит во внутренюю изолированную сеть и мне там не нужен брандмауер. А внешний интерфейс надо защищать.
Открываете настройки каждого профиля файервола Protected Network COnnections -> отключите галку для сетевого интерфейса, который не нужно защищать.
Или можно через PowerShell:
Set-NetFirewallProfile -Profile -DisabledInterfaceAliases ""
Можно ли удаленно управлять правилами в сети без домена, но имея учетную запись админа на удаленной машине?
Как вариант — можно подключиться к удаленному компьютеру через PowerShell Remoting (winrm). Для рабочей группы процесс описан здесь https://winitpro.ru/index.php/2022/01/11/psremoting-udalennoe-podklyuchenie-workgroup/
После этого можно управлять правилами файервола через PowerShell
Ну и RDP доступ возможен, если вы можете на время отключить удаленного пользователя