Condividi tramite


Diagnosticare problemi di filtro del traffico di rete di una macchina virtuale

Questo articolo illustra come diagnosticare i problemi di filtro del traffico di rete per una macchina virtuale. Il processo prevede la visualizzazione delle regole di sicurezza effettive applicate dal gruppo di sicurezza di rete (NSG).

I gruppi di sicurezza di rete consentono di controllare i tipi di traffico che scorrono dentro e fuori le VM. È possibile associare un gruppo di sicurezza di rete a una subnet in una rete virtuale di Azure, a un'interfaccia di rete associata a una VM o a entrambe. Le regole di sicurezza applicate a un'interfaccia di rete sono una combinazione tra le regole di sicurezza presenti nel gruppo di sicurezza associato all'interfaccia di rete e quelle della subnet in cui l'interfaccia di rete si trova. Le regole in gruppi di sicurezza di rete diversi possono talvolta entrare in conflitto tra loro e influire sulla connettività di rete di una macchina virtuale. È possibile visualizzare tutte le regole di sicurezza effettive degli NSG applicate nelle interfacce di rete della VM. Se non si ha familiarità con le rete virtuali, le interfacce di rete o i concetti di NSG, vedere Panoramica di Rete virtuale, Interfaccia di rete e Panoramica dei gruppi di sicurezza di rete.

Scenario

Si sta cercando di eseguire la connessione a una VM dalla porta 80 da Internet, ma la connessione non riesce. Per determinare perché non è possibile connettersi dalla porta 80 da Internet, è possibile visualizzare le regole di sicurezza valide per un'interfaccia di rete usando il portale di Azure, PowerShell o l'interfaccia della riga di comando di Azure.

I passaggi che seguono presuppongono la disponibilità di una VM per visualizzare le relative regole di sicurezza. In mancanza di una VM esistente, distribuire prima una VM Linux o Windows con cui completare le attività descritte in questo articolo. Gli esempi di questo articolo sono per una VM denominata myVM con un'interfaccia di rete denominata myVMVMNic. L'interfaccia di rete e la VM si trovano in un gruppo di risorse denominato myResourceGroup nell'area Stati Uniti orientali. Modificare i valori nei passaggi, in base alle esigenze, per la macchina virtuale per cui si sta diagnosticando il problema.

Diagnosi tramite il portale di Azure

  1. Accedere al portale di Azure con un account di Azure che abbia le autorizzazioni necessarie.

  2. Nella parte superiore del portale di Azure immettere nella casella di ricerca il nome della VM. Quando il nome della VM viene visualizzato nei risultati della ricerca, selezionarlo.

  3. Espandi Connessioni di rete nel riquadro sinistro. Selezionare Impostazioni di rete. Le figure seguenti illustrano le impostazioni del gruppo di sicurezza di rete per l'interfaccia di rete della macchina virtuale.

    Screenshot delle regole di sicurezza per nsg-subnet del gruppo di sicurezza di rete.

    Screenshot delle regole di sicurezza per nsg-nic del gruppo di sicurezza di rete.

    Le regole elencate nelle figure precedenti sono relative a un'interfaccia di rete denominata vm-1445. Si noterà che sono presenti regole di porta in ingresso per l'interfaccia di rete da due gruppi di sicurezza di rete diversi:

    • nsg-subnet: associato alla subnet in cui si trova l'interfaccia di rete.
    • nsg-nic: associato all'interfaccia di rete nella macchina virtuale denominata vm-1445.

    È la regola denominata DenyAllInBound a impedire la comunicazione con la VM tramite la porta 80, da Internet, come descritto nello scenario. Nella regola è elencato il valore 0.0.0.0/0 per ORIGINE, che include anche Internet. Nessun altra regola con priorità più alta (numero più basso) consente le comunicazioni in ingresso dalla porta 80. Per consentire le comunicazioni verso la VM dalla porta 80 da Internet, vedere Risolvere il problema. Per altre informazioni sulle regole di sicurezza e su come vengono applicate in Azure, vedere Gruppi di sicurezza di rete.

    Nella parte inferiore dell'immagine vengono visualizzate anche le regole delle porte in uscita. Sono elencate le regole delle porte in uscita per l'interfaccia di rete.

    Anche se l'immagine mostra solo quattro regole in ingresso per ogni gruppo di sicurezza di rete, i tuoi gruppi di sicurezza di rete potrebbero avere molte più di quattro regole. Nell'immagine viene visualizzato VirtualNetwork in Origine e Destinazione e AzureLoadBalancer in SOURCE. VirtualNetwork e AzureLoadBalancer sono tag di servizio. I tag di servizio rappresentano un gruppo di prefissi di indirizzi IP che consentono di ridurre al minimo la complessità della creazione delle regole di sicurezza.

  4. Per visualizzare le regole di sicurezza valide, selezionare l'interfaccia nelle impostazioni di rete della macchina virtuale. Verificare che la macchina virtuale sia in esecuzione prima di procedere.

  5. Nelle impostazioni per l'interfaccia di rete espandere Guida e quindi selezionare Regole di sicurezza valide.

    L'esempio seguente mostra l'interfaccia di rete di esempio vm-1445 con le regole di sicurezza valide selezionate.

    Screenshot delle regole di sicurezza valide per l'interfaccia di rete vm-1445.

    Le regole elencate sono le stesse illustrate nel passaggio 3, anche se sono presenti diverse schede per il gruppo di sicurezza di rete associato all'interfaccia di rete e alla subnet. Come si può vedere nell'immagine, vengono visualizzate solo le prime 50 regole. Per scaricare un file con estensione csv che contiene tutte le regole, selezionare Download.

  6. I passaggi precedenti hanno mostrato le regole di sicurezza per un'interfaccia di rete denominata vm-1445. Cosa accade se una macchina virtuale ha due interfacce di rete? La VM di questo esempio ha due interfacce di rete collegate. Le regole di sicurezza valide possono essere diverse per ogni interfaccia di rete.

    Per visualizzare le regole per l'interfaccia di rete vm-nic-2 , selezionarla. Come illustrato nell'esempio seguente, l'interfaccia di rete ha le stesse regole associate alla subnet dell'interfaccia di rete vm-1445 , perché entrambe le interfacce di rete si trovano nella stessa subnet. Quando si associa un gruppo di sicurezza di rete a una subnet, le regole del gruppo vengono applicate a tutte le interfacce di rete presenti nella subnet.

    Screenshot delle regole di sicurezza per la scheda di interfaccia di rete vm-nic-2.

    A differenza dell'interfaccia di rete vm-1445 , l'interfaccia di rete vm-nic-2 non ha un gruppo di sicurezza di rete associato. Ogni interfaccia di rete e subnet può avere zero, o uno, NSG associato. Il gruppo di sicurezza di rete associato a ogni interfaccia di rete o subnet può essere lo stesso o un altro. Lo stesso gruppo di sicurezza di rete può essere associato a un numero qualsiasi di interfacce di rete e subnet.

Anche se le regole di sicurezza valide sono state visualizzate tramite la macchina virtuale, è possibile visualizzarle anche tramite:

Diagnosi tramite PowerShell

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

È possibile eseguire i comandi seguenti in Azure Cloud Shell oppure in PowerShell dal computer. Azure Cloud Shell è una shell interattiva gratuita. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account. Se si esegue PowerShell dal computer, è necessario il modulo Azure PowerShell versione 1.0.0 o successiva. Per trovare la versione installata, eseguire Get-Module -ListAvailable Az nel computer. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell. Se si esegue PowerShell in locale, è anche necessario eseguire Connect-AzAccount per accedere ad Azure con un account con le autorizzazioni necessarie.

Ottenere le regole di sicurezza valide per un'interfaccia di rete con Get-AzEffectiveNetworkSecurityGroup. L'esempio seguente ottiene le regole di sicurezza valide per un'interfaccia di rete denominata vm-nic che si trova in un gruppo di risorse denominato test-rg:

$Params = @{
  NetworkInterfaceName = "vm-nic"
  ResourceGroupName    = "test-rg"
}
Get-AzEffectiveNetworkSecurityGroup @Params

L'output viene restituito in formato json. Per informazioni sull'output, vedere Interpretare l'output del comando. L'output viene restituito solo se un NSG è associato all'interfaccia di rete, alla subnet in cui si trova l'interfaccia di rete o a entrambe. La VM deve essere in esecuzione. Una macchina virtuale potrebbe avere più interfacce di rete con gruppi di sicurezza di rete diversi applicati. Per risolvere il problema, eseguire il comando per ogni interfaccia di rete.

Se si verifica ancora un problema di connettività, vedere altre diagnosi e considerazioni.

Se si conosce solo il nome della macchina virtuale, usare i comandi seguenti per elencare tutti gli ID dell'interfaccia di rete collegati alla macchina virtuale.

$Params = @{
  Name              = "vm-1"
  ResourceGroupName = "test-rg"
}
$VM = Get-AzVM @Params
$VM.NetworkProfile

L'output che si riceve è simile all'esempio seguente:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-nic

Nell'output precedente il nome dell'interfaccia di rete è vm-nic.

Diagnosi tramite l'interfaccia della riga di comando di Azure

Se si usano i comandi dell'interfaccia della riga di comando di Azure per completare le attività in questo articolo, eseguire i comandi in Azure Cloud Shell o tramite l'interfaccia della riga di comando di Azure dal computer in uso. Questo articolo richiede l'interfaccia della riga di comando di Azure 2.0.32 o versioni successive. Eseguire az --version per trovare la versione installata. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. Se si esegue l'interfaccia della riga di comando di Azure in locale, è anche necessario eseguire az login e accedere ad Azure con un account con le autorizzazioni necessarie.

Ottenere le regole di sicurezza valide per un'interfaccia di rete con az network nic list-effective-nsg. L'esempio seguente ottiene le regole di sicurezza valide per un'interfaccia di rete denominata vm-nic che si trova in un gruppo di risorse denominato test-rg:

az network nic list-effective-nsg \
  --name vm-nic \
  --resource-group test-rg

L'output viene restituito in formato json. Per informazioni sull'output, vedere Interpretare l'output del comando. L'output viene restituito solo se un NSG è associato all'interfaccia di rete, alla subnet in cui si trova l'interfaccia di rete o a entrambe. La VM deve essere in esecuzione. Una macchina virtuale potrebbe avere più interfacce di rete con gruppi di sicurezza di rete diversi applicati. Per risolvere il problema, eseguire il comando per ogni interfaccia di rete.

Se si verifica ancora un problema di connettività, vedere altre diagnosi e considerazioni.

Se si conosce solo il nome della macchina virtuale, usare i comandi seguenti per elencare tutti gli ID dell'interfaccia di rete collegati alla macchina virtuale.

az vm show \
  --name vm-1 \
  --resource-group test-rg

Nell'output restituito verranno visualizzate informazioni analoghe all'esempio seguente:

"networkProfile": {
    "additionalProperties": {},
    "networkInterfaces": [
      {
        "additionalProperties": {},
        "id": "/subscriptions/<ID>/resourceGroups/test-rg/providers/Microsoft.Network/networkInterfaces/vm-nic",
        "primary": true,
        "resourceGroup": "test-rg"
      },

Nell'output precedente il nome dell'interfaccia di rete è vm-nic

Interpretare l'output del comando

Indipendentemente dall'uso di PowerShell o dell'interfaccia della riga di comando di Azure per diagnosticare il problema, l'output restituito contiene le informazioni seguenti:

  • NetworkSecurityGroup: l'ID del gruppo di sicurezza di rete.
  • Associazione: indica se il gruppo di sicurezza di rete è collegato a un networkInterface o a una subnet. Se lo stato dell'associazione del gruppo di sicurezza di rete cambia immediatamente prima di eseguire il comando, attendere alcuni secondi affinché l'output rifletta l'aggiornamento.
  • EffectiveSecurityRules: una spiegazione di ogni proprietà dettagliata in Creare una regola di sicurezza. I nomi delle regole preceduti da defaultSecurityRules/ indicano regole di sicurezza predefinite che esistono in ogni NSG. I nomi delle regole preceduti da securityRules/ sono regole create dall'utente. Le regole che specificano un tag del servizio, come ad esempio Internet, VirtualNetwork e AzureLoadBalancer per le proprietà destinationAddressPrefix oppure sourceAddressPrefix, hanno anche valori per la proprietà expandedDestinationAddressPrefix. La proprietà expandedDestinationAddressPrefix include tutti i prefissi di indirizzo rappresentati dal tag di servizio.

Le regole duplicate vengono visualizzate nell'output quando un gruppo di sicurezza di rete è collegato sia all'interfaccia di rete che alla subnet. Le regole predefinite e le regole personalizzate condivise tra i gruppi di sicurezza di rete causano questi duplicati.

È la regola denominata defaultSecurityRules/DenyAllInBound a impedire la comunicazione in ingresso con la VM tramite la porta 80, da Internet, come descritto nello scenario. Nessun altra regola con priorità più alta (numero più basso) consente le comunicazioni in ingresso dalla porta 80 da Internet.

Risolvere un problema

È possibile diagnosticare il problema descritto nello scenario usando il portale di Azure, PowerShell o l'interfaccia della riga di comando di Azure. La soluzione consiste nel creare una regola di sicurezza di rete con le proprietà seguenti:

Proprietà Valore
Origine Qualsiasi
Intervalli di porte di origine Qualsiasi
Destinazione L'indirizzo IP della VM, un intervallo di indirizzi IP o tutti gli indirizzi nella subnet.
Intervalli di porte di destinazione 80
Protocollo TCP
Azione Allow
Priorità 100
Nome Allow-HTTP-All

Dopo la creazione della regola, la porta 80 è consentita in ingresso da Internet perché la priorità è superiore alla regola DenyAllInBound predefinita. Se i gruppi di sicurezza di rete sono associati sia all'interfaccia di rete che alla subnet, creare la stessa regola in entrambi i gruppi di sicurezza di rete. Informazioni su come creare una regola di sicurezza.

Quando Azure elabora il traffico in ingresso, elabora le regole nel gruppo di sicurezza di rete associato alla subnet (se è presente un gruppo di sicurezza di rete associato) e quindi elabora le regole nel gruppo di sicurezza di rete associato all'interfaccia di rete. Se è presente un NSG associato all'interfaccia di rete e alla subnet, la porta deve essere aperta in entrambi gli NSG per consentire al traffico di raggiungere la macchina virtuale. Per semplificare la soluzione dei problemi di gestione e comunicazione, è consigliabile associare un NSG a una subnet, anziché a interfacce di rete singole. Se le macchine virtuali all'interno di una subnet necessitano di regole di sicurezza diverse, è possibile rendere le interfacce di rete membri di un gruppo di sicurezza dell'applicazione e specificare un gruppo di sicurezza dell'applicazione come origine e destinazione di una regola di sicurezza. Per altre informazioni, vedere Gruppi di sicurezza delle applicazioni.

Se si verificano ancora problemi di comunicazione, vedere Considerazioni e altre diagnosi.

Considerazioni

Durante la risoluzione dei problemi di connettività, tenere presente quanto segue:

  • Le regole di sicurezza predefinite bloccano l'accesso in ingresso da Internet e consentono solo il traffico in ingresso dalla rete virtuale. Per consentire il traffico in ingresso da Internet, aggiungere regole di sicurezza con una priorità più alta rispetto alle regole predefinite. Per altre informazioni, vedere Regole di sicurezza predefinite, o Creare una regola di sicurezza.

  • Per le reti virtuali con peering, per impostazione predefinita, il tag del servizio VIRTUAL_NETWORK si espande automaticamente per includere prefissi per le reti virtuali con peering. Per risolvere problemi correlati alle reti virtuali con peering, è possibile visualizzare i prefissi nell'elenco ExpandedAddressPrefix. Per altre informazioni, vedere Peering di rete virtuale e Tag di servizio.

  • Azure mostra solo regole di sicurezza valide per un'interfaccia di rete quando un gruppo di sicurezza di rete è associato all'interfaccia di rete o alla subnet della macchina virtuale. Inoltre, la macchina virtuale deve trovarsi nello stato in esecuzione.

  • Se l'interfaccia di rete o la subnet non dispone di un gruppo di sicurezza di rete associato, tutte le porte rimangono aperte per l'accesso in ingresso e in uscita quando una macchina virtuale ha un indirizzo IP pubblico. Questa configurazione consente l'accesso senza restrizioni da e verso qualsiasi posizione. Per proteggere la macchina virtuale, applicare un NSG alla subnet che ospita l'interfaccia di rete se dispone di un indirizzo IP pubblico.

Altre diagnosi

  • Per eseguire un rapido test per determinare se il traffico in ingresso o in uscita da una macchina virtuale è consentito, usare la funzionalità Verifica flusso IP di Azure Network Watcher. Il controllo del flusso IP indica se il traffico è consentito o bloccato. Se viene bloccato, la verifica del flusso IP indica quale regola di sicurezza sta bloccando il traffico.
  • Se non sono presenti regole di sicurezza che causano un errore di connettività di rete di una macchina virtuale, il problema potrebbe essere dovuto a:
    • Software del firewall in esecuzione all'interno del sistema operativo della VM
    • Route configurate per appliance virtuali o traffico locale. Il traffico Internet può essere reindirizzato alla rete locale tramite il tunneling forzato. Se si esegue il tunneling forzato del traffico Internet in un'appliance virtuale o in locale, potrebbe non essere possibile connettersi alla VM da Internet. Per informazioni su come diagnosticare i problemi di route che potrebbero impedire il flusso del traffico dalla macchina virtuale, vedere Diagnosticare un problema di routing del traffico di rete della macchina virtuale.

Passaggi successivi