Data Center firewall gebruiken voor Software-Defined netwerken in Azure Stack HCIUse Datacenter Firewall for Software-Defined Networking in Azure Stack HCI

Van toepassing op: Azure Stack HCI, versie 20H2; Windows Server 2019Applies to: Azure Stack HCI, version 20H2; Windows Server 2019

In dit onderwerp vindt u instructies voor het configureren van toegangs beheer lijsten (Acl's) voor het beheren van gegevens verkeer stroom met behulp van Data Center firewall voor door software gedefinieerde netwerken (SDN) in azure stack HCI met behulp van Windows Power shell.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. U kunt Data Center-firewall inschakelen en configureren door Acl's te maken die worden toegepast op een subnet of een netwerk interface.You enable and configure Datacenter Firewall by creating ACLs that get applied to a subnet or a network interface. De voorbeeld scripts in dit onderwerp gebruiken Windows Power shell-opdrachten die zijn geëxporteerd uit de Network controller -module.The example scripts in this topic use Windows PowerShell commands exported from the NetworkController module. U kunt ook Windows-beheer centrum gebruiken om Acl's te configureren en te beheren.You can also use Windows Admin Center to configure and manage ACLs.

Data Center-firewall configureren om al het verkeer toe te staanConfigure Datacenter Firewall to allow all traffic

Wanneer u SDN implementeert, moet u testen op basis netwerk connectiviteit in uw nieuwe omgeving.Once you deploy SDN, you should test for basic network connectivity in your new environment. Als u dit wilt doen, maakt u een regel voor de Data Center-firewall waarmee al het netwerk verkeer, zonder enige beperking, is toegestaan.To accomplish this, create a rule for Datacenter Firewall that allows all network traffic, without restriction.

Gebruik de vermeldingen in de volgende tabel om een set regels te maken die alle binnenkomend en uitgaand netwerk verkeer toestaan.Use the entries in the following table to create a set of rules that allow all inbound and outbound network traffic.

Bron-IPSource IP Doel-IPDestination IP ProtocolProtocol BronpoortSource Port DoelpoortDestination Port RichtingDirection BewerkingAction PrioriteitPriority
* * AllesAll * * InkomendInbound ToestaanAllow 100100
* * AllesAll * * UitgaandOutbound ToestaanAllow 110110

In dit voor beeld maakt u een ACL met twee regels:In this example, you create an ACL with two rules:

  1. AllowAll_Inbound : Hiermee staat u toe dat al het netwerk verkeer wordt door gegeven aan de netwerk interface waarin deze toegangs beheer lijst is geconfigureerd.AllowAll_Inbound - allows all network traffic to pass into the network interface where this ACL is configured.
  2. AllowAllOutbound : Hiermee staat u toe dat al het verkeer wordt door gegeven aan de netwerk interface.AllowAllOutbound - allows all traffic to pass out of the network interface. Deze ACL, geïdentificeerd door de resource-ID ' AllowAll-1 ', is nu gereed om te worden gebruikt in virtuele subnetten en netwerk interfaces.This ACL, identified by the resource ID "AllowAll-1" is now ready to be used in virtual subnets and network interfaces.

Maak eerst verbinding met een van de cluster knooppunten door een Power shell-sessie te openen:First, connect to one of the cluster nodes by opening a PowerShell session:

Enter-PSSession <server-name>

Voer vervolgens het volgende script uit om de ACL te maken: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>

Notitie

De Windows Power shell-opdracht verwijzing voor netwerk controller bevindt zich in het onderwerp netwerk controller-cmdlets.The Windows PowerShell command reference for Network Controller is located in the topic Network Controller cmdlets.

Acl's gebruiken om verkeer op een subnet te beperkenUse ACLs to limit traffic on a subnet

In dit voor beeld maakt u een ACL waarmee wordt voor komen dat virtuele machines (Vm's) binnen het 192.168.0.0/24-subnet kunnen communiceren met elkaar.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. Dit type toegangs beheer lijst is handig voor het beperken van de mogelijkheid van een aanvaller om zich op een later tijdstip binnen het subnet te verspreiden, terwijl de Vm's toch aanvragen van buiten het subnet kunnen ontvangen, en communicatie met andere services op andere subnetten.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.

Bron-IPSource IP Doel-IPDestination IP ProtocolProtocol BronpoortSource Port DoelpoortDestination Port RichtingDirection BewerkingAction PrioriteitPriority
192.168.0.1192.168.0.1 * AllesAll * * InkomendInbound ToestaanAllow 100100
* 192.168.0.1192.168.0.1 AllesAll * * UitgaandOutbound ToestaanAllow 101101
192.168.0.0/24192.168.0.0/24 * AllesAll * * InkomendInbound BlokkerenBlock 102102
* 192.168.0.0/24192.168.0.0/24 AllesAll * * UitgaandOutbound BlokkerenBlock 103103
* * AllesAll * * InkomendInbound ToestaanAllow 104104
* * AllesAll * * UitgaandOutbound ToestaanAllow 105105

De ACL die is gemaakt met het onderstaande voorbeeld script, geïdentificeerd door het ID-subnet van de resource -192-168-0-0, kan nu worden toegepast op een subnet van een virtueel netwerk dat gebruikmaakt van het subnet adres 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. Elke netwerk interface die aan het subnet van het virtuele netwerk is gekoppeld, haalt automatisch de bovenstaande ACL-regels op.Any network interface that is attached to that virtual network subnet automatically gets the above ACL rules applied.

Hier volgt een voorbeeld script om deze toegangs beheer lijst te maken met behulp van de netwerk controller 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

Een ACL toevoegen aan een netwerk interfaceAdd an ACL to a network interface

Zodra u een ACL hebt gemaakt en toegewezen aan een virtueel subnet, wilt u de standaard-ACL voor het virtuele subnet wellicht negeren met een specifieke ACL voor een afzonderlijke netwerk interface.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 dit geval past u specifieke Acl's rechtstreeks toe op netwerk interfaces die zijn gekoppeld aan VLAN'S, in plaats van het virtuele netwerk.In this case, you apply specific ACLs directly to network interfaces attached to VLANs, instead of the virtual network. Als er Acl's zijn ingesteld op het virtuele subnet dat is verbonden met de netwerk interface, worden beide Acl's toegepast en worden prioriteiten gegeven voor de netwerk interface-Acl's boven de Acl's van het virtuele subnet.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.

In dit voor beeld laten we zien hoe u een ACL kunt toevoegen aan een virtueel netwerk.In this example, we demonstrate how to add an ACL to a virtual network.

Tip

Het is ook mogelijk om een toegangs beheer lijst toe te voegen op het moment dat u de netwerk interface maakt.It is also possible to add an ACL at the same time that you create the network interface.

  1. Haal of maak de netwerk interface waaraan u de ACL wilt toevoegen.Get or create the network interface to which you will add the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. De ACL ophalen of maken die u gaat toevoegen aan de netwerk interface.Get or create the ACL you will add to the network interface.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Wijs de toegangs beheer lijst toe aan de eigenschap AccessControlList van de netwerk interface.Assign the ACL to the AccessControlList property of the network interface.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Voeg de netwerk interface toe aan de netwerk controller.Add the network interface in Network Controller.

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

Een ACL verwijderen van een netwerk interfaceRemove an ACL from a network interface

In dit voor beeld laten we u zien hoe u een ACL verwijdert uit een netwerk interface.In this example, we show you how to remove an ACL from a network interface. Als u een ACL verwijdert, geldt de standaardset regels voor de netwerk interface.Removing an ACL applies the default set of rules to the network interface. Met de standaardset regels kunt u al het uitgaande verkeer toestaan, maar wordt al het inkomende verkeer geblokkeerd.The default set of rules allows all outbound traffic but blocks all inbound traffic. Als u al het inkomende verkeer wilt toestaan, moet u het vorige voor beeld volgen om een ACL toe te voegen waarmee alle inkomende en uitgaande verkeer worden toegestaan.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. Haal de netwerk interface op waarvan u de ACL wilt verwijderen.Get the network interface from which you will remove the ACL.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Wijs $null toe aan de eigenschap AccessControlList van de ipConfiguration.Assign $null to the AccessControlList property of the ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Voeg het object netwerk interface toe aan de netwerk controller.Add the network interface object in Network Controller.

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

Firewall controlerenFirewall auditing

Het controleren van de firewall is een nieuwe mogelijkheid voor de Data Center-firewall waarmee elke stroom wordt geregistreerd die wordt verwerkt door de SDN-firewall regels.Firewall auditing is a new capability for the Datacenter Firewall that records any flow processed by SDN firewall rules. Alle Acl's waarvoor logboek registratie is ingeschakeld, worden geregistreerd.All ACLs that have logging enabled are recorded. De logboek bestanden moeten een syntaxis hebben die consistent is met de Azure Network Watcher flow-logboeken.The log files must be in a syntax that is consistent with the Azure Network Watcher flow logs. Deze logboeken kunnen worden gebruikt voor diagnostische gegevens of worden gearchiveerd voor latere analyse.These logs can be used for diagnostics or archived for later analysis.

Hier volgt een voorbeeld script om de controle van de firewall op de hostservers in te scha kelen.Here is a sample script to enable firewall auditing on the host servers. Werk de variabelen aan het begin bij en voer deze uit op een Azure Stack HCI-cluster met geïmplementeerde netwerk controller :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
}

Wanneer deze functie is ingeschakeld, wordt een nieuw bestand per uur weer gegeven in de opgegeven map op elke host.Once enabled, a new file appears in the specified directory on each host about once per hour. U moet deze bestanden regel matig verwerken en verwijderen van de hosts.You should periodically process these files and remove them from the hosts. Het huidige bestand heeft een lengte van nul en wordt vergrendeld tot het volgende uur wordt leeg gemaakt: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

Deze bestanden bevatten een reeks stroom gebeurtenissen, bijvoorbeeld: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"
            },

Houd er rekening mee dat logboek registratie alleen plaatsvindt voor regels waarvoor logboek registratie is ingesteld, bijvoorbeeld: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
                                       }
                                   ]
                   }
}

Volgende stappenNext steps

Zie voor verwante informatie ook:For related information, see also: