Как открыть брандмауэр и создать правила для программы

Windows Server 2019: как открыть брандмауэр и создать правила для программы

Кратко: ниже показано два способа разрешить работу приложения через брандмауэр Windows Server 2019 — через графический интерфейс (wf.msc) и через PowerShell. Плюс — готовые команды для портов и проверка.


Содержание

  1. Предварительно
  2. Способ 1 — через интерфейс (wf.msc)
  3. Способ 2 — через PowerShell
  4. Правило по портам (если известен порт)
  5. Как проверить, что работает
  6. Исключения в Защитнике Windows (опционально)
  7. Частые проблемы и решения

1) Предварительно

  • Выполняйте действия от имени администратора.
  • Уточните путь к EXE-файлу программы, например: C:\Program Files\MyApp\myapp.exe.
  • Если сервер в домене, убедитесь, что групповые политики (GPO) не запрещают локальные изменения брандмауэра.

2) Способ 1 — через интерфейс (wf.msc)

  1. Нажмите Win + R → введите wf.msc → Enter, откроется Windows Defender Firewall with Advanced Security.
  2. Слева выберите Inbound Rules → справа New Rule….
  3. В мастере выберите ProgramNext.
  4. Укажите This program path и путь к вашему EXE.
  5. Выберите Allow the connectionNext.
  6. Отметьте профили Domain / Private / Public по необходимости → Next.
  7. Задайте имя, например Allow MyApp (Inbound)Finish.

При необходимости аналогично создайте Outbound Rule (исходящие подключения): слева Outbound RulesNew Rule… и повторите шаги.


3) Способ 2 — через PowerShell

Откройте PowerShell от имени администратора и выполните команды, подставив путь к вашему EXE:

# Разрешить входящие подключения для конкретного EXE
New-NetFirewallRule -DisplayName "Allow MyApp Inbound" -Direction Inbound -Program "C:\Program Files\MyApp\myapp.exe" -Action Allow

# Разрешить исходящие подключения для конкретного EXE
New-NetFirewallRule -DisplayName "Allow MyApp Outbound" -Direction Outbound -Program "C:\Program Files\MyApp\myapp.exe" -Action Allow

Если нужно ограничить правило определёнными профилями сети, добавьте параметр -Profile (например, -Profile Domain,Private).


4) Правило по портам (если известен порт)

Если приложение слушает конкретный порт (например, TCP 8080), можно создать правило по порту:

# Разрешить входящие подключения на TCP 8080
New-NetFirewallRule -DisplayName "Allow TCP 8080 (Inbound)" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow

# (Опционально) Разрешить исходящие подключения на TCP 8080
New-NetFirewallRule -DisplayName "Allow TCP 8080 (Outbound)" -Direction Outbound -Protocol TCP -LocalPort 8080 -Action Allow

Замените 8080 на необходимый порт. Для UDP используйте -Protocol UDP.


5) Как проверить, что работает

Проверить правила брандмауэра

# Показать созданные правила (фильтр по части имени)
Get-NetFirewallRule | Where-Object DisplayName -like "*MyApp*"

Проверить доступность порта

# С локального или удалённого хоста:
Test-NetConnection -ComputerName <server-ip-or-name> -Port 8080

Проверить, что приложение действительно слушает порт

netstat -ano | findstr :8080
# или в PowerShell:
Get-NetTCPConnection -LocalPort 8080

6) Исключения в Защитнике Windows (опционально)

Если антивирусная часть блокирует запуск, добавьте исключения для файла/процесса:

# Добавить папку в исключения
Add-MpPreference -ExclusionPath "C:\Program Files\MyApp"

# Добавить конкретный исполняемый файл в исключения процессов
Add-MpPreference -ExclusionProcess "C:\Program Files\MyApp\myapp.exe"

# Проверить текущие исключения
Get-MpPreference | Select-Object -ExpandProperty ExclusionPath
Get-MpPreference | Select-Object -ExpandProperty ExclusionProcess

Важно: если установлен сторонний антивирус, команды Defender могут быть недоступны или бессмысленны.


7) Частые проблемы и решения

  • Нет прав администратора. Запускайте PowerShell и wf.msc через Run as administrator.
  • Сервер в домене, правила не сохраняются. Проверьте GPO: правила брандмауэра и параметры Защитника могут управляться доменными политиками. Вносите изменения на уровне домена или попросите администратора домена.
  • Порт открыт в брандмауэре, но соединения нет. Убедитесь, что приложение действительно слушает порт (см. netstat / Get-NetTCPConnection), и что нет внешнего сетевого ACL/NAT/балансировщика, который блокирует трафик.
  • Нужно ограничить правило только для определённой сети. Добавьте к правилу параметры -Profile (Domain/Private/Public) и при необходимости -RemoteAddress (например, whitelist для подсети).
  • Нужно удалить правило. Найдите точное имя и удалите:
    Remove-NetFirewallRule -DisplayName "Allow MyApp Inbound"

Итог: для большинства сценариев достаточно создать Inbound и, при необходимости, Outbound правило для EXE приложения, либо открыть нужный порт. Используйте интерфейс wf.msc или PowerShell — второй способ быстрее и удобнее для автоматизации.