Guida introduttiva: Diagnosticare un problema di filtro del traffico di rete di una macchina virtuale con Azure PowerShell

In questa guida introduttiva si distribuisce una macchina virtuale e si usa la verifica del flusso IP di Network Watcher per testare la connettività da e verso indirizzi IP diversi. Usando i risultati della verifica del flusso IP, si determina la regola di sicurezza che blocca il traffico e causa l'errore di comunicazione e si apprenderà come risolverlo. Si apprenderà anche come usare le regole di sicurezza valide per un'interfaccia di rete per determinare il motivo per cui una regola di sicurezza consente o nega il traffico.

Il diagramma mostra le risorse create nella guida introduttiva di Network Watcher.

Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva.

  • Azure Cloud Shell o Azure PowerShell.

    I passaggi descritti in questo articolo eseguono i cmdlet di Azure PowerShell in modo interattivo in Azure Cloud Shell. Per eseguire i comandi in Cloud Shell, selezionare Apri Cloud Shell nell'angolo superiore destro di un blocco di codice. Selezionare Copia per copiare il codice e incollarlo in Cloud Shell per eseguirlo. È anche possibile eseguire Cloud Shell dal portale di Azure.

    È anche possibile installare Azure PowerShell in locale per eseguire i cmdlet. Questa guida introduttiva richiede il modulo Az PowerShell. Per altre informazioni, vedere Come installare Azure PowerShell. Per trovare la versione installata, eseguire Get-InstalledModule -Name Az. Se si esegue PowerShell in locale, accedere ad Azure usando il cmdlet Connessione-AzAccount.

Creare una macchina virtuale

In questa sezione viene creata una rete virtuale e una subnet nell'area Stati Uniti orientali. Creare quindi una macchina virtuale nella subnet con un gruppo di sicurezza di rete predefinito.

  1. Creare un gruppo di risorse usando New-AzResourceGroup. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.

    # Create a resource group.
    New-AzResourceGroup -Name 'myResourceGroup' -Location 'eastus' 
    
  2. Creare una configurazione della subnet per la subnet della macchina virtuale e la subnet host Bastion usando New-AzVirtualNetworkSubnetConfig.

    # Create subnets configuration.
    $Subnet = New-AzVirtualNetworkSubnetConfig -Name 'mySubnet' -AddressPrefix '10.0.0.0/24'
    
  3. Creare una rete virtuale usando New-AzVirtualNetwork.

    # Create a virtual network.
    New-AzVirtualNetwork -Name 'myVNet' -ResourceGroupName 'myResourceGroup' -Location 'eastus' -AddressPrefix '10.0.0.0/16' -Subnet $Subnet
    
  4. Creare un gruppo di sicurezza di rete predefinito usando New-AzNetworkSecurityGroup.

    # Create a network security group. 
    New-AzNetworkSecurityGroup -Name 'myVM-nsg' -ResourceGroupName 'myResourceGroup' -Location  'eastus'
    
  5. Creare una macchina virtuale usando New-AzVM. Quando richiesto, immettere nome utente e password.

    # Create a Linux virtual machine using the latest Ubuntu 20.04 LTS image.
    New-AzVm -ResourceGroupName 'myResourceGroup' -Name 'myVM' -Location 'eastus' -VirtualNetworkName 'myVNet' -SubnetName 'mySubnet' -SecurityGroupName 'myVM-nsg' -Image 'Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest'
    

Testare la comunicazione di rete usando la verifica del flusso IP

In questa sezione si usa la funzionalità di verifica del flusso IP di Network Watcher per testare la comunicazione di rete da e verso la macchina virtuale.

  1. Usare Test-AzNetworkWatcherIPFlow per testare le comunicazioni in uscita da myVM a 13.107.21.200 usando la verifica del flusso IP (13.107.21.200 è uno degli indirizzi IP pubblici usati da www.bing.com):

    # Place myVM configuration into a variable.
    $vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'
    
    # Start the IP flow verify session to test outbound flow to www.bing.com.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Outbound' -Protocol 'TCP' -RemoteIPAddress '13.107.21.200' -RemotePort '80' -LocalIPAddress '10.0.0.4' -LocalPort '60000'
    

    Dopo alcuni secondi, si ottiene un output simile all'esempio seguente:

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/AllowInternetOutBound
    

    Il risultato del test indica che l'accesso è consentito a 13.107.21.200 a causa della regola di sicurezza predefinita AllowInternetOutBound. Per impostazione predefinita, le macchine virtuali di Azure possono accedere a Internet.

  2. Modificare RemoteIPAddress su 10.0.1.10 e ripetere il test. 10.0.1.10 è un indirizzo IP privato nello spazio indirizzi myVNet .

    # Start the IP flow verify session to test outbound flow to 10.0.1.10.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Outbound' -Protocol 'TCP' -RemoteIPAddress '10.0.1.10' -RemotePort '80' -LocalIPAddress '10.0.0.4' -LocalPort '60000'
    

    Dopo alcuni secondi, si ottiene un output simile all'esempio seguente:

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/AllowVnetOutBound
    

    Il risultato del secondo test indica che l'accesso è consentito a 10.0.1.10 a causa della regola di sicurezza predefinita AllowVnetOutBound. Per impostazione predefinita, una macchina virtuale di Azure può accedere a tutti gli indirizzi IP nello spazio indirizzi della rete virtuale.

  3. Modificare RemoteIPAddress su 10.10.10.10 e ripetere il test. 10.10.10.10 è un indirizzo IP privato che non si trova nello spazio indirizzi myVNet .

    # Start the IP flow verify session to test outbound flow to 10.10.10.10.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Outbound' -Protocol 'TCP' -RemoteIPAddress '10.10.10.10' -RemotePort '80' -LocalIPAddress '10.0.0.4' -LocalPort '60000'
    

    Dopo alcuni secondi, si ottiene un output simile all'esempio seguente:

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/DenyAllOutBound
    

    Il risultato del terzo test indica che l'accesso viene negato a 10.10.10.10 a causa della regola di sicurezza predefinita DenyAllOutBound.

  4. Impostare Direzionein ingresso, LocalPort su 80 e RemotePort su 60000 e quindi ripetere il test.

    # Start the IP flow verify session to test inbound flow from 10.10.10.10.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Inbound' -Protocol 'TCP' -RemoteIPAddress '10.10.10.10' -RemotePort '60000' -LocalIPAddress '10.0.0.4' -LocalPort '80'
    

    Dopo alcuni secondi, si ottiene un output simile all'esempio seguente:

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/DenyAllInBound
    

    Il risultato del quarto test indica che l'accesso viene negato dalla versione 10.10.10.10 a causa della regola di sicurezza predefinita DenyAllInBound. Per impostazione predefinita, viene negato tutto l'accesso a una macchina virtuale di Azure dall'esterno della rete virtuale.

Visualizzare i dettagli di una regola di sicurezza

Per determinare il motivo per cui le regole nella sezione precedente consentono o negano la comunicazione, esaminare le regole di sicurezza valide per l'interfaccia di rete della macchina virtuale myVM usando il cmdlet Get-AzEffectiveNetworkSecurityGroup :

# Get the effective security rules for the network interface of myVM.
Get-AzEffectiveNetworkSecurityGroup -NetworkInterfaceName 'myVM' -ResourceGroupName 'myResourceGroup'

L'output restituito include le informazioni seguenti per la regola AllowInternetOutbound che ha consentito l'accesso in uscita a www.bing.com:

{
 "Name": "defaultSecurityRules/AllowInternetOutBound",
 "Protocol": "All",
 "SourcePortRange": [
   "0-65535"
 ],
 "DestinationPortRange": [
   "0-65535"
 ],
 "SourceAddressPrefix": [
   "0.0.0.0/0",
   "0.0.0.0/0"
 ],
 "DestinationAddressPrefix": [
   "Internet"
 ],
 "ExpandedSourceAddressPrefix": [],
 "ExpandedDestinationAddressPrefix": [
   "1.0.0.0/8",
   "2.0.0.0/7",
   "4.0.0.0/9",
   "4.144.0.0/12",
   "4.160.0.0/11",
   "4.192.0.0/10",
   "5.0.0.0/8",
   "6.0.0.0/7",
   "8.0.0.0/7",
   "11.0.0.0/8",
   "12.0.0.0/8",
   "13.0.0.0/10",
   "13.64.0.0/11",
   "13.104.0.0/13",
   "13.112.0.0/12",
   "13.128.0.0/9",
   "14.0.0.0/7",
   ...
   ...
   ...
   "200.0.0.0/5",
   "208.0.0.0/4"
 ],
 "Access": "Allow",
 "Priority": 65001,
 "Direction": "Outbound"
},

Nell'output il prefisso dell'indirizzo 13.104.0.0.0/13 è tra i prefissi di indirizzo della regola AllowInternetOutBound . Questo prefisso include l'indirizzo IP 13.107.21.200, usato per testare la comunicazione in uscita verso www.bing.com.

Analogamente, è possibile controllare le altre regole per visualizzare i prefissi degli indirizzi IP di origine e di destinazione in ogni regola.

Pulire le risorse

Quando non è più necessario, usare Remove-AzResourceGroup per eliminare il gruppo di risorse e tutte le risorse che contiene:

# Delete the resource group and all resources it contains.
Remove-AzResourceGroup -Name 'myResourceGroup' -Force

Passaggi successivi

In questa guida introduttiva si è appreso come creare una macchina virtuale e diagnosticare problemi dei filtri del traffico di rete in ingresso e in uscita. Si è appreso che le regole del gruppo di sicurezza di rete consentono o negano il traffico da e verso una macchina virtuale. Altre informazioni sulle regole di sicurezza e su come creare le regole di sicurezza.

Anche con i filtri del traffico di rete appropriati sul posto, la comunicazione con una macchina virtuale può comunque non riuscire a causa della configurazione del routing. Per informazioni su come diagnosticare i problemi di routing delle macchine virtuali, vedere Diagnosticare un problema di routing di rete della macchina virtuale. Per diagnosticare i problemi di routing, latenza e filtro del traffico in uscita con uno strumento, vedere Risolvere i problemi relativi alle connessioni con Azure Network Watcher.