Condividi tramite


Configurare i gruppi di sicurezza di rete nell'istanza locale di Azure con PowerShell

Si applica a: Locale di Azure, versioni 23H2 e 22H2; Windows Server 2022, Windows Server 2019, Windows Server 2016

Questo articolo fornisce istruzioni per la configurazione dei gruppi di sicurezza di rete (NSG) per gestire il flusso del traffico di dati usando Il firewall del data center per la rete SDN (Software Defined Networking) in Azure Locale con Windows PowerShell. È possibile abilitare e configurare il firewall del data center creando gruppi di sicurezza di rete che vengono applicati a una subnet o a un'interfaccia di rete.

Gli script di esempio in questo articolo usano i comandi di Windows PowerShell esportati dal modulo NetworkController . È anche possibile usare Windows Admin Center per configurare e gestire i gruppi di sicurezza di rete.

Configurare il firewall del data center per consentire tutto il traffico

Dopo aver distribuito SDN, è necessario testare la connettività di rete di base nel nuovo ambiente. A tale scopo, creare una regola per Il firewall del data center che consenta tutto il traffico di rete, senza restrizioni.

Usare le voci nella tabella seguente per creare un set di regole che consentano tutto il traffico di rete in ingresso e in uscita.

IP di origine IP destinazione Protocollo Porta di origine Porta di destinazione Direzione Azione Priorità
* * Tutte le date * * In entrata Consenti 100
* * Tutte le date * * In uscita Consenti 110

In questo esempio viene creato un gruppo di sicurezza di rete con due regole:

  1. AllowAll_Inbound: consente a tutto il traffico di rete di passare all'interfaccia di rete in cui è configurato questo gruppo di sicurezza di rete.
  2. AllowAllOutbound : consente a tutto il traffico di passare dall'interfaccia di rete. Questo gruppo di sicurezza di rete, identificato dall'ID risorsa "AllowAll-1" è ora pronto per essere usato nelle subnet virtuali e nelle interfacce di rete.

È possibile eseguire questo comando da qualsiasi computer che abbia accesso all'endpoint REST del controller di rete. Aprire prima di tutto una sessione di PowerShell. In questo esempio usare il cmdlet Enter-PSSession e sostituire <computer-name> con il nome del computer con l'endpoint REST del controller di rete.

Enter-PSSession <computer-name>

Eseguire quindi lo script seguente per creare il gruppo di sicurezza di rete:

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

Nota

Le informazioni di riferimento sui comandi di Windows PowerShell per Controller di rete si trovano nei cmdlet del controller di rete.

Usare i gruppi di sicurezza di rete per limitare il traffico in una subnet

In questo esempio viene creato un gruppo di sicurezza di rete che impedisce alle macchine virtuali all'interno della subnet 192.168.0.0/24 di comunicare tra loro. Questo tipo di gruppo di sicurezza di rete è utile per limitare la capacità di un utente malintenzionato di estendersi successivamente all'interno della subnet, consentendo comunque alle macchine virtuali di ricevere richieste dall'esterno della subnet e di comunicare con altri servizi in altre subnet.

IP di origine IP destinazione Protocollo Porta di origine Porta di destinazione Direzione Azione Priorità
192.168.0.1 * Tutte le date * * In entrata Consenti 100
* 192.168.0.1 Tutte le date * * In uscita Consenti 101
192.168.0.0/24 * Tutte le date * * In entrata Blocco 102
* 192.168.0.0/24 Tutte le date * * In uscita Blocco 103
* * Tutte le date * * In entrata Consenti 104
* * Tutte le date * * In uscita Consenti 105

Il gruppo di sicurezza di rete creato dallo script di esempio seguente, identificato dall'ID risorsa Subnet-192-168-0-0, può ora essere applicato a una subnet di rete virtuale che usa l'indirizzo della subnet "192.168.0.0.0/24". Qualsiasi interfaccia di rete collegata a tale subnet di rete virtuale ottiene automaticamente le regole del gruppo di sicurezza di rete sopra indicate.

Di seguito è riportato uno script di esempio per creare questo gruppo di sicurezza di rete usando l'API REST del controller di rete:

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

Aggiungere un gruppo di sicurezza di rete a un'interfaccia di rete

Dopo aver creato un gruppo di sicurezza di rete e averlo assegnato a una subnet virtuale, è possibile eseguire l'override del gruppo di sicurezza di rete predefinito nella subnet virtuale con un gruppo di sicurezza di rete specifico per una singola interfaccia di rete. A partire da Windows Server 2019 Datacenter, è possibile applicare gruppi di sicurezza di rete specifici direttamente alle interfacce di rete collegate alle reti logiche SDN, oltre alle reti virtuali SDN. Se sono impostati gruppi di sicurezza di rete nella subnet virtuale connessa all'interfaccia di rete, vengono applicati entrambi i gruppi di sicurezza di rete e i gruppi di sicurezza di rete dell'interfaccia di rete sono classificati in ordine di priorità al di sopra dei gruppi di sicurezza di rete della subnet virtuale.

In questo esempio viene illustrato come aggiungere un gruppo di sicurezza di rete a una rete virtuale.

Suggerimento

È anche possibile aggiungere un gruppo di sicurezza di rete contemporaneamente alla creazione dell'interfaccia di rete.

  1. Ottenere o creare l'interfaccia di rete a cui aggiungere il gruppo di sicurezza di rete.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Ottenere o creare il gruppo di sicurezza di rete che si aggiungerà all'interfaccia di rete.

    $acl = get-networkcontrolleraccesscontrollist -ConnectionUri $uri -ResourceId "AllowAllACL"
    
  3. Assegnare il gruppo di sicurezza di rete alla proprietà AccessControlList dell'interfaccia di rete.

     $nic.properties.ipconfigurations[0].properties.AccessControlList = $acl
    
  4. Aggiungere l'interfaccia di rete in Controller di rete.

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

Rimuovere un gruppo di sicurezza di rete da un'interfaccia di rete

In questo esempio viene illustrato come rimuovere un gruppo di sicurezza di rete da un'interfaccia di rete. La rimozione di un gruppo di sicurezza di rete applica il set predefinito di regole all'interfaccia di rete. Il set predefinito di regole consente tutto il traffico in uscita, ma blocca tutto il traffico in ingresso. Se si vuole consentire tutto il traffico in ingresso, è necessario seguire l'esempio precedente per aggiungere un gruppo di sicurezza di rete che consenta tutto il traffico in ingresso e tutto il traffico in uscita.

  1. Ottenere l'interfaccia di rete da cui si rimuoverà il gruppo di sicurezza di rete.

    $nic = get-networkcontrollernetworkinterface -ConnectionUri $uri -ResourceId "MyVM_Ethernet1"
    
  2. Assegnare $null alla proprietà AccessControlList di ipConfiguration.

    $nic.properties.ipconfigurations[0].properties.AccessControlList = $null
    
  3. Aggiungere l'oggetto interfaccia di rete in Controller di rete.

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

Controllo del firewell

La funzionalità di controllo del firewall per il firewall del data center registra qualsiasi flusso elaborato dalle regole del firewall SDN. Vengono registrati tutti i gruppi di sicurezza di rete con registrazione abilitata. I file di log devono trovarsi in una sintassi coerente con i log del flusso di Azure Network Watcher. Questi log possono essere usati per la diagnostica o archiviati per un'analisi successiva.

Ecco uno script di esempio per abilitare il controllo del firewall nei computer host. Aggiornare le variabili all'inizio ed eseguirlo in un'istanza locale di Azure con il controller di rete distribuito:

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

Una volta abilitato, un nuovo file viene visualizzato nella directory specificata in ogni host circa una volta all'ora. È consigliabile elaborare periodicamente questi file e rimuoverli dagli host. Il file corrente ha una lunghezza zero e viene bloccato fino a quando non viene scaricato al contrassegno dell'ora successiva:

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

Questi file contengono una sequenza di eventi di flusso, ad esempio:

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

Si noti che la registrazione viene eseguita solo per le regole con Registrazione impostata su Abilitato, ad esempio:

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

Passaggi successivi

Per informazioni correlate, vedere: