Konfigurera nätverkssäkerhetsgrupper på din Azure Stack HCI med PowerShell

Gäller för: Azure Stack HCI, versionerna 23H2 och 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016

Den här artikeln innehåller instruktioner för hur du konfigurerar nätverkssäkerhetsgrupper (NSG:er) för att hantera datatrafikflöden med datacenterbrandväggen för programvarudefinierade nätverk (SDN) i Azure Stack HCI med hjälp av Windows PowerShell. Du aktiverar och konfigurerar datacenterbrandväggen genom att skapa nätverkssäkerhetsgrupper som tillämpas på ett undernät eller ett nätverksgränssnitt.

Exempelskripten i den här artikeln använder Windows PowerShell kommandon som exporteras från NetworkController-modulen. Du kan också använda Windows Admin Center för att konfigurera och hantera nätverkssäkerhetsgrupper.

Konfigurera datacenterbrandväggen så att all trafik tillåts

När du har distribuerat SDN bör du testa grundläggande nätverksanslutningar i den nya miljön. För att åstadkomma detta skapar du en regel för datacenterbrandväggen som tillåter all nätverkstrafik, utan begränsning.

Använd posterna i följande tabell för att skapa en uppsättning regler som tillåter all inkommande och utgående nätverkstrafik.

Käll-IP-adress Mål-IP-adress Protokoll Källport Målport Riktning Åtgärd Prioritet
* * Alla * * Inkommande Tillåt 100
* * Alla * * Utgående Tillåt 110

I det här exemplet skapar du en nätverkssäkerhetsgrupp med två regler:

  1. AllowAll_Inbound – tillåter att all nätverkstrafik skickas till nätverksgränssnittet där den här nätverkssäkerhetsgruppen är konfigurerad.
  2. AllowAllOutbound – tillåter att all trafik skickas ut från nätverksgränssnittet. Den här nätverkssäkerhetsgruppen som identifieras av resurs-ID:t "AllowAll-1" är nu redo att användas i virtuella undernät och nätverksgränssnitt.

Du kan köra det här kommandot från alla datorer som har åtkomst till REST-slutpunkten för nätverksstyrenheten. Öppna först en PowerShell-session. I det här exemplet använder du cmdleten Enter-PSSession och ersätter <computer-name> med namnet på den dator som har REST-slutpunkten för nätverksstyrenheten.

Enter-PSSession <computer-name>

Kör sedan följande skript för att skapa nätverkssäkerhetsgruppen:

$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>

Anteckning

Kommandoreferensen Windows PowerShell för nätverksstyrenheten finns i cmdletarna för nätverksstyrenheten.

Använda nätverkssäkerhetsgrupper för att begränsa trafiken i ett undernät

I det här exemplet skapar du en nätverkssäkerhetsgrupp som förhindrar att virtuella datorer (VM) i undernätet 192.168.0.0/24 kommunicerar med varandra. Den här typen av nätverkssäkerhetsgrupp är användbar för att begränsa angriparens möjlighet att sprida sig i sidled i undernätet, samtidigt som de virtuella datorerna kan ta emot begäranden utanför undernätet och kommunicera med andra tjänster i andra undernät.

Käll-IP-adress Mål-IP-adress Protokoll Källport Målport Riktning Åtgärd Prioritet
192.168.0.1 * Alla * * Inkommande Tillåt 100
* 192.168.0.1 Alla * * Utgående Tillåt 101
192.168.0.0/24 * Alla * * Inkommande Blockera 102
* 192.168.0.0/24 Alla * * Utgående Blockera 103
* * Alla * * Inkommande Tillåt 104
* * Alla * * Utgående Tillåt 105

Nätverkssäkerhetsgruppen som skapas av exempelskriptet nedan, identifierad av resurs-ID-undernätet-192-168-0-0, kan nu tillämpas på ett virtuellt nätverksundernät som använder undernätsadressen "192.168.0.0/24". Alla nätverksgränssnitt som är anslutna till det virtuella nätverksundernätet får automatiskt ovanstående regler för nätverkssäkerhetsgruppen tillämpade.

Följande är ett exempelskript för att skapa den här nätverkssäkerhetsgruppen med hjälp av REST-API:et för nätverksstyrenheten:

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

Lägga till en nätverkssäkerhetsgrupp i ett nätverksgränssnitt

När du har skapat en nätverkssäkerhetsgrupp och tilldelat den till ett virtuellt undernät kanske du vill åsidosätta standardnätverkssäkerhetsgruppen i det virtuella undernätet med en specifik nätverkssäkerhetsgrupp för ett enskilt nätverksgränssnitt. Från och med Windows Server 2019 Datacenter kan du tillämpa specifika nätverkssäkerhetsgrupper direkt på nätverksgränssnitt som är kopplade till logiska SDN-nätverk, förutom virtuella SDN-nätverk. Om du har angett nätverkssäkerhetsgrupper i det virtuella undernätet som är anslutna till nätverksgränssnittet tillämpas båda nätverkssäkerhetsgrupperna och nätverkssäkerhetsgrupperna för nätverksgränssnittet prioriteras ovanför säkerhetsgrupperna för det virtuella undernätets nätverk.

I det här exemplet visar vi hur du lägger till en nätverkssäkerhetsgrupp i ett virtuellt nätverk.

Tips

Du kan också lägga till en nätverkssäkerhetsgrupp samtidigt som du skapar nätverksgränssnittet.

  1. Hämta eller skapa det nätverksgränssnitt som du lägger till nätverkssäkerhetsgruppen i.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Hämta eller skapa den nätverkssäkerhetsgrupp som du ska lägga till i nätverksgränssnittet.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Tilldela nätverkssäkerhetsgruppen till egenskapen AccessControlList för nätverksgränssnittet.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Lägg till nätverksgränssnittet i nätverksstyrenheten.

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

Ta bort en nätverkssäkerhetsgrupp från ett nätverksgränssnitt

I det här exemplet visar vi hur du tar bort en nätverkssäkerhetsgrupp från ett nätverksgränssnitt. Om du tar bort en nätverkssäkerhetsgrupp tillämpas standarduppsättningen med regler på nätverksgränssnittet. Standarduppsättningen med regler tillåter all utgående trafik men blockerar all inkommande trafik. Om du vill tillåta all inkommande trafik måste du följa föregående exempel för att lägga till en nätverkssäkerhetsgrupp som tillåter all inkommande och all utgående trafik.

  1. Hämta nätverksgränssnittet som du tar bort nätverkssäkerhetsgruppen från.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Tilldela $null till egenskapen AccessControlList för ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Lägg till nätverksgränssnittsobjektet i nätverksstyrenheten.

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

Brandväggsgranskning

Funktionen för brandväggsgranskning för datacenterbrandväggen registrerar alla flöden som bearbetas av SDN-brandväggsregler. Alla nätverkssäkerhetsgrupper som har loggning aktiverat registreras. Loggfilerna måste finnas i en syntax som överensstämmer med Azure Network Watcher flödesloggar. Dessa loggar kan användas för diagnostik eller arkiveras för senare analys.

Här är ett exempelskript för att aktivera brandväggsgranskning på värdservrarna. Uppdatera variablerna i början och kör detta på ett Azure Stack HCI-kluster med nätverksstyrenheten distribuerad:

$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
}

När den har aktiverats visas en ny fil i den angivna katalogen på varje värd ungefär en gång per timme. Du bör regelbundet bearbeta dessa filer och ta bort dem från värdarna. Den aktuella filen har noll längd och är låst tills den har tömts vid nästa timmarkering:

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

Dessa filer innehåller en sekvens med flödeshändelser, till exempel:

{
    "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"
            },

Observera att loggning endast sker för regler som har loggning inställd på Aktiverad, till exempel:

{
    "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
                                       }
                                   ]
                   }
}

Nästa steg

Relaterad information finns i: