В опубликованных в предыдущих номерах журнала статьях, посвященных настройке брандмауэра Windows с использованием PowerShell, речь шла о встроенных правилах, список которых можно вывести с помощью get-netfirewallrule, об их включении и отключении (enable-netfirewallrule и disable-netfirewallrule). Однако на практике брандмауэр Windows принесет больше пользы, если выполнить его точную настройку, ведь подлинное достоинство этого компонента, начиная с Windows Server 2008, заключается в возможности создания конкретизированных правил. По сути, правила брандмауэра Windows – это упрощенный IPSec. Поэтому неудивительно, что у PowerShell есть отличный инструмент создания правил, New-NetFirewallRule. В этой и нескольких последующих статьях мы будем учиться создавать правила (и узнаем, как при этом не отключить компьютер).
Основы создания правил брандмауэра
Каждое правило брандмауэра Windows имеет имя и три основных характеристики: направление, критерий и действие. Предположим, есть правило по имени Pass HTTP, согласно которому брандмауэр Windows должен пропустить (действие) входящий (направление) пакет, адресованный порту 80 (критерий). Критерий в сочетании с направлением пакета (порт 80, входящий пакет) указывает брандмауэру, надо ли применять действие правила (пропустить).
New-NetFirewallRule позволяет назначить правилу имя с помощью параметра -DisplayName, задать направление с помощью –Direction (inbound («Входящие») или outbound («Исходящие»); если значение параметра не указано, то по умолчанию — inbound) и действие с помощью -Action (Allow («Разрешить») или Block («Блокировать»); если значение параметра не указано, то по умолчанию – Allow). Для примера создадим правило брандмауэра, блокирующее подключение рабочей станции к удаленному рабочему столу любой системы. Это позволит вам без построения сервера легко убедиться в том, что правило превосходно работает на вашем клиентском компьютере с Windows 8.1. Кстати, рекомендую вывести эту статью на печать или сохранить ее в локальном хранилище компьютера, прежде чем выполнять приведенные ниже примеры, так как результатом некоторых из них будет отключение от Интернета, поэтому полезно держать под рукой способ отмены выполненных действий.
Первое правило
В базовом варианте команда New-NetFirewallRule выглядит следующим образом:
new-netfirewallrule -displayname Mtest
Обязательным для указания является только имя, так как параметры, определяющие действие, направление и критерий, по умолчанию принимают значения Allow («Разрешить»), Inbound («Входящие») и Everything («Для всех»), то есть реализуют инструкцию «разрешить все входящие пакеты». New-NetFirewallRule немедленно включает новое правило, которое вступает в силу сразу же после нажатия клавиши Enter. Этого можно избежать, добавив параметр–Enabled False:
new-netfirewallrule –displayname Mtest –Enabled False
Опечатки здесь нет: параметр -Enabled действительно принимает в качестве значения символьную строку False, а не встроенную переменную PowerShell $false (очевидно, автор этой команды так и не разобрался в «переменных-переключателях»).
Мы уже знаем, что атрибуты правила брандмауэра можно вывести с помощью следующей команды:
get-netfirewallrule -displayname Mtest
Выполнив эту команду, вы заметите, что правило брандмауэра, помимо удобного для восприятия отображаемого имени DisplayName, имеет подобный глобальному идентификатору GUID параметр Name, значение которого выглядит примерно так: «{b7072342-7f9a-493c-abf6-43dcde98a41e}». Можно убедиться, что команда NetFirewallRule, помимо отображаемого имени с параметром –DisplayName, воспринимает и атрибут Name без параметра:
get-netfirewallrule «{b7072342-7f9a-493c-abf6-43dcde98a41e}»
Можно заметить, что в списке правил брандмауэра на панели управления появилось правило Mtest, как подтверждение выполненного действия.
Для удаления правила воспользуйтесь командой remove-netfirewallrule:
remove-netfirewallrule -displayname mtest
Так как это правило не имело видимого эффекта, попробуем создать другое, с применением параметров -Action и -Direction, блокирующее весь исходящий трафик. Эта команда выглядит так:
new-netfirewallrule -displayname Mtest -direction outbound -action block
Попытка обмена пакетами с помощью команды окончится общим сбоем. Напоминаю: для отмены изменений выполните remove-netfirewallrule -displayname mtest.
Добавление критериев: блокировка одного порта
Третий компонент правила брандмауэра – наиболее емкий, так что ему придется посвятить отдельную статью. Впрочем, здесь остается место для небольшого примера. Из правила «блокировать весь исходящий трафик» сделаем правило «блокировать весь исходящий трафик через порт TCP 3389». Для блокировки данного порта TCP добавим два параметра: -Protocol TCP и -RemotePort. Новое правило выглядит так:
new-netfirewallrule -displayname Mtest -direction outbound -action block -protocol tcp -RemotePort 3389
Испытайте его на любом компьютере, где включен доступ к удаленным рабочим столам, и выполните проверку сетевого подключения с помощью команды Test-NetConnection (в данном примере проверка проводится для S1.bigfirm.com):
test-netconnection s1.bigfirm.com -Port 3389
Итак, я представил основные средства создания правил. В следующий раз мы продолжим изучение инструментов точной настройки.