Windows Server 23 марта 2026 10 мин чтения
ЕС
Евгений Семёнов
Генеральный директор ООО АйТи Фреш · 15+ лет в IT

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

windows-firewall-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

Ключевые командлеты, которые мы будем использовать:

Профили брандмауэра: Domain, Private, Public

Windows Firewall работает с тремя профилями, каждый из которых применяется в зависимости от типа сети:

Просмотр текущего состояния всех профилей:

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
Важно: при изменении DefaultInboundAction на Block все входящие соединения, для которых нет явного разрешающего правила, будут заблокированы. Убедитесь, что правило для RDP (порт 3389) создано заранее, иначе потеряете доступ к серверу.

Просмотр и фильтрация существующих правил

На типичном сервере 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 превосходит графический интерфейс по всем параметрам в корпоративной среде:

Описанные командлеты модуля 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-инфраструктуру на постоянное сопровождение. Работаем с юридическими лицами в Москве и регионах.

15+лет опыта
25+клиентов
40Gсвоя сеть
24/7поддержка