Создание политик безопасности с использованием расширенных списков управления доступом для портов
В этом разделе содержатся сведения о расширенных списках портов контроль доступа (ACL) в Windows Server 2016. Можно настроить расширенные списки ACL на виртуальном коммутаторе Hyper-V для разрешения и блокировки сетевого трафика, передающегося между виртуальными машинами, подключенными к коммутатору через виртуальные сетевые адаптеры.
Эта тема описана в следующих разделах.
Подробные правила ACL
Расширенные списки управления доступом виртуального коммутатора Hyper-V позволяют создавать подробные правила, которые можно применять к отдельным сетевым адаптерам виртуальной машины, подключенным к виртуальному коммутатору Hyper-V. Возможность создания подробных правил позволяет предприятиям и поставщикам облачных служб устранять угрозы безопасности на основе сети в мультитенантной общей среде сервера.
Используя расширенные списки ACL, вместо того чтобы создавать общие правила, блокирующие или разрешающие весь трафик, передающийся между виртуальными машинами по всем протоколам, вы можете блокировать или разрешать сетевой трафик отдельных протоколов, работающих на виртуальных машинах. В Windows Server 2016 можно создать расширенные правила ACL, которые включают следующий набор 5 кортежей параметров: исходный IP-адрес, конечный IP-адрес, протокол, исходный порт и порт назначения. Кроме того, каждое правило может определять направление сетевого трафика (входящий или исходящий) и поддерживаемое действие (блокировать или разрешать трафик).
Например, можно настроить для виртуальной машины списки ACL для портов так, чтобы разрешать весь входящий и исходящий трафик HTTP и HTTPS на порте 80 и блокировать сетевой трафик всех прочих протоколов на всех портах.
Эта возможность задать трафик протокола, который разрешено или запрещено получать клиентским виртуальным машинам, обеспечивает гибкость при настройке политик безопасности.
Настройка правил списков ACL с помощью Windows PowerShell
Чтобы настроить расширенный список ACL, необходимо использовать команду Add-VMNetworkAdapterExtendedAcl windows PowerShell. У этой команды четыре разных типа синтаксиса со своими отдельными функциями:
Добавьте расширенный ACL ко всем сетевым адаптерам именованной виртуальной машины, которая указана первым параметром -VMName. Синтаксис
Примечание.
Если вы хотите добавить расширенный ACL к одному сетевому адаптеру, а не всем, можно указать сетевой адаптер с параметром -VMNetworkAdapterName.
Add-VMNetworkAdapterExtendedAcl [-VMName] <string[]> [-Action] <VMNetworkAdapterExtendedAclAction> {Allow | Deny} [-Direction] <VMNetworkAdapterExtendedAclDirection> {Inbound | Outbound} [[-LocalIPAddress] <string>] [[-RemoteIPAddress] <string>] [[-LocalPort] <string>] [[-RemotePort] <string>] [[-Protocol] <string>] [-Weight] <int> [-Stateful <bool>] [-IdleSessionTimeout <int>] [-IsolationID <int>] [-Passthru] [-VMNetworkAdapterName <string>] [-ComputerName <string[]>] [-WhatIf] [-Confirm] [<CommonParameters>]
Добавление расширенного списка ACL для конкретного виртуального сетевого адаптера на определенной виртуальной машине. Синтаксис
Add-VMNetworkAdapterExtendedAcl [-VMNetworkAdapter] <VMNetworkAdapterBase[]> [-Action] <VMNetworkAdapterExtendedAclAction> {Allow | Deny} [-Direction] <VMNetworkAdapterExtendedAclDirection> {Inbound | Outbound} [[-LocalIPAddress] <string>] [[-RemoteIPAddress] <string>] [[-LocalPort] <string>] [[-RemotePort] <string>] [[-Protocol] <string>] [-Weight] <int> [-Stateful <bool>] [-IdleSessionTimeout <int>] [-IsolationID <int>] [-Passthru] [-WhatIf] [-Confirm] [<CommonParameters>]
Добавление расширенного списка ACL для всех виртуальных сетевых адаптеров, зарезервированных для использования операционной системой управления узлами Hyper-V.
Примечание.
Если вы хотите добавить расширенный ACL к одному сетевому адаптеру, а не всем, можно указать сетевой адаптер с параметром -VMNetworkAdapterName.
Add-VMNetworkAdapterExtendedAcl [-Action] <VMNetworkAdapterExtendedAclAction> {Allow | Deny} [-Direction] <VMNetworkAdapterExtendedAclDirection> {Inbound | Outbound} [[-LocalIPAddress] <string>] [[-RemoteIPAddress] <string>] [[-LocalPort] <string>] [[-RemotePort] <string>] [[-Protocol] <string>] [-Weight] <int> -ManagementOS [-Stateful <bool>] [-IdleSessionTimeout <int>] [-IsolationID <int>] [-Passthru] [-VMNetworkAdapterName <string>] [-ComputerName <string[]>] [-WhatIf] [-Confirm] [<CommonParameters>]
Добавьте расширенный ACL в объект виртуальной машины, созданный в Windows PowerShell, например $vm = get-vm "my_vm". В следующей строке кода можно выполнить эту команду для создания расширенного списка ACL со следующим синтаксисом:
Add-VMNetworkAdapterExtendedAcl [-VM] <VirtualMachine[]> [-Action] <VMNetworkAdapterExtendedAclAction> {Allow | Deny} [-Direction] <VMNetworkAdapterExtendedAclDirection> {Inbound | Outbound} [[-LocalIPAddress] <string>] [[-RemoteIPAddress] <string>] [[-LocalPort] <string>] [[-RemotePort] <string>] [[-Protocol] <string>] [-Weight] <int> [-Stateful <bool>] [-IdleSessionTimeout <int>] [-IsolationID <int>] [-Passthru] [-VMNetworkAdapterName <string>] [-WhatIf] [-Confirm] [<CommonParameters>]
Примеры подробных правил списков ACL
Ниже приведены несколько примеров использования команды Add-VMNetworkAdapterExtendedAcl для настройки расширенных списков управления доступом портов и создания политик безопасности для виртуальных машин.
Принудительное применение безопасности на уровне пользователя и уровня приложения
Предоставление поддержки безопасности приложению, отличному от TCP/UDP
Примечание.
Значения для параметра правила в таблицах ниже основаны на потоке трафика или из виртуальной машины, для которой создается правило. Если виртуальная машина принимает трафик, он является входящим, если отправляет — исходящим. Например, если к виртуальной машине применяется правило, блокирующее входящий трафик, направление входящего трафика будет от внешних ресурсов к виртуальной машине. Если применяется правило, блокирующее исходящий трафик, направление исходящего трафика будет от локальной виртуальной машины к внешним ресурсам.
Принудительное применение безопасности на уровне приложения
Поскольку многие серверы приложений используют стандартизированные порты TCP/UDP для взаимодействия с клиентскими компьютерами, можно легко создать правила, блокирующие или разрешающие доступ к серверу приложений, путем фильтрации трафика, поступающего на порт, назначенный приложению, и отправляемого с этого порта.
Например, можно разрешить пользователю вход на сервер приложений в центре обработки данных при помощи подключения к удаленному рабочему столу (RDP). Так как RDP использует порт TCP 3389, можно настроить следующее правило:
Исходный IP-адрес | IP-адрес назначения | Протокол | Исходный порт | Конечный порт | Направление | Действие |
---|---|---|---|---|---|---|
* | * | TCP | * | 3389 | In | Разрешить |
Далее приведены два примера создания правил с помощью команд Windows PowerShell. В первом примере правило блокирует весь трафик к виртуальной машине с именем ApplicationServer. Второе правило, которое применяется к сетевому адаптеру виртуальной машины с именем ApplicationServer, разрешает только входящий трафик RDP на виртуальную машину.
Примечание.
При создании правил можно использовать параметр -Weight , чтобы определить порядок обработки правил виртуальным коммутатором Hyper-V. Значения - Weight выражаются как целые числа; правила с более высоким целым числом обрабатываются перед правилами с более низкими целыми числами. Например, если к сетевому адаптеру виртуальной машины применяется два правила, одно с весовым коэффициентом 1, другое с весовым коэффициентом 10, то второе правило будет обработано раньше.
Add-VMNetworkAdapterExtendedAcl -VMName "ApplicationServer" -Action "Deny" -Direction "Inbound" -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName "ApplicationServer" -Action "Allow" -Direction "Inbound" -LocalPort 3389 -Protocol "TCP" -Weight 10
Принудительное применение безопасности на уровне пользователя и уровня приложения
Поскольку правило может сопоставляться с пятикортежным IP-пакетом (исходный IP-адрес, конечный IP-адрес, протокол, порт источника и порт назначения), правило может применять более подробную политику безопасности по сравнению со списком ACL для порта.
Например, если требуется предоставить dhcp-службу ограниченному количеству клиентских компьютеров с использованием определенного набора DHCP-серверов, можно настроить следующие правила на компьютере Под управлением Hyper-V Windows Server 2016, где размещаются пользовательские виртуальные машины:
Исходный IP-адрес | IP-адрес назначения | Протокол | Исходный порт | Конечный порт | Направление | Действие |
---|---|---|---|---|---|---|
* | 255.255.255.255 | UDP | * | 67 | выход | Разрешить |
* | 10.175.124.0/25 | UDP | * | 67 | выход | Разрешить |
10.175.124.0/25 | * | UDP | * | 68 | In | Разрешить |
Далее приведены примеры создания этих правил с помощью команд Windows PowerShell.
Add-VMNetworkAdapterExtendedAcl -VMName "ServerName" -Action "Deny" -Direction "Outbound" -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName "ServerName" -Action "Allow" -Direction "Outbound" -RemoteIPAddress 255.255.255.255 -RemotePort 67 -Protocol "UDP"-Weight 10
Add-VMNetworkAdapterExtendedAcl -VMName "ServerName" -Action "Allow" -Direction "Outbound" -RemoteIPAddress 10.175.124.0/25 -RemotePort 67 -Protocol "UDP"-Weight 20
Add-VMNetworkAdapterExtendedAcl -VMName "ServerName" -Action "Allow" -Direction "Inbound" -RemoteIPAddress 10.175.124.0/25 -RemotePort 68 -Protocol "UDP"-Weight 20
Предоставление поддержки безопасности приложению, отличному от TCP/UDP
Хотя большая часть трафика в центре обработки данных — это трафик TCP и UDP, часть трафика использует другие протоколы. Например, чтобы разрешить группе серверов запускать приложение многоадресной IP-рассылки, использующее протокол IGMP, можно создать следующее правило.
Примечание.
Назначенный номер IP-протокола для IGMP — 0x02.
Исходный IP-адрес | IP-адрес назначения | Протокол | Исходный порт | Конечный порт | Направление | Действие |
---|---|---|---|---|---|---|
* | * | 0x02 | * | * | In | Разрешить |
* | * | 0x02 | * | * | выход | Разрешить |
Далее приведен пример создания этих правил с помощью команд Windows PowerShell.
Add-VMNetworkAdapterExtendedAcl -VMName "ServerName" -Action "Allow" -Direction "Inbound" -Protocol 2 -Weight 20
Add-VMNetworkAdapterExtendedAcl -VMName "ServerName" -Action "Allow" -Direction "Outbound" -Protocol 2 -Weight 20
Правила ACL с отслеживанием состояния
Еще одна новая возможность расширенных списков ACL — настройка правил с отслеживанием состояния. Правило с отслеживанием состояния фильтрует пакеты на основе пяти атрибутов в пакете — исходный IP-адрес, IP-адрес назначения, протокол, исходный порт и порт назначения.
Правила с отслеживанием состояния имеют следующие возможности:
Они всегда разрешают трафик и не используются для его блокировки.
Если указать, что значение для направления параметра входящий и трафик соответствует правилу, виртуальный коммутатор Hyper-V динамически создает соответствующее правило, которое позволяет виртуальной машине отправлять исходящий трафик в ответ на внешний ресурс.
Если указать, что значение для направления параметра является исходящим, а трафик соответствует правилу, виртуальный коммутатор Hyper-V динамически создает правило сопоставления, которое позволяет получать исходящий трафик внешнего ресурса виртуальной машиной.
Они включают атрибут времени ожидания, выражаемый в секундах. Когда на коммутатор поступает сетевой пакет, соответствующий правилу с отслеживанием состояния, виртуальный коммутатор Hyper-V создает состояние таким образом, чтобы разрешить все последующие пакеты, передаваемые в обоих направлениях того же потока. Срок действия состояния истекает, когда отсутствует трафик в каком-либо направлении в течение периода, заданного значением времени ожидания.
Далее приведен пример возможного использования правил с отслеживанием состояния.
Разрешать входящий трафик удаленного сервера только после обращения к нему локального сервера
В некоторых случаях правило с отслеживанием состояния необходимо использовать потому, что только оно позволяет отслеживать известное установленное соединение и отличать его от прочих подключений.
Например, чтобы разрешить серверу приложений виртуальной машины инициировать подключения на порте 80 к веб-службам в Интернете и дать удаленным веб-серверам возможность отвечать на трафик виртуальной машины, можно настроить правило с отслеживанием состояния, разрешающее первоначальный исходящий трафик, передающийся с виртуальной машины веб-службам. Поскольку это правило с отслеживанием состояния, обратный трафик, поступающий с веб-серверов на виртуальную машину, также разрешен. Из соображений безопасности можно блокировать весь прочий входящий сетевой трафик, поступающий на виртуальную машину.
Чтобы настроить такое правило, можно использовать параметры, указанные в таблице ниже.
Примечание.
В связи с ограничениями форматирования и объемом данных в этой таблице информация в ней отображается не так, как в предыдущих таблицах этого документа.
Параметр | Правило 1 | Правило 2 | Правило 3 |
---|---|---|---|
Исходный IP-адрес | * | * | * |
IP-адрес назначения | * | * | * |
Протокол | * | * | TCP |
Исходный порт | * | * | * |
Конечный порт | * | * | 80 |
Направление | In | выход | выход |
Действие | Запрет | Запрет | Разрешить |
С отслеживанием состояния | No | No | Да |
Время ожидания (сек) | Неприменимо | Неприменимо | 3600 |
Правило с отслеживанием состояния разрешает серверу приложений виртуальной машины подключаться к удаленному веб-серверу. При отправке первого пакета виртуальный коммутатор Hyper-V динамически создает два состояния потока, чтобы разрешить все пакеты, отправляемые на удаленный веб-сервер, и все пакеты, возвращающиеся с него. Когда поток пакетов между серверами прекращается, срок действия состояний потока истекает через назначенное время ожидания — 3600 секунд (один час).
Далее приведен пример создания этих правил с помощью команд Windows PowerShell.
Add-VMNetworkAdapterExtendedAcl -VMName "ApplicationServer" -Action "Deny" -Direction "Inbound" -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName "ApplicationServer" -Action "Deny" -Direction "Outbound" -Weight 1
Add-VMNetworkAdapterExtendedAcl -VMName "ApplicationServer" -Action "Allow" -Direction "Outbound" 80 "TCP" -Weight 100 -Stateful -Timeout 3600