Управление брандмауэром Windows через PowerShell: полное руководство администратора

Брандмауэр Windows (Windows Defender Firewall) — первый рубеж защиты любого сервера или рабочей станции в корпоративной сети. Графический интерфейс wf.msc удобен для разовых настроек, но когда нужно управлять десятками серверов, автоматизировать развёртывание правил или встроить настройку firewall в скрипты CI/CD — без PowerShell не обойтись.
В этой статье разберём полный арсенал командлетов модуля NetSecurity: от включения и отключения профилей до тонкой настройки правил с фильтрацией по приложению, порту, IP-адресу и интерфейсу. Все примеры проверены на Windows Server 2019/2022 и Windows 10/11.
Модуль NetSecurity: что входит в состав
Начиная с Windows 8 и Windows Server 2012, управление брандмауэром через PowerShell осуществляется через встроенный модуль NetSecurity. Он доступен без дополнительной установки на всех современных версиях Windows.
Чтобы убедиться, что модуль доступен, и посмотреть список командлетов:
# Проверка наличия модуля
Get-Module -ListAvailable -Name NetSecurity
# Список всех командлетов модуля
Get-Command -Module NetSecurity
Ключевые командлеты, которые мы будем использовать:
Get-NetFirewallProfile— просмотр и изменение профилей (Domain, Private, Public)Get-NetFirewallRule— просмотр существующих правилNew-NetFirewallRule— создание нового правилаSet-NetFirewallRule— изменение существующего правилаRemove-NetFirewallRule— удаление правилаEnable-NetFirewallRule/Disable-NetFirewallRule— включение/отключение правила
Профили брандмауэра: Domain, Private, Public
Windows Firewall работает с тремя профилями, каждый из которых применяется в зависимости от типа сети:
- Domain — компьютер подключён к домену Active Directory
- Private — домашняя или доверенная сеть
- Public — общественная или незнакомая сеть (наиболее строгие правила)
Просмотр текущего состояния всех профилей:
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction
Включить или отключить конкретный профиль:
# Отключить публичный профиль (например, на изолированном сервере)
Set-NetFirewallProfile -Profile Public -Enabled False
# Включить все профили сразу
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True
# Задать политику по умолчанию: блокировать входящие, разрешать исходящие
Set-NetFirewallProfile -Profile Domain,Private,Public `
-DefaultInboundAction Block `
-DefaultOutboundAction Allow
Просмотр и фильтрация существующих правил
На типичном сервере Windows сотни предустановленных правил. Научимся эффективно с ними работать:
# Все включённые входящие правила
Get-NetFirewallRule -Direction Inbound -Enabled True | Select-Object DisplayName, Action, Profile
# Только правила с действием Block
Get-NetFirewallRule -Action Block | Select-Object DisplayName, Direction, Enabled
# Поиск по части имени
Get-NetFirewallRule -DisplayName "*RDP*" | Select-Object DisplayName, Enabled, Action
# Правила для конкретного профиля
Get-NetFirewallRule -Profile Domain | Where-Object {$_.Enabled -eq $true} | Select-Object DisplayName
Для получения сведений о портах, связанных с правилом, нужно запросить дополнительный объект:
# Посмотреть порты и протоколы для правила по его имени
Get-NetFirewallRule -DisplayName "Remote Desktop - User Mode (TCP-In)" |
Get-NetFirewallPortFilter | Select-Object Protocol, LocalPort, RemotePort
Создание правил: New-NetFirewallRule
Создание правил — наиболее частая задача администратора. Рассмотрим реальные сценарии.
Разрешить входящий трафик на конкретный порт
# Открыть порт 8080 для входящих TCP-соединений
New-NetFirewallRule `
-DisplayName "Allow HTTP Alt 8080" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 8080 `
-Action Allow `
-Profile Domain,Private `
-Enabled True
Разрешить трафик от конкретного IP-адреса или подсети
# Разрешить SSH только с адреса управляющей рабочей станции
New-NetFirewallRule `
-DisplayName "Allow SSH from Admin Workstation" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 22 `
-RemoteAddress 192.168.1.10 `
-Action Allow `
-Profile Domain `
-Enabled True
# Разрешить трафик из всей подсети 10.0.0.0/24
New-NetFirewallRule `
-DisplayName "Allow Internal Network" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 443 `
-RemoteAddress 10.0.0.0/24 `
-Action Allow `
-Enabled True
Создать правило для конкретного приложения
# Разрешить исходящий трафик только для конкретного exe
New-NetFirewallRule `
-DisplayName "Allow Chrome Outbound" `
-Direction Outbound `
-Program "C:\Program Files\Google\Chrome\Application\chrome.exe" `
-Action Allow `
-Profile Domain,Private `
-Enabled True
Блокировать диапазон портов
# Заблокировать входящие соединения на диапазон портов
New-NetFirewallRule `
-DisplayName "Block Ports 137-139 Inbound" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 137-139 `
-Action Block `
-Enabled True
-DisplayName и используйте параметр -Description для документирования назначения правила. Это сильно упрощает аудит через 6 месяцев.Изменение и удаление правил
Изменить параметры существующего правила можно с помощью Set-NetFirewallRule:
# Отключить правило по имени
Disable-NetFirewallRule -DisplayName "Allow HTTP Alt 8080"
# Изменить действие правила с Allow на Block
Set-NetFirewallRule -DisplayName "Allow HTTP Alt 8080" -Action Block
# Изменить порт в существующем правиле
Set-NetFirewallRule -DisplayName "Allow HTTP Alt 8080" -LocalPort 8081
# Удалить правило
Remove-NetFirewallRule -DisplayName "Allow HTTP Alt 8080"
# Удалить все отключённые правила (осторожно!)
Get-NetFirewallRule -Enabled False | Remove-NetFirewallRule
Remove-NetFirewallRule не запрашивает подтверждения. Перед массовым удалением используйте параметр -WhatIf для предварительного просмотра.Экспорт и импорт правил брандмауэра
При развёртывании одинаковых правил на множестве серверов удобно экспортировать конфигурацию в XML и импортировать на целевых машинах.
# Экспорт всей конфигурации брандмауэра в XML
netsh advfirewall export "C:\Backup\firewall-rules.xml"
# Импорт конфигурации (заменяет текущие правила!)
netsh advfirewall import "C:\Backup\firewall-rules.xml"
Если нужен более гибкий подход — экспортируем правила в CSV через PowerShell:
# Экспорт всех правил в CSV для анализа
Get-NetFirewallRule | Select-Object `
DisplayName, Direction, Action, Enabled, Profile, Description |
Export-Csv -Path "C:\Backup\firewall-rules.csv" -NoTypeInformation -Encoding UTF8
# Экспорт только включённых правил
Get-NetFirewallRule -Enabled True | Select-Object `
DisplayName, Direction, Action, Profile |
Export-Csv -Path "C:\Backup\firewall-active.csv" -NoTypeInformation -Encoding UTF8
Настройка журналирования брандмауэра
По умолчанию Windows Firewall не записывает заблокированные или разрешённые пакеты. Для диагностики и аудита включим журналирование:
# Включить журналирование для профиля Domain
Set-NetFirewallProfile -Profile Domain `
-LogFileName "C:\Windows\System32\LogFiles\Firewall\pfirewall.log" `
-LogMaxSizeKilobytes 32767 `
-LogBlocked True `
-LogAllowed True
# Проверить настройки журналирования
Get-NetFirewallProfile -Profile Domain | Select-Object LogFileName, LogBlocked, LogAllowed, LogMaxSizeKilobytes
Просмотр последних записей лога напрямую из PowerShell:
# Прочитать последние 50 строк лога брандмауэра
Get-Content "C:\Windows\System32\LogFiles\Firewall\pfirewall.log" -Tail 50
# Найти все заблокированные соединения на порт 3389
Select-String -Path "C:\Windows\System32\LogFiles\Firewall\pfirewall.log" `
-Pattern "DROP.*3389"
LogMaxSizeKilobytes до 65536 (64 МБ) или настройте ротацию через Task Scheduler.Практический сценарий: быстрая блокировка атакующего IP
Один из самых частых запросов от системных администраторов — оперативно заблокировать IP-адрес, с которого идут попытки брутфорса. Вот готовый скрипт:
# Скрипт блокировки IP-адреса
param(
[Parameter(Mandatory=$true)]
[string]$IPAddress,
[string]$Reason = "Blocked by admin"
)
$ruleName = "BLOCK_$($IPAddress -replace '\.','_')_$(Get-Date -Format 'yyyyMMdd')"
# Проверить, не заблокирован ли уже
$existing = Get-NetFirewallRule -DisplayName $ruleName -ErrorAction SilentlyContinue
if ($existing) {
Write-Host "IP $IPAddress уже заблокирован: $ruleName" -ForegroundColor Yellow
exit
}
New-NetFirewallRule `
-DisplayName $ruleName `
-Direction Inbound `
-RemoteAddress $IPAddress `
-Action Block `
-Enabled True `
-Description "Blocked: $Reason. Date: $(Get-Date)"
Write-Host "IP $IPAddress заблокирован. Правило: $ruleName" -ForegroundColor Green
# Запись в лог
Add-Content -Path "C:\Logs\blocked-ips.log" `
-Value "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') | BLOCKED | $IPAddress | $Reason"
Использование скрипта:
.\Block-IP.ps1 -IPAddress "185.220.101.45" -Reason "SSH brute force"
Массовое развёртывание правил через GPO и PowerShell
В доменной среде правила брандмауэра удобно распространять через групповые политики. Но если нужно быстро применить набор правил на несколько серверов без GPO — используем удалённое выполнение через PowerShell Remoting:
# Список серверов
$servers = @("SRV-WEB01", "SRV-WEB02", "SRV-APP01")
# Блок кода, который выполняем на каждом сервере
$scriptBlock = {
# Разрешить HTTPS
New-NetFirewallRule -DisplayName "Allow HTTPS Inbound" `
-Direction Inbound -Protocol TCP -LocalPort 443 `
-Action Allow -Enabled True -ErrorAction SilentlyContinue
# Разрешить мониторинг (ICMP)
New-NetFirewallRule -DisplayName "Allow ICMPv4 Echo" `
-Direction Inbound -Protocol ICMPv4 `
-IcmpType 8 -Action Allow -Enabled True `
-ErrorAction SilentlyContinue
Write-Output "$env:COMPUTERNAME: правила применены"
}
# Выполнить на всех серверах
Invoke-Command -ComputerName $servers -ScriptBlock $scriptBlock
-ErrorAction SilentlyContinue с последующей проверкой через $Error, чтобы не прерывать выполнение при уже существующих правилах.Аудит конфигурации: проверка безопасности брандмауэра
Регулярный аудит правил помогает обнаружить «дыры» в конфигурации — правила с Action Allow и RemoteAddress Any на чувствительных портах:
# Найти все разрешающие правила без ограничения по IP (потенциально опасные)
Get-NetFirewallRule -Direction Inbound -Action Allow -Enabled True |
ForEach-Object {
$portFilter = $_ | Get-NetFirewallPortFilter
$addrFilter = $_ | Get-NetFirewallAddressFilter
[PSCustomObject]@{
Name = $_.DisplayName
LocalPort = $portFilter.LocalPort
RemoteAddr = $addrFilter.RemoteAddress
Profile = $_.Profile
}
} |
Where-Object { $_.RemoteAddr -eq "Any" -and $_.LocalPort -ne "Any" } |
Sort-Object LocalPort |
Format-Table -AutoSize
Этот скрипт выведет все правила, открытые для любого источника — именно их стоит проверить в первую очередь.
Итоги: PowerShell vs GUI для управления брандмауэром
PowerShell-управление брандмауэром Windows превосходит графический интерфейс по всем параметрам в корпоративной среде:
- Автоматизация — одни и те же правила применяются на сотнях машин без ручного труда
- Аудит — скрипты позволяют регулярно проверять конфигурацию и отправлять отчёты
- Воспроизводимость — правила хранятся в виде кода, легко попадают в Git и CI/CD
- Скорость — настройка через консоль занимает секунды против минут в GUI
- Интеграция — можно комбинировать с другими командлетами (Event Log, SIEM, алерты)
Описанные командлеты модуля NetSecurity покрывают 95% задач администратора. Для сложных сценариев с динамической блокировкой по событиям журнала или интеграцией с внешними источниками угроз (IP-блэклистами) их можно расширять в рамках полноценных скриптов мониторинга.
Официальная документация: Microsoft Learn — Windows Server, Microsoft Learn — PowerShell
Часто задаваемые вопросы
Что такое Управление брандмауэром Windows через PowerShell: полное руководство администратора?
Управление брандмауэром Windows через PowerShell: полное руководство администратора — это важный аспект системного администрирования, который позволяет настроить и оптимизировать работу IT-инфраструктуры. В данной статье подробно рассматриваются все ключевые моменты.
Как правильно настроить Управление брандмауэром Windows через PowerShell: полное руководство администратора?
Для корректной настройки Управление брандмауэром Windows через PowerShell: полное руководство администратора необходимо следовать пошаговой инструкции, представленной в статье выше. Важно учитывать особенности вашей инфраструктуры и требования безопасности.
Какие типичные ошибки возникают при работе с Управление брандмауэром Windows через PowerShell: полное руководство администратора?
Наиболее частые ошибки при работе с Управление брандмауэром Windows через PowerShell: полное руководство администратора: некорректная конфигурация, недостаточные права доступа и несовместимость версий. Рекомендуем обратиться к специалистам ITFresh для профессиональной настройки.
ООО «АйТи Фреш» возьмёт это на себя
Настройка брандмауэра, групповых политик, мониторинга и безопасности Windows Server — наша ежедневная работа. Не хватает времени или своих специалистов — мы настроим, оптимизируем и возьмём вашу IT-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах.