Azure Network Security Groups o Azure NSG ti consentono di filtrare il traffico di rete in ingresso e in uscita da una o più risorse di Azure. Se hai mai avuto bisogno di impedire l’accesso a una risorsa di Azure, devi capire come funzionano gli NSG.
In questo articolo, imparerai lo scopo degli Azure NSG e come configurarli con il linguaggio di scripting PowerShell.
Prerequisiti
- Una risorsa di Azure da destinare. Questo tutorial utilizzerà una sottoscrizione pay-as-you-go e una macchina virtuale Azure con Windows Server 2019.
- PowerShell 7+. Le versioni precedenti di PowerShell potrebbero funzionare, ma questo tutorial utilizza PowerShell 7.0.1 per la configurazione.
- Il modulo PowerShell Azure Az
Comprensione degli Azure NSG
Pensa a un Azure NSG come a un firewall. Un firewall è costituito da regole che definiscono le azioni da intraprendere sul traffico in entrata e in uscita chiamate insiemi di regole. I firewall di solito sono dotati di insiemi di regole predefinite che stabiliscono cosa può attraversare il firewall e cosa no; gli Azure NSG hanno qualcosa di simile.
A differenza dei firewall tradizionali, le NSG di Azure hanno anche un concetto cloud chiamato tag di servizio. I tag di servizio sono il modo di Azure per astrare gli intervalli di indirizzi per semplificarne la gestione.
Vediamo brevemente ciascuno di questi argomenti importanti.
Utilizzo dei tag di servizio per semplificare la configurazione delle regole
Nei servizi cloud, gli indirizzi IP e gli intervalli possono spesso cambiare. Ciò può rendere difficile mantenere i set di regole degli intervalli di indirizzi di Azure definiti manualmente. Fortunatamente, Azure definisce molti diversi tag di servizio che possono essere presi di mira dalle regole NSG.
I tag di servizio sono un concetto che utilizzerà sempre l’elenco di indirizzi più aggiornato. I tag di servizio sono un modo per assegnare segnaposto a gruppi di intervalli di indirizzi per una gestione più semplice.

Attenzione ai set di regole predefiniti
Quando si crea e si applica una NSG di Azure, è necessario prima conoscere le regole che tali NSG automaticamente applicano. Queste regole predefinite sono immutabili e sono create sia per il traffico in ingresso che per quello in uscita.
Ogni regola in un set di regole NSG di Azure ha una priorità. La priorità determina l’ordine di esecuzione o quali regole sovrascrivono altre. Ad esempio, se esiste una regola con una priorità di 65000 che blocca tutto il traffico in ingresso e si crea una regola con una priorità di 64999 che consente la porta 80, la NSG di Azure bloccherà tutto il traffico escludendo la porta 80.

I set di set di regole predefinite non possono essere modificate, ma è possibile sovrascriverle utilizzando una regola con priorità più alta come mostrato sopra. Ciascuna di queste regole si applica a tutti i protocolli come TCP, UDP e ICMP.
Assicurati che le tue regole utilizzino un numero inferiore a
65500
per sovrascrivere le regole predefinite!
Quando crei un NSG di Azure, vedrai varie regole predefinite:
Regole di ingresso
AllowVNetInBound
– Questa regola di ingresso contiene tutti gli intervalli di indirizzi IP definiti per la rete virtuale e tutti gli spazi di indirizzi on-premises collegati. Inoltre, questa regola contiene reti virtuali collegate, reti virtuali collegate a un gateway di rete virtuale, indirizzo IP virtuale dell’host e qualsiasi prefisso di indirizzo utilizzato nelle route definite dall’utente. Questa regola è impostata con priorità65000
.AllowAzureLoadBalancerInBound
– Il tag di servizioAzureLoadBalancer
si traduce nell’indirizzo IP virtuale dell’host,168.63.129.16
, da cui proviene la sonda di integrità di Azure. Il traffico effettivo non transita da qui e se non si utilizza Azure Load Balancing, questa regola può essere sovrascritta. L’indirizzo IP virtuale dell’host esiste in tutte le regioni specificamente per fornire servizi infrastrutturali essenziali come DHCP, DNS, IMDS e monitoraggio della salute. Questa regola è impostata con priorità65001
.DenyAllInbound
– Impostata come ultima regola, utilizzando priorità65500
, questa regola nega tutto il traffico di ingresso non esplicitamente consentito.
Regole di uscita
AllowVNetOutBound
– Questo contiene tutti gli intervalli di indirizzi IP definiti per la rete virtuale, tutti gli spazi di indirizzi locali connessi, le reti virtuali connessi tramite peering, le reti virtuali collegate a un gateway di rete virtuale, l’indirizzo IP virtuale dell’host e tutti i prefissi degli indirizzi utilizzati nelle route definite dall’utente. Questa regola è impostata con una priorità65000
.AllowInternetOutBound
– Spazio di indirizzi IP al di fuori della rete virtuale e raggiungibile tramite Internet pubblico. Include l’intervallo di indirizzi IP pubblici di Azure. Questa regola è impostata con una priorità65001
.DenyAllOutBound
– Come nelle regole di ingresso, questa regola è impostata come ultima regola, utilizzando la priorità65500
. Questa regola di uscita negherà tutto il traffico non esplicitamente consentito.
Creazione di NSG di Azure con PowerShell
Basta parlare, mettiti le mani in pasta e inizia a creare alcuni NSG di Azure con PowerShell! Presumendo che tu sia nella console di PowerShell e autenticato, continua a leggere.
Correlato: Connect-AzAccount: il tuo accesso ad Azure con PowerShell
Per creare un NSG di Azure con PowerShell, hai bisogno di un comando; New-AzNetworkSecurityGroup
. Per creare un NSG con questo comando, fornisci il nome, il nome del gruppo di risorse in cui creare l’NSG e la posizione.
L’esempio di codice seguente utilizza il cmdlet New-AzNetworkSecurityGroup
per creare un NSG chiamato NSG-MyVM
nel gruppo di risorse “Articles” che si trova nel datacenter di Azure eastus
.
Creazione di regole NSG di Azure con PowerShell
Una volta ottenuto l’NSG, probabilmente il set predefinito di regole non è sufficiente. Sarà necessario creare le proprie regole.
Configurazione di una regola in ingresso per il protocollo Desktop remoto
A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.
Per aggiungere una nuova regola in ingresso a un NSG esistente sono necessari tre passaggi:
- Eseguire il comando
Get-AzNetworkSecurityGroup
per recuperare l’NSG esistente. - Eseguire il comando
Add-AzNetworkSecurityRuleConfig
per creare la regola. - Eseguire il comando
Set-AzNetworkSecurityGroup
per applicare quella regola all’NSG.
L’esempio di codice seguente utilizza il cmdlet Get-AzNetworkSecurityGroup
per recuperare un NSG esistente. Successivamente viene definita una regola utilizzando Add-AzNetworkSecurityRuleConfig
, che viene quindi applicata all’NSG esistente utilizzando il cmdlet Set-AzNetworkSecurityGroup
.
Il parametro Priorità determina quando viene valutata la regola, il valore di
200
è vicino all’inizio poiché4096
è la regola con la priorità più bassa.
Negazione del traffico consigliato da SANS in uscita
Spesso il traffico in uscita non viene bloccato in quanto può essere difficile conoscere tutte le porte possibili che un’applicazione potrebbe utilizzare. Fortunatamente, è possibile trovare alcune raccomandazioni esperte sulla filtraggio in uscita dall’istituto SANS, un’organizzazione ampiamente affidabile per gli standard di sicurezza delle informazioni.
Per implementare le raccomandazioni di SANS, possiamo utilizzare gli stessi tre passaggi forniti in precedenza, ma questa volta creare una regola con più porte e con una Direzione
in uscita anziché in ingresso.
- MS RPC – Porta TCP e UDP 135
- NetBIOS/IP – Porte TCP e UDP 137-139
- SMB/IP – Porta TCP 445
- Trivial File Transfer Protocol (TFTP) – Porta UDP 69
- Syslog – Porta UDP 514
- Simple Network Management Protocol (SNMP) – Porte UDP 161-162
Il codice seguente recupera una regola NSG esistente utilizzando il cmdlet Get-AzNetworkSecurityGroup
. Una regola in uscita viene definita utilizzando Add-AzNetworkSecurityRuleConfig
e applicata tramite il cmdlet Set-AzNetworkSecurityGroup
.
Ovviamente, alcune di queste porte sono preziose e necessarie, a seconda dei servizi che stai fornendo. Molto probabilmente, dovrai personalizzare questa lista in base alle esigenze della tua applicazione, che sono tipicamente fornite dal fornitore o utilizzando uno strumento come netstat
per trovare le porte aperte.
Argomento correlato: Trovare le porte con Netstat e PowerShell
Configurare un NSG di Azure per una subnet specifica
Forse hai suddiviso lo spazio della tua rete virtuale tramite subnet. Per ottenere una maggiore granularità, puoi applicare gli NSG solo a una subnet specifica, controllando in modo granulare il traffico in quella subnet.
Il frammento di codice di seguito sta individuando un intero prefisso di indirizzi e applicando un NSG ad esso.
In seguito, scopri come utilizzare le interfacce di rete per suddividere ulteriormente e limitare gli NSG solo a ciò che potrebbe essere necessario, ad esempio un’interfaccia di rete.
Applicazione di un NSG di Azure a un’interfaccia di rete
Simile a come funzionano le subnet, è possibile applicare regole NSG direttamente a un’interfaccia di rete. Questo livello di granularità di solito non è necessario, ma quando si hanno più interfacce di rete per macchina virtuale, può avere senso applicare diversi set di regole alle singole NIC, se necessario.
Simile a come viene definita la limitazione delle subnet, è possibile applicare regole a una singola NIC. In questo caso, si utilizza il cmdlet Get-AzNetworkInterface
per recuperare una specifica NIC sulla VM specificata. Questa avrà l’NSG precedentemente creato impostato come proprietà NetworkSecurityGroup
.
Cosa succede se si desidera diagnosticare ed analizzare il traffico attraverso un NSG? Continua a leggere per scoprire di più sui log di flusso NSG e su come utilizzarli!
Risoluzione dei problemi con i log di flusso NSG
Durante la creazione e l’utilizzo di NSG, potresti trovarvi nella necessità di effettuare ulteriori debug per risolvere un problema con una regola o analizzare il traffico. I log di flusso sono una funzionalità di Azure Network Watcher che registra informazioni sul traffico IP che passa attraverso un NSG.
Una volta che Azure Network Watcher cattura il traffico di rete, archivia i dati in un account di archiviazione di Azure. Utilizzando PowerShell, è possibile configurare i log di flusso NSG di Azure per analizzare tale account di archiviazione di Azure e risolvere i problemi in modo migliore.
Articolo correlato: Come scaricare e installare lo strumento AzCopy
Abilitare i log di flusso NSG consiste in tre passaggi approssimativi in PowerShell:
- Registra il provider
Microsoft.Insights
. - Crea uno Operational Insights Workspace per memorizzare i dati.
- Abilita il log di flusso NSG con il comando
Set-AzNetworkWatcherConfigFlowLog
.
Per semplificare la configurazione dei log di flusso NSG di Azure, il seguente codice PowerShell semplificherà i diversi passaggi necessari. In particolare, questo codice crea uno spazio di lavoro Operational Insights e associa una configurazione di log di flusso all’abbonamento, al workspace e all’NSG corretti.
I log di flusso contengono molte proprietà diverse, come tipico nei log dei firewall. Questo include proprietà come l’IP di origine e di destinazione, le porte, i protocolli e i timestamp. I log delle versioni 1 e 2 hanno una grande differenza, ossia la versione 2 include il concetto di stato del flusso. Questo contrassegna la continuazione e la terminazione di un flusso insieme alle informazioni sulla larghezza di banda del traffico.
Passaggi successivi
Gli NSG di Azure sono strumenti potenti per limitare e verificare il traffico verso una risorsa. Utilizzati in modo efficace, è possibile proteggere correttamente le risorse e l’infrastruttura. Con le capacità di auditing tramite i log di flusso NSG e la possibilità di limitare gli NSG a subnet o adattatori di rete, si ha la flessibilità necessaria per definire regole come necessario e verificare che tutto il traffico sia conforme alle aspettative.