Использование брандмауэра центра обработки данных для Software-Defined сетей в Azure Stack ХЦИUse Datacenter Firewall for Software-Defined Networking in Azure Stack HCI

Применимо к: Azure Stack ХЦИ, версия 20H2; Windows Server 2019Applies to: Azure Stack HCI, version 20H2; Windows Server 2019

В этом разделе приводятся инструкции по настройке списков управления доступом (ACL) для управления потоком трафика данных с помощью брандмауэра Datacenter для программно-определяемой сети (SDN) в Azure Stack хЦи с помощью Windows PowerShell.This topic provides instructions for configuring access control lists (ACLs) to manage data traffic flow using Datacenter Firewall for Software Defined Networking (SDN) in Azure Stack HCI using Windows PowerShell. Брандмауэр центра обработки данных включается и настраивается путем создания списков управления доступом, которые применяются к подсети или сетевому интерфейсу.You enable and configure Datacenter Firewall by creating ACLs that get applied to a subnet or a network interface. В примерах сценариев в этом разделе используются команды Windows PowerShell, экспортированные из модуля нетворкконтроллер .The example scripts in this topic use Windows PowerShell commands exported from the NetworkController module. Для настройки списков управления доступом и управления ими можно также использовать центр администрирования Windows.You can also use Windows Admin Center to configure and manage ACLs.

Настройка брандмауэра центра обработки данных для разрешения всего трафикаConfigure Datacenter Firewall to allow all traffic

После развертывания SDN необходимо протестировать базовое сетевое подключение в новой среде.Once you deploy SDN, you should test for basic network connectivity in your new environment. Чтобы сделать это, создайте правило для брандмауэра центра обработки данных, которое разрешает весь сетевой трафик без ограничений.To accomplish this, create a rule for Datacenter Firewall that allows all network traffic, without restriction.

Используйте записи в следующей таблице для создания набора правил, разрешающих весь входящий и исходящий сетевой трафик.Use the entries in the following table to create a set of rules that allow all inbound and outbound network traffic.

Исходный IP-адресSource IP Конечный IP-адресDestination IP ПротоколProtocol Исходный портSource Port Конечный портDestination Port НаправлениеDirection ДействиеAction ПриоритетPriority
* * AllAll * * Входящий трафикInbound AllowAllow 100100
* * AllAll * * Исходящий трафикOutbound AllowAllow 110110

В этом примере вы создадите список ACL с двумя правилами:In this example, you create an ACL with two rules:

  1. AllowAll_Inbound — разрешает передачу всего сетевого трафика в сетевой интерфейс, где настроен этот список ACL.AllowAll_Inbound - allows all network traffic to pass into the network interface where this ACL is configured.
  2. Алловаллаутбаунд — разрешает передачу всего трафика из сетевого интерфейса.AllowAllOutbound - allows all traffic to pass out of the network interface. Этот список ACL, определяемый ИДЕНТИФИКАТОРом ресурса "Алловалл-1", теперь готов к использованию в виртуальных подсетях и сетевых интерфейсах.This ACL, identified by the resource ID "AllowAll-1" is now ready to be used in virtual subnets and network interfaces.

Сначала подключитесь к одному из узлов кластера, открыв сеанс PowerShell:First, connect to one of the cluster nodes by opening a PowerShell session:

Enter-PSSession <server-name>

Затем выполните следующий скрипт, чтобы создать ACL:Then, run the following script to create the ACL:

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "100"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"
$aclrule1 = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule1.Properties = $ruleproperties
$aclrule1.ResourceId = "AllowAll_Inbound"
$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "110"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"
$aclrule2 = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule2.Properties = $ruleproperties
$aclrule2.ResourceId = "AllowAll_Outbound"
$acllistproperties = new-object Microsoft.Windows.NetworkController.AccessControlListProperties
$acllistproperties.AclRules = @($aclrule1, $aclrule2)
New-NetworkControllerAccessControlList -ResourceId "AllowAll" -Properties $acllistproperties -ConnectionUri <NC REST FQDN>

Примечание

Справочник по командам Windows PowerShell для сетевого контроллера находится в разделе командлеты сетевого контроллера.The Windows PowerShell command reference for Network Controller is located in the topic Network Controller cmdlets.

Использование списков управления доступом для ограничения трафика в подсетиUse ACLs to limit traffic on a subnet

В этом примере создается список ACL, который предотвращает обмен данными между виртуальными машинами в подсети 192.168.0.0/24.In this example, you create an ACL that prevents virtual machines (VMs) within the 192.168.0.0/24 subnet from communicating with each other. Этот тип ACL полезен для ограничения возможности злоумышленника распределяться позже в подсети, в то же время позволяя виртуальным машинам получать запросы извне подсети, а также взаимодействовать с другими службами в других подсетях.This type of ACL is useful for limiting the ability of an attacker to spread laterally within the subnet, while still allowing the VMs to receive requests from outside of the subnet, as well as to communicate with other services on other subnets.

Исходный IP-адресSource IP Конечный IP-адресDestination IP ПротоколProtocol Исходный портSource Port Конечный портDestination Port НаправлениеDirection ДействиеAction ПриоритетPriority
адреса192.168.0.1 * AllAll * * Входящий трафикInbound AllowAllow 100100
* адреса192.168.0.1 AllAll * * Исходящий трафикOutbound AllowAllow 101101
192.168.0.0/24192.168.0.0/24 * AllAll * * Входящий трафикInbound БлокироватьBlock 102102
* 192.168.0.0/24192.168.0.0/24 AllAll * * Исходящий трафикOutbound БлокироватьBlock 103103
* * AllAll * * Входящий трафикInbound AllowAllow 104104
* * AllAll * * Исходящий трафикOutbound AllowAllow 105105

Список управления доступом, созданный в приведенном ниже примере сценария, определяемый с помощью идентификатора ресурса Subnet-192-168-0-0, теперь можно применить к подсети виртуальной сети, которая использует адрес подсети 192.168.0.0/24.The ACL created by the example script below, identified by the resource ID Subnet-192-168-0-0, can now be applied to a virtual network subnet that uses the "192.168.0.0/24" subnet address. Любой сетевой интерфейс, подключенный к этой подсети виртуальной сети, автоматически получает примененные выше правила ACL.Any network interface that is attached to that virtual network subnet automatically gets the above ACL rules applied.

Ниже приведен пример скрипта для создания этого списка ACL с помощью REST API сетевого контроллера:The following is an example script to create this ACL using the Network Controller REST API:

import-module networkcontroller
$ncURI = "https://mync.contoso.local"
$aclrules = @()

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "192.168.0.1"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "100"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"

$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowRouter_Inbound"
$aclrules += $aclrule

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "192.168.0.1"
$ruleproperties.Priority = "101"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"

$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowRouter_Outbound"
$aclrules += $aclrule

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Deny"
$ruleproperties.SourceAddressPrefix = "192.168.0.0/24"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "102"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"

$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "DenySubnet_Inbound"
$aclrules += $aclrule

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Deny"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "192.168.0.0/24"
$ruleproperties.Priority = "103"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"

$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "DenySubnet_Outbound"

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "104"
$ruleproperties.Type = "Inbound"
$ruleproperties.Logging = "Enabled"

$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowAll_Inbound"
$aclrules += $aclrule

$ruleproperties = new-object Microsoft.Windows.NetworkController.AclRuleProperties
$ruleproperties.Protocol = "All"
$ruleproperties.SourcePortRange = "0-65535"
$ruleproperties.DestinationPortRange = "0-65535"
$ruleproperties.Action = "Allow"
$ruleproperties.SourceAddressPrefix = "*"
$ruleproperties.DestinationAddressPrefix = "*"
$ruleproperties.Priority = "105"
$ruleproperties.Type = "Outbound"
$ruleproperties.Logging = "Enabled"

$aclrule = new-object Microsoft.Windows.NetworkController.AclRule
$aclrule.Properties = $ruleproperties
$aclrule.ResourceId = "AllowAll_Outbound"
$aclrules += $aclrule

$acllistproperties = new-object Microsoft.Windows.NetworkController.AccessControlListProperties
$acllistproperties.AclRules = $aclrules

New-NetworkControllerAccessControlList -ResourceId "Subnet-192-168-0-0" -Properties $acllistproperties -ConnectionUri $ncURI

Добавление ACL к сетевому интерфейсуAdd an ACL to a network interface

После создания ACL и назначения его виртуальной подсети может потребоваться переопределить список ACL по умолчанию в виртуальной подсети с помощью определенного списка ACL для отдельного сетевого интерфейса.Once you've created an ACL and assigned it to a virtual subnet, you might want to override that default ACL on the virtual subnet with a specific ACL for an individual network interface. В этом случае конкретные списки управления доступом применяются непосредственно к сетевым интерфейсам, подключенным к виртуальным ЛС, а не к виртуальной сети.In this case, you apply specific ACLs directly to network interfaces attached to VLANs, instead of the virtual network. Если в виртуальной подсети, подключенной к сетевому интерфейсу, установлены списки управления доступом, то применяются оба списка ACL и приоритеты ACL сетевых интерфейсов, расположенные выше списков ACL виртуальной подсети.If you have ACLs set on the virtual subnet connected to the network interface, both ACLs are applied and prioritizes the network interface ACLs above the virtual subnet ACLs.

В этом примере показано, как добавить список ACL в виртуальную сеть.In this example, we demonstrate how to add an ACL to a virtual network.

Совет

Кроме того, можно добавить список управления доступом в то же время, когда вы создадите сетевой интерфейс.It is also possible to add an ACL at the same time that you create the network interface.

  1. Получите или создайте сетевой интерфейс, к которому будет добавлен ACL.Get or create the network interface to which you will add the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Получите или создайте список ACL, который будет добавлен к сетевому интерфейсу.Get or create the ACL you will add to the network interface.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Назначьте ACL свойству Акцессконтроллист сетевого интерфейса.Assign the ACL to the AccessControlList property of the network interface.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Добавьте сетевой интерфейс в сетевом контроллере.Add the network interface in Network Controller.

    new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
    

Удаление списка ACL из сетевого интерфейсаRemove an ACL from a network interface

В этом примере показано, как удалить список ACL из сетевого интерфейса.In this example, we show you how to remove an ACL from a network interface. При удалении ACL к сетевому интерфейсу применяется набор правил по умолчанию.Removing an ACL applies the default set of rules to the network interface. Набор правил по умолчанию разрешает весь исходящий трафик, но блокирует весь входящий трафик.The default set of rules allows all outbound traffic but blocks all inbound traffic. Если вы хотите разрешить весь входящий трафик, необходимо выполнить предыдущий Пример , чтобы добавить список управления доступом, который разрешает весь входящий и весь исходящий трафик.If you want to allow all inbound traffic, you must follow the previous example to add an ACL that allows all inbound and all outbound traffic.

  1. Получите сетевой интерфейс, из которого будет удален список управления доступом.Get the network interface from which you will remove the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Назначьте $null свойству конфигурации Акцессконтроллист.Assign $null to the AccessControlList property of the ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Добавьте объект сетевого интерфейса в сетевом контроллере.Add the network interface object in Network Controller.

    new-networkcontrollernetworkinterface -ConnectionUri $uri -Properties $nic.properties -ResourceId $nic.resourceid
    

Аудит брандмауэраFirewall auditing

Аудит брандмауэра — это новая возможность для брандмауэра центра обработки данных, которая записывает все потоки, обработанные правилами брандмауэра SDN.Firewall auditing is a new capability for the Datacenter Firewall that records any flow processed by SDN firewall rules. Записываются все списки управления доступом, для которых включено ведение журнала.All ACLs that have logging enabled are recorded. Файлы журналов должны быть в виде синтаксиса, который согласуется с журналами потоков наблюдателя за сетями Azure.The log files must be in a syntax that is consistent with the Azure Network Watcher flow logs. Эти журналы можно использовать для диагностики или архивирования для последующего анализа.These logs can be used for diagnostics or archived for later analysis.

Ниже приведен пример скрипта для включения аудита брандмауэра на серверах узлов.Here is a sample script to enable firewall auditing on the host servers. Обновите переменные в начале и запустите его в кластере Azure Stack ХЦИ с развернутым сетевым контроллером :Update the variables at the beginning and run this on an Azure Stack HCI cluster with Network Controller deployed:

$logpath = "C:\test\log1"
$servers = @("sa18n22-2", "sa18n22-3", "sa18n22-4")
$uri = "https://sa18n22sdn.sa18.nttest.microsoft.com"

# Create log directories on the hosts
invoke-command -Computername $servers  {
    param(
        $Path
    )
    mkdir $path    -force
} -argumentlist $LogPath

# Set firewall auditing settings on Network Controller
$AuditProperties = new-object Microsoft.Windows.NetworkController.AuditingSettingsProperties
$AuditProperties.OutputDirectory = $logpath
set-networkcontrollerauditingsettingsconfiguration -connectionuri $uri -properties $AuditProperties -force  | out-null

# Enable logging on each server
$servers = get-networkcontrollerserver -connectionuri $uri
foreach ($s in $servers) {
    $s.properties.AuditingEnabled = @("Firewall")
    new-networkcontrollerserver -connectionuri $uri -resourceid $s.resourceid -properties $s.properties -force | out-null
}

После включения новый файл будет отображаться в указанном каталоге на каждом узле примерно один раз в час.Once enabled, a new file appears in the specified directory on each host about once per hour. Следует периодически обрабатывать эти файлы и удалять их с узлов.You should periodically process these files and remove them from the hosts. Текущий файл имеет нулевую длину и заблокирован до сброса в следующий час:The current file has zero length and is locked until flushed at the next hour mark:

PS C:\test\log1> dir

    Directory: C:\test\log1

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        7/19/2018   6:28 AM          17055 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL122803093.json
-a----        7/19/2018   7:28 AM           7880 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL132803173.json
-a----        7/19/2018   8:28 AM           7867 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL142803264.json
-a----        7/19/2018   9:28 AM          10949 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL152803360.json
-a----        7/19/2018   9:28 AM              0 SdnFirewallAuditing.d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a.20180719TL162803464.json

Эти файлы содержат последовательность событий потока, например:These files contain a sequence of flow events, for example:

{
    "records": [
        {
            "properties":{
                "Version":"1.0",
                "flows":[
                    {
                        "flows":[
                            {
                                "flowTuples":["1531963580,192.122.0.22,192.122.255.255,138,138,U,I,A"],
                                "portId":"9",
                                "portName":"7290436D-0422-498A-8EB8-C6CF5115DACE"
                            }
                        ],
                        "rule":"Allow_Inbound"
                    }
                ]
            },
            "operationName":"NetworkSecurityGroupFlowEvents",
            "resourceId":"394f647d-2ed0-4c31-87c5-389b8c0c8132",
            "time":"20180719:L012620622",
            "category":"NetworkSecurityGroupFlowEvent",
            "systemId":"d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a"
            },

Обратите внимание, что ведение журнала выполняется только для правил , для которых настроено ведение журнала , например:Note, logging takes place only for rules that have Logging set to Enabled, for example:

{
    "Tags":  null,
    "ResourceRef":  "/accessControlLists/AllowAll",
    "InstanceId":  "4a63e1a5-3264-4986-9a59-4e77a8b107fa",
    "Etag":  "W/\"1535a780-0fc8-4bba-a15a-093ecac9b88b\"",
    "ResourceMetadata":  null,
    "ResourceId":  "AllowAll",
    "Properties":  {
                       "ConfigurationState":  null,
                       "ProvisioningState":  "Succeeded",
                       "AclRules":  [
                                        {
                                            "ResourceMetadata":  null,
                                            "ResourceRef":  "/accessControlLists/AllowAll/aclRules/AllowAll_Inbound",
                                            "InstanceId":  "ba8710a8-0f01-422b-9038-d1f2390645d7",
                                            "Etag":  "W/\"1535a780-0fc8-4bba-a15a-093ecac9b88b\"",
                                            "ResourceId":  "AllowAll_Inbound",
                                            "Properties":  {
                                                               "Protocol":  "All",
                                                               "SourcePortRange":  "0-65535",
                                                               "DestinationPortRange":  "0-65535",
                                                               "Action":  "Allow",
                                                               "SourceAddressPrefix":  "*",
                                                               "DestinationAddressPrefix":  "*",
                                                               "Priority":  "101",
                                                               "Description":  null,
                                                               "Type":  "Inbound",
                                                               "Logging":  "Enabled",
                                                               "ProvisioningState":  "Succeeded"
                                                           }
                                        },
                                        {
                                            "ResourceMetadata":  null,
                                            "ResourceRef":  "/accessControlLists/AllowAll/aclRules/AllowAll_Outbound",
                                            "InstanceId":  "068264c6-2186-4dbc-bbe7-f504c6f47fa8",
                                            "Etag":  "W/\"1535a780-0fc8-4bba-a15a-093ecac9b88b\"",
                                            "ResourceId":  "AllowAll_Outbound",
                                            "Properties":  {
                                                               "Protocol":  "All",
                                                               "SourcePortRange":  "0-65535",
                                                               "DestinationPortRange":  "0-65535",
                                                               "Action":  "Allow",
                                                               "SourceAddressPrefix":  "*",
                                                               "DestinationAddressPrefix":  "*",
                                                               "Priority":  "110",
                                                               "Description":  null,
                                                               "Type":  "Outbound",
                                                               "Logging":  "Enabled",
                                                               "ProvisioningState":  "Succeeded"
                                                           }
                                        }
                                    ],
                       "IpConfigurations":  [

                                            ],
                       "Subnets":  [
                                       {
                                           "ResourceMetadata":  null,
                                           "ResourceRef":  "/virtualNetworks/10_0_1_0/subnets/Subnet1",
                                           "InstanceId":  "00000000-0000-0000-0000-000000000000",
                                           "Etag":  null,
                                           "ResourceId":  null,
                                           "Properties":  null
                                       }
                                   ]
                   }
}

Следующие шагиNext steps

Связанные сведения см. также в следующих статьях:For related information, see also: