В продолжение темы использования Windows PowerShell и инструментов автоматизации настройки сервера, в частности контроллера домена (DC), обсудим один из наименее приятных аспектов: настройки брандмауэра. Вопрос будет рассматриваться применительно к системе Windows Server 2012/2012 R2.

Многие считают, что брандмауэр надо просто отключать, ведь серверы находятся под защитой брандмауэров, расположенных на периметре сети, а брандмауэр Windows – лишь ненужная головная боль. Однако хочу напомнить, что уже по крайней мере на протяжении десятилетия брандмауэры периметра не обеспечивают достаточную защиту. Кроме того, все больше инструментов Microsoft требует включенного брандмауэра. Большинство пользователей отключают брандмауэр, потому что, по их мнению, управлять им слишком сложно. Однако выполнение таких действий, как включение ответа на ping-запросы, значительно упрощается, если прибегнуть к командам PowerShell.

Шесть вариантов правил брандмауэра: профили и направление

Рассмотрим структуру правил брандмауэра. По сути, каждое правило регулирует открытие и закрытие порта или приложения. Предположим, например, что требуется разрешить системам использовать протокол удаленного рабочего стола (RDP) для подключения и управления сервером. На первый взгляд, это просто: нужно лишь дать указание Windows открыть порт 3389 для протоколов TCP и UDP. Однако брандмауэр Windows для решения этой задачи предусматривает не одно правило, а целых шесть.

Эти шесть правил вытекают из основных свойств брандмауэра Windows. Прежде всего, брандмауэр имеет три набора параметров, называемых профилями. Первый профиль, Domain, относится к трафику через сетевой адаптер, обеспечивающий соединение с внутренней сетью домена. Второй, Public, применяется к адаптерам, через которые осуществляется выход в Интернет для общего доступа. Наконец, профиль Private реализуется для адаптеров, подключенных к сети, которая защищена от Интернета маршрутизатором NAT или брандмауэром и по которой не проходит трафик синхронизации Active Directory (AD). Чуть позже я объясню, как брандмауэр Windows узнает, какой профиль следует назначить данному сетевому адаптеру. Помимо профиля, у каждого правила существует направление, которое определяет, применяется оно к входящему или исходящему трафику. Три умножаем на два и получаем шесть возможных вариантов. Вот почему для RDP требуется не одно правило, а шесть.

Установки по умолчанию для входящего/исходящего трафика

Теоретически брандмауэру Windows требуется огромное количество правил: 65536 для входящего и 65536 для исходящего трафика только для TCP (и, конечно же, это еще нужно умножить на шесть). Однако в реальности точные правила обычно нужно создавать не более чем для нескольких десятков портов и приложений. Брандмауэр Windows сам знает, что делать с неупомянутыми портами, поскольку PowerShell позволяет определить правила по умолчанию с помощью команды set-NetFirewallProfile:

set-netfirewallprofile profilename| -all -DefaultInboundAction Allow|Block -DefaultOutboundAction Allow|Block

Параметр profilename может принимать значения Public, Private и Domain. Если вы постоянно читаете эту рубрику или знакомы с основами PowerShell, то сразу догадаетесь, что текущие параметры системы можно узнать с помощью следующей однострочной команды:

get-netfirewallprofile | select name,DefaultInboundAction,DefaultOutBoundAction | ft -a

В ответ на эту команду на экран выдаются три профиля и заданные для них по умолчанию действия в отношении входящего и исходящего трафика. Для большинства систем в результате выполнения команды мы узнаем, что брандмауэр Windows по умолчанию блокирует все входящие порты, а все исходящие оставляет открытыми. Параметр name -profilename name можно пропустить, указав -all, чтобы контролировать все три профиля. Таким образом, полностью прекратить работу брандмауэра можно путем ввода следующей команды:

set-netfirewallprofile -all -DefaultInboundAction Allow -DefaultOutboundAction Allow

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

set-netfirewallprofile -all -DefaultInboundAction Block -DefaultOutboundAction Allow

Назначение профилей

Брандмауэр Windows каждому активному сетевому подключению (реальному или «фиктивному» сетевому адаптеру – например, соединению VPN) назначает один из трех профилей. Узнать, какие профили назначены существующим подключениям, можно с помощью команды

get-NetConnectionProfile

В ответ получаем информацию, подобную той, что показана ниже (в приведенном примере в системе активна только беспроводная сеть):

Name: Signature
InterfaceAlias: Wi-Fi 2
InterfaceIndex: 8
NetworkCategory: Public
IPv4Connectivity: Internet
IPv6Connectivity: NoTraffic

В этом сценарии система Windows верно назначила общедоступному подключению Wi-Fi профиль Public. Но что если решение, принятое брандмауэром Windows, требуется изменить? Для этого можно воспользоваться командой Set-NetConnectionProfile:

set-NetConnectionProfile -interfacealias name -NetworkCategory profilename

В данном случае можно установить профиль Private с помощью следующей команды:

set-NetConnectionProfile -interfacealias «Wi-Fi 2» -NetworkCategory Private

Это почти все, что необходимо знать о настройке брандмауэра Windows в соответствии с вашими пожеланиями, за исключением одного: как открыть конкретный порт? Эту задачу мы будем решать в следующей статье. Пока же включите свои брандмауэры!