Используйте брандмауэр Windows 11, чтобы разрешить выполнение программы в определенной подсети и заблокировать трафик в других направлениях.

Вопрос или проблема

Я хочу создать скрипт Powershell, который использует брандмауэр Windows 11, чтобы разрешить выполнение файла (C:\Program Files (x86)\MyApp\app.exe) только для определенной подсети (192.168.4.0/24) и блокировать трафик в других направлениях.

Это попытка ChatGPT, так как я новичок в Windows FW.

# Определяем путь к исполняемому файлу
$exePath = "C:\Program Files (x86)\MyApp\app.exe"

# Определяем разрешенную сеть
$allowedNetwork = "192.168.4.0/24"

# Создаем правило, чтобы разрешить исполняемому файлу доступ к разрешенной сети
New-NetFirewallRule -DisplayName "Разрешить MyApp.exe в 192.168.4.0/24" -Direction Outbound -Program $exePath -RemoteAddress $allowedNetwork -Action Allow

# Создаем правило, чтобы заблокировать исполняемому файлу доступ к другим сетям
New-NetFirewallRule -DisplayName "Заблокировать MyApp.exe в других сетях" -Direction Outbound -Program $exePath -RemoteAddress "Any" -Action Block

Однако я также испытываю трудности с отладкой журналов; так как я включил %SystemRoot%\System32\LogFiles\Firewall\Pfirewall.log (я поставил Yes в каждом поле), я вижу только заголовок, но никаких записей.

Вы пытаетесь разрешить входящие или исходящие соединения?

Ответ или решение

Для решения вашей задачи с использованием брандмауэра Windows 11, необходимо создать правила, позволяющие исполняемому файлу (например, C:\Program Files (x86)\MyApp\app.exe) обмениваться данными только с определенной подсетью (в вашем случае 192.168.4.0/24), и заблокировать доступ к другим сетям. Ниже приведен пример PowerShell-скрипта, который выполняет эти действия:

# Определяем путь к исполняемому файлу
$exePath = "C:\Program Files (x86)\MyApp\app.exe"

# Определяем разрешённую подсеть
$allowedNetwork = "192.168.4.0/24"

# Создаем правило для разрешения исполняемому файлу доступа к разрешённой подсети для исходящих подключений
New-NetFirewallRule -DisplayName "Разрешить MyApp.exe на 192.168.4.0/24" -Direction Outbound -Program $exePath -RemoteAddress $allowedNetwork -Action Allow

# Создаем правило для блокировки доступа исполняемого файла к другим сетям
New-NetFirewallRule -DisplayName "Заблокировать MyApp.exe на других сетях" -Direction Outbound -Program $exePath -RemoteAddress "Any" -Action Block

Важные моменты:

  1. Направление трафика: В приведённом коде оба правила касаются исходящего трафика (-Direction Outbound). Если вам также нужно обрабатывать входящий трафик, добавьте аналогичные правила для -Direction Inbound.

  2. Логирование брандмауэра: Чтобы убедиться, что логи записываются корректно, убедитесь, что параметр логирования включен. Вы можете проверить настройки логирования следующей командой:

Set-NetFirewallLog -LogDroppedConnections Enabled -LogFileName "Pfirewall.log" -LogMaxSize 4MB

Обратите внимание на следующие параметры:

  • LogDroppedConnections: Включает логирование сброшенных подключений.
  • LogFileName: Имя файла лога.
  • LogMaxSize: Максимальный размер файла лога.

Если после этого логи всё ещё не заполняются, убедитесь, что правила брандмауэра применяются корректно и что трафик на самом деле заблокирован.

Отладка логов:

Чтобы проводить более детальную отладку, рекомендуется также использовать инструменты вроде Get-NetFirewallRule для проверки всех правил брандмауэра и их статуса:

Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*MyApp.exe*" }

Эта команда выдаст все правила, которые относятся к вашему приложению, что поможет понять, почему некоторые из них могут не работать должным образом.

Заключение:

Следуя приведенным шагам, вы сможете настроить необходимые правила для вашего приложения и правильно организовать логирование. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать!

Оцените материал
Добавить комментарий

Капча загружается...