Списки контролю доступу порту в 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 можна створювати досить складні правила доступу.У деяких випадках це дуже зручно, і, головне, не потрібно ніяких додаткових засобів, так як весь функціонал вбудований в гипервизор. З мінусів же можна відзначити відсутність графічних засобів для настройки правил, а також неможливість централізованого управління.П>.