Korzystanie z zapory centrum danych Software-Defined sieci na Azure Stack HCLUse Datacenter Firewall for Software-Defined Networking in Azure Stack HCI

Dotyczy: Azure Stack HCL, wersja 20H2; System Windows Server 2019Applies to: Azure Stack HCI, version 20H2; Windows Server 2019

Ten temat zawiera instrukcje dotyczące konfigurowania list kontroli dostępu (ACL) w celu zarządzania przepływem ruchu danych za pomocą zapory centrów sieciowych (SDN) w Azure Stack HCL przy użyciu programu 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. Zapora centrum danych jest włączana i konfigurowana przez tworzenie list ACL, które są stosowane do podsieci lub interfejsu sieciowego.You enable and configure Datacenter Firewall by creating ACLs that get applied to a subnet or a network interface. Przykładowe skrypty w tym temacie używają poleceń programu Windows PowerShell, które zostały wyeksportowane z modułu NetworkController .The example scripts in this topic use Windows PowerShell commands exported from the NetworkController module. Możesz także użyć Centrum administracyjnego systemu Windows, aby skonfigurować listy ACL i zarządzać nimi.You can also use Windows Admin Center to configure and manage ACLs.

Skonfiguruj zaporę centrum danych tak, aby zezwalała na cały ruchConfigure Datacenter Firewall to allow all traffic

Po wdrożeniu SDN należy przetestować podstawową łączność sieciową w nowym środowisku.Once you deploy SDN, you should test for basic network connectivity in your new environment. Aby to osiągnąć, Utwórz regułę dla zapory centrum danych, która umożliwia cały ruch sieciowy bez ograniczeń.To accomplish this, create a rule for Datacenter Firewall that allows all network traffic, without restriction.

Użyj wpisów z poniższej tabeli, aby utworzyć zestaw reguł zezwalających na cały ruch sieciowy przychodzący i wychodzący.Use the entries in the following table to create a set of rules that allow all inbound and outbound network traffic.

Źródłowy adres IPSource IP Docelowy adres IPDestination IP ProtokółProtocol Port źródłowySource Port Port docelowyDestination Port KierunekDirection AkcjaAction PriorytetPriority
* * WszystkoAll * * PrzychodzącyInbound ZezwalajAllow 100100
* * WszystkoAll * * WychodzącyOutbound ZezwalajAllow 110110

W tym przykładzie utworzysz listę ACL z dwiema regułami:In this example, you create an ACL with two rules:

  1. AllowAll_Inbound — umożliwia przekazanie całego ruchu sieciowego do interfejsu sieciowego, w którym skonfigurowano tę listę kontroli dostępu.AllowAll_Inbound - allows all network traffic to pass into the network interface where this ACL is configured.
  2. AllowAllOutbound — zezwala na przekazywanie całego ruchu z interfejsu sieciowego.AllowAllOutbound - allows all traffic to pass out of the network interface. Ta lista kontroli dostępu określona przez identyfikator zasobu "AllowAll-1" jest teraz gotowa do użycia w podsieciach wirtualnych i interfejsach sieciowych.This ACL, identified by the resource ID "AllowAll-1" is now ready to be used in virtual subnets and network interfaces.

Najpierw Połącz się z jednym z węzłów klastra, otwierając sesję programu PowerShell:First, connect to one of the cluster nodes by opening a PowerShell session:

Enter-PSSession <server-name>

Następnie uruchom następujący skrypt, aby utworzyć listę 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>

Uwaga

Dokumentacja poleceń programu Windows PowerShell dla kontrolera sieci znajduje się w temacie polecenia cmdlet kontrolera siecitematu.The Windows PowerShell command reference for Network Controller is located in the topic Network Controller cmdlets.

Używanie list ACL do ograniczania ruchu w podsieciUse ACLs to limit traffic on a subnet

W tym przykładzie utworzysz listę kontroli dostępu, która zapobiega komunikacji między maszynami wirtualnymi w podsieci 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. Ten typ listy kontroli dostępu jest przydatny do ograniczania zdolności osoby atakującej w celu późniejszego rozłożenia w podsieci, dzięki czemu maszyny wirtualne mogą odbierać żądania spoza podsieci, a także komunikować się z innymi usługami w innych podsieciach.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.

Źródłowy adres IPSource IP Docelowy adres IPDestination IP ProtokółProtocol Port źródłowySource Port Port docelowyDestination Port KierunekDirection AkcjaAction PriorytetPriority
adresu192.168.0.1 * WszystkoAll * * PrzychodzącyInbound ZezwalajAllow 100100
* adresu192.168.0.1 WszystkoAll * * WychodzącyOutbound ZezwalajAllow 101101
192.168.0.0/24192.168.0.0/24 * WszystkoAll * * PrzychodzącyInbound ZablokowanieBlock 102102
* 192.168.0.0/24192.168.0.0/24 WszystkoAll * * WychodzącyOutbound ZablokowanieBlock 103103
* * WszystkoAll * * PrzychodzącyInbound ZezwalajAllow 104104
* * WszystkoAll * * WychodzącyOutbound ZezwalajAllow 105105

Lista ACL utworzona przez przykładowy skrypt poniżej, identyfikowana przez podsieć identyfikatora zasobu-192-168-0-0, może być teraz stosowana do podsieci sieci wirtualnej korzystającej z adresu podsieci "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. Wszystkie interfejsy sieciowe dołączone do tej podsieci sieci wirtualnej automatycznie pobierają powyższe zastosowane reguły listy ACL.Any network interface that is attached to that virtual network subnet automatically gets the above ACL rules applied.

Poniżej przedstawiono przykładowy skrypt służący do tworzenia tej listy ACL przy użyciu interfejsu API REST kontrolera sieci: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

Dodawanie listy ACL do interfejsu sieciowegoAdd an ACL to a network interface

Po utworzeniu listy ACL i przypisaniu jej do podsieci wirtualnej można zastąpić tę domyślną listę ACL dla podsieci wirtualnej z określoną listą kontroli dostępu dla poszczególnych interfejsów sieciowych.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. W takim przypadku należy zastosować określone listy ACL bezpośrednio do interfejsów sieciowych dołączonych do sieci VLAN, a nie do sieci wirtualnej.In this case, you apply specific ACLs directly to network interfaces attached to VLANs, instead of the virtual network. Jeśli masz listy ACL ustawione w podsieci wirtualnej podłączonej do interfejsu sieciowego, są stosowane obydwa listy kontroli dostępu i priorytety list ACL interfejsu sieciowego powyżej list ACL podsieci wirtualnych.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.

W tym przykładzie pokazano, jak dodać listę kontroli dostępu do sieci wirtualnej.In this example, we demonstrate how to add an ACL to a virtual network.

Porada

Istnieje również możliwość dodania listy ACL jednocześnie podczas tworzenia interfejsu sieciowego.It is also possible to add an ACL at the same time that you create the network interface.

  1. Pobierz lub Utwórz interfejs sieciowy, do którego zostanie dodana lista kontroli dostępu.Get or create the network interface to which you will add the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Pobierz lub Utwórz listę kontroli dostępu, która zostanie dodana do interfejsu sieciowego.Get or create the ACL you will add to the network interface.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Przypisz listę kontroli dostępu do właściwości AccessControlList interfejsu sieciowego.Assign the ACL to the AccessControlList property of the network interface.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Dodaj interfejs sieciowy w kontrolerze sieci.Add the network interface in Network Controller.

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

Usuwanie listy ACL z interfejsu sieciowegoRemove an ACL from a network interface

W tym przykładzie pokazano, jak usunąć listę kontroli dostępu z interfejsu sieciowego.In this example, we show you how to remove an ACL from a network interface. Usunięcie listy ACL powoduje zastosowanie domyślnego zestawu reguł do interfejsu sieciowego.Removing an ACL applies the default set of rules to the network interface. Domyślny zestaw reguł zezwala na cały ruch wychodzący, ale blokuje cały ruch przychodzący.The default set of rules allows all outbound traffic but blocks all inbound traffic. Aby zezwolić na cały ruch przychodzący, należy postępować zgodnie z poprzednim przykładem , aby dodać listę kontroli dostępu, która umożliwia cały ruch przychodzący i cały.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. Pobierz interfejs sieciowy, z którego zostanie usunięta lista kontroli dostępu.Get the network interface from which you will remove the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Przypisz $null do właściwości AccessControlList elementu ipConfiguration.Assign $null to the AccessControlList property of the ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Dodaj obiekt interfejsu sieciowego w kontrolerze sieci.Add the network interface object in Network Controller.

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

Inspekcja zaporyFirewall auditing

Inspekcja zapory to nowa możliwość dla zapory centrum danych, która rejestruje każdy przepływ przetwarzany przez reguły zapory SDN.Firewall auditing is a new capability for the Datacenter Firewall that records any flow processed by SDN firewall rules. Rejestrowane są wszystkie listy ACL z włączonym rejestrowaniem.All ACLs that have logging enabled are recorded. Pliki dziennika muszą mieć składnię zgodną z dziennikami usługi Azure Network Watcher Flow.The log files must be in a syntax that is consistent with the Azure Network Watcher flow logs. Te dzienniki mogą być używane do celów diagnostycznych lub archiwizowane w celu późniejszej analizy.These logs can be used for diagnostics or archived for later analysis.

Oto przykładowy skrypt służący do włączania inspekcji zapory na serwerach hosta.Here is a sample script to enable firewall auditing on the host servers. Zaktualizuj zmienne na początku i uruchom je w klastrze Azure Stack HCL przy użyciu wdrożonego kontrolera sieci :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
}

Po włączeniu nowy plik zostanie wyświetlony w określonym katalogu na każdym hoście na raz na godzinę.Once enabled, a new file appears in the specified directory on each host about once per hour. Należy okresowo przetwarzać te pliki i usuwać je z hostów.You should periodically process these files and remove them from the hosts. Bieżący plik ma zerową długość i jest zablokowany do momentu opróżnienia w następnym znaku: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

Te pliki zawierają sekwencję zdarzeń przepływu, na przykład: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"
            },

Uwaga: rejestrowanie odbywa się tylko dla reguł, które mają ustawioną funkcję rejestrowania , na przykład.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
                                       }
                                   ]
                   }
}

Następne krokiNext steps

Aby uzyskać powiązane informacje, zobacz również:For related information, see also: