В статье «Управление брандмауэром Windows с помощью PowerShell» (опубликованной в предыдущем номере) я сетовал на то, что слишком многие отключают брандмауэр Windows просто потому, что плохо его знают. В незнании брандмауэра Windows нет ничего удивительного: хоть это и качественный программный продукт, чтобы оценить его достоинства, необходимо преодолеть определенные трудности. Вот почему я хочу продолжить эту тему.

В предыдущей статье я рассказал о том, что брандмауэр Windows хранит три набора правил, или профиля, с именами Domain, Private и Public. Каждой сетевой плате системы можно назначить один из этих трех профилей. Кроме того, было показано, как с помощью команды get-NetConnectionProfile можно узнать, какие профили назначены сетевым платам, а с помощью set-NetConnectionProfile – изменить назначенный профиль сетевой платы, если ее текущим профилем является Private или Public. Профиль Domain сетевым платам в Windows назначается автоматически. Наконец, мы рассмотрели, как с помощью get-NetworkProfile и set-NetworkProfile можно включить или выключить конкретный профиль, а также блокировать или разрешить весь входящий или исходящий трафик для компьютера, если отсутствуют исключения. На этот раз мы поговорим о том, как создавать такие исключения.

Открытие порта для удаленного рабочего стола

В качестве примера мы вновь рассмотрим задачу открытия портов для удаленного рабочего стола. В зависимости от конкретной ситуации и версии, для подключения удаленного рабочего стола требуется входящий порт UDP или TCP номер 3389. В предыдущей статье говорилось о применении команды Netsh для открытия портов для удаленного рабочего стола, но так как Netsh –малоэффективный инструмент, мы прибегнем к средствам PowerShell.

Чтобы открыть порт (или порты) с помощью PowerShell, сначала найдем подходящее «правило брандмауэра», действующее в отношении существующей задачи, затем включим его с помощью команды enable-NetFirewallRule. Как определить, существует ли подходящее правило? Если вы привыкли пользоваться графическим интерфейсом, откройте консоль управления Microsoft (MMC) и добавьте оснастку Windows Firewall with Advanced Security. В верхней части левой панели MMC вы увидите папки, обозначенные как Inbound Rules и Outbound Rules. В окне указаны «отображаемые имена» (DisplayName) правил, например Remote Desktop – User Mode (UDP-In). Каждое правило также имеет некое внутреннее имя (это может быть строка без пробелов или идентификатор GUID). Дополнительные сведения о правиле можно извлечь с помощью get-NetFirewallRule:

get-netfirewallrule -DisplayName «Remote Desktop — User Mode (TCP-In)»

В ответ на данный запрос выдается имя, описание, информация о том, включено ли это правило, какие профили оно имеет, применяется к входящему или исходящему трафику, группа отображения DisplayGroup (об этом говорится ниже) и другие сведения. Правило включается ссылкой на отображаемое имя DisplayName посредством параметра -DisplayName или с использованием его имени Name без параметра. Каждая из приведенных ниже команд разрешает входящий трафик RDP по протоколу TCP для удаленного рабочего стола:

enable-NetFirewallRule RemoteDesktop-UserMode-In-TCP
enable-NetFirewallRule -DisplayName «Remote Desktop — User Mode (TCP-In)»

Кстати, если в системе действует групповая политика Group Policy, предусматривающая некое конкретное правило брандмауэра Windows, то все манипуляции с enable-NetFireWallRule не будут иметь результата. В этом случае правила устанавливают через объект групповой политики GPO.

Некоторые правила допускают групповое управление

Я упомянул о группе отображения DisplayGroup в связи с тем, что во многих случаях настройка брандмауэра в соответствии с ролью Windows или приложением требует открытия нескольких портов. Например, Windows Server 2012 R2 имеет группу брандмауэра под названием Active Directory Domain Services, и в ответ на запрос

get-NetFirewallRule -DisplayGroup «Active Directory Domain Services»

вы увидите 17 исключений брандмауэра, от включения ответа на ping-запросы для трафика LDAP до служб синхронизации сетевого времени Network Time Services. Благодаря этому, если вам потребуется подготовить брандмауэр к выходу из-под контроля Active Directory (AD), эти 17 служб не придется включать по отдельности. Вместо этого можно просто ввести команду

enable-netfirewallrule -DisplayGroup «Active Directory Domain Services»

Следует, однако, отметить, что вам, скорее всего, никогда не придется применять эту команду, так как включение роли AD DS на сервере автоматически заставляет диспетчер серверов включить данную группу.

Логично предположить, что авторы команд PowerShell для брандмауэра должны были бы создать некое существительное, такое как NetFirewallRuleGroup – ведь было бы очень удобно иметь возможность вывести все группы правил с помощью команды get-netfirewallrulegroup. Однако это не так. Чтобы узнать все имена групп правил, необходимо их извлечь. Приведенная ниже однострочная команда по очереди извлекает каждое правило брандмауэра, а затем получает имя группы, которой это правило принадлежит (если таковая имеется). Имя группы Name и отображаемое имя DisplayName далее передается на сортировку, в ходе которой удаляются дубликаты с помощью параметра – unique:

get-netfirewallrule | select group,DisplayGroup | sort group -unique | format-table -auto

Я узнал, что на моем контроллере домена (DC) имеется 46 групп. А что получилось у вас? Продолжим в следующем номере.