Заметки о Windows и других программных продуктах Microsoft...

Списки контроля доступа порта в Hyper-V

Списки контроля доступа порта в Hyper-V

Все виртуальные машины Hyper-V подключаются к сети через виртуальный коммутатор (Hyper-V Extensible Switch). Виртуальный коммутатор поддерживает списки управления доступом портов (Port Access Control Lists, Port ACL). По своей сути эти ACL представляют собой обычные правила файервола, с помощью которых можно ограничивать доступ к виртуальным машинам.

На данный момент есть два вида ACL, начнем со стандартных.

Стандартные списки доступа порта

Стандартные ACL появились в 3 версии гипервизора в Windows Server 2012. С их помощью можно для каждого порта виртуального коммутатора настроить одно или несколько правил, ограничив доступ к виртуальной машине по IP или MAC-адресу.

Настройки ACL производятся исключительно с помощью PowerShell, управление списками через Hyper-V Manager невозможно. Для создания правила используется командлет Add-VMNetworkAdapterAcl, в качестве объекта применения правила можно указать виртуальную машину, либо, если у машины несколько сетевых интерфейсов, то можно выбрать конкретный виртуальный адаптер. Для каждого списка требуется указать:

• Локальный или удаленный IPv4 или IPV6-адрес. Допускается указывать подсеть, например 192.168.1.0/24 или f001:f002:f003:f004::1/64. Для запрета всего IPv4 трафика можно указать 0.0.0.0/0, для запрета всего IPV6 — ::/0, а указав ANY, мы запрещаем любой трафик;
• Локальный или удаленный MAC-адрес, например 00-ab-00-11-22-33. Также можно использовать символ * (wildcard) либо ANY для указания всех MAC-адресов;
• Направление трафика, подпадающего под правило — входящий (Inbound), исходящий (Outbound), в обе стороны (Both);
• Действие — разрешить (Allow), запретить (Deny), измерить (Meter).

Примечание. Действие Meter не является запрещающим или разрешающим, оно служит исключительно для измерения объема трафика для конкретного IP-адреса. Трафик считается с момента создания правила.

Для примера запретим  для виртуальной машины srv3 весь трафик:

Add-VMNetworkAdapterAcl -VMName srv3 -RemoteIPAddress ANY -Direction Both -Action Deny

И проверим получившееся правило командой:

Get-VMNetworkAdapterAcl

создание запрещающего правила доступа

 

Затем добавим правило, разрешающее трафик из домашней подсети:

Add-VMNetworkAdapterAcl -VMName srv3 -RemoteIPAddress 192.168.0.0/24 -Direction Both -Action Allow

добавление разрешающего правила доступа

 

И еще одно правило, для измерения трафика между серверами:

Add-VMNetworkAdapterAcl -VMName srv3 -RemoteIPAddress 192.168.0.1 -Direction Outbond -Action Meter

добавление правила доступа для измерения трафика

 

Удалить правила можно с помощью командлета Remove-VMNetworkAdapterAcl. Для примера удалим все правила для srv3 следующей командой:

GetVMNetworkAdapterAcl -VMName srv3 | Remove-VMNetworkAdapterAcl

удаление правил доступа для виртуальной машины

Расширенные списки доступа порта

Начиная с Windows Server 2012 R2 для управления трафиком в Hyper-V можно использовать расширенные списки доступа (Extended Port ACL). Также как и обычные ACL, их можно применять к виртуальным машинам или отдельным виртуальным сетевым адаптерам, подключенным к виртуальному коммутатору Hyper-V. Однако расширенные ACL имеют большее количество параметров, чем обычные, что дает возможность создавать более подробные правила.

Так расширенные ACL позволяют не просто разрешать или запрещать весь трафик, но и указывать конкретные протоколы и порты. При создании правила с использованием расширенных ACL можно указывать следующий набор параметров:

• Локальный или удаленный IPv4 или IPV6-адрес. Формат записи такой же, как и для стандартных правил;
• Сетевой протокол. Протокол можно указывать как в текстовом виде, напр. TCP или UDP, так и в цифровом, напр. 0x01 (ICMP) или 0x02 (IGMP). Список кодов можно посмотреть здесь;
• Локальный или удаленный порт;
• Направление трафика, подпадающего под правило — входящий (Inbound) или исходящий (Outbound);
• Действие — разрешить (Allow), запретить (Deny);
• Удельный вес правила (Weight), который определяет порядок обработки правил. Правила с более высокими значениями обрабатываются раньше, чем с более низкими. Например, правило с весом 10 будет обработано раньше, чем правило с весом 1.

Создание и управление расширенными ACL также возможно только из консоли PowerShell. Для создания правила используется командлет Add-VMNetworkAdapterExtendedAcl, для просмотра  Get-VMNetworkAdapterExtendedAcl и Remove-VMNetworkAdapterExtendedAcl для удаления.

В качестве примера создадим два правила, в первом для srv3 запретим весь входящий трафик, а во втором разрешим входящие подключения только на порт 3389 (RDP):

Add-VMNetworkAdapterExtendedAcl -VMName srv3 -Direction Inbound -Action Deny -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName srv3 -Direction Inbound  -LocalPort ″3389″ -Protocol ″TCP″ -Action Allow -Weight 2

создание расширенных правил доступа

 

Еще одной интересной особенностью расширенных ACL является возможность создавать правила с контролем состояния (Stateful). Эти правила работают следующим образом:

• Они являются исключительно разрешающими и не используются для блокировки;
• Если правило входящее, то для всего трафика, подпадающего под это правило, автоматически создается исходящее правило, разрешающее ВМ отправлять трафик внешнему источнику;
• Если правило исходящее, то для всего трафика, подпадающего под это правило, автоматически создается входящее правило, разрешающее ВМ принимать трафик от внешнего источника;
• Дополнительно можно указать таймаут в секундах, в течение которого состояние действует. Например, на виртуальный коммутатор поступает сетевой пакет, соответствующий правилу с контролем состояния. Коммутатор создает состояние таким образом, чтобы разрешить все последующие пакеты, передаваемые в обоих направлениях этого потока. Если в одном из направлений активность отсутствует в течении заданного таймаута, то срок состояния истекает и трафик прекращается.

Для примера создадим следующие правила: для сервера srv2 запретим весь входящий и исходящий трафик, а затем с помощью stateful-правила разрешим исходящий трафик на 80 порт:

Add-VMNetworkAdapterExtendedAcl -VMName srv2 -Direction Inbound -Action Deny -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName srv2 -Direction Outbound -Action Deny -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName srv2 -Direction Outbound -Protocol ″TCP″ -RemotePort ″80″ -Action Allow -Weight 10 -Stateful $true -IdleSessionTimeout 3600

Таким образом мы разрешим ВМ обращаться к удаленному веб-серверу. При отправке первого пакета виртуальный коммутатор создаст два состояния потока, тем самым разрешая все пакеты, отправляемые на удаленный веб-сервер и получаемые с него. После того, как обмен данными между серверами прекратится, срок действий состояния потока истечет через указанный таймаут в 3600 секунд (1 час).

создание расширенных правил доступа с контролем состояния

 

Проверить правила можно командой:

Get-VMNetworkAdapterExtendedAcl -VMName srv2 | ft direction,action,*address,*port,protocol,stateful,*timeout -auto

просмотр расширенных правил доступа

Заключение

С помощью ACL можно быстро и эффективно регулировать трафик между виртуальными машинами, а используя расширенные ACL можно создавать достаточно сложные правила доступа. В некоторых случаях это очень удобно, и, главное, не требуется никаких дополнительных средств, так как весь функционал встроен в гипервизор. Из минусов же можно отметить отсутствие графических средств для настройки правил, а также невозможность централизованного управления.

 
 
Комментарии

Пока нет комментариев.