Dela via


Konfigurera nätverkssäkerhetsgrupper i Azure Local med PowerShell

Gäller för: Azure Local, 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 hjälp av Datacenter Firewall for Software Defined Networking (SDN) i Azure Local med 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 Modulen NetworkController . Du kan också använda Windows Administrationscenter 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 för grundläggande nätverksanslutning i den nya miljön. För att åstadkomma detta skapar du en regel för Datacenter-brandvä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 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>

Kommentar

Windows PowerShell-kommandoreferensen för nätverksstyrenheten finns i cmdletarna nätverksstyrenhet.

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 möjligheten för en angripare att sprida sig i sidled i undernätet, samtidigt som de virtuella datorerna fortfarande 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, som identifieras av resurs-ID :t Subnet-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 för nätverksstyrenhet:

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 den 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, utöver virtuella SDN-nätverk. Om du har nätverkssäkerhetsgrupper inställda på det virtuella undernätet som är anslutet till nätverksgränssnittet tillämpas båda nätverkssäkerhetsgrupperna och nätverksgränssnittets nätverkssäkerhetsgrupper prioriteras ovanför säkerhetsgrupperna för virtuella undernätsnätverk.

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

Dricks

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

  1. Hämta eller skapa nätverksgränssnittet som du ska lägga till nätverkssäkerhetsgruppen till.

    $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öde som bearbetas av SDN-brandväggsregler. Alla nätverkssäkerhetsgrupper som har loggning aktiverat registreras. Loggfilerna måste finnas i en syntax som är konsekvent med Azure Network Watcher-flödesloggarna. 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ärddatorer. Uppdatera variablerna i början och kör detta på en lokal Azure-instans 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 är aktiverad 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":"a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
            "time":"20180719:L012620622",
            "category":"NetworkSecurityGroupFlowEvent",
            "systemId":"d8b3b697-5355-40e2-84d2-1bf2f0e0dc4a"
            },

Observera att loggning endast sker för regler som har loggning inställt 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: