Esercizio - Instradare il traffico attraverso l'appliance virtuale di rete

Completato

Ora che sono state create l'appliance virtuale di rete e le macchine virtuali, il traffico verrà instradato attraverso l'appliance virtuale di rete.

Visualization of virtual machines and IP addresses.

Creare le macchine virtuali pubblica e privata

I passaggi successivi consistono nel distribuire una macchina virtuale nelle subnet pubblica e privata.

  1. Aprire l'editor Cloud Shell e creare un file denominato cloud-init.txt.

    code cloud-init.txt
    
  2. Aggiungere al file le informazioni di configurazione seguenti. Con questa configurazione viene installato il pacchetto inetutils-traceroute quando si crea una nuova macchina virtuale. Il pacchetto contiene l'utilità traceroute, che verrà usata più avanti in questo esercizio.

    #cloud-config
    package_upgrade: true
    packages:
       - inetutils-traceroute
    
  3. Premere CTRL+S per salvare il file e quindi CTRL+Q per chiudere l'editor.

  4. In Cloud Shell eseguire il comando seguente per creare la macchina virtuale public. Sostituire <password> con una password appropriata per l'account azureuser.

    az vm create \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name public \
        --vnet-name vnet \
        --subnet publicsubnet \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --no-wait \
        --custom-data cloud-init.txt \
        --admin-password <password>
    
  5. Eseguire il comando seguente per creare la macchina virtuale private. Sostituire <password> con una password appropriata.

    az vm create \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name private \
        --vnet-name vnet \
        --subnet privatesubnet \
        --image Ubuntu2204 \
        --admin-username azureuser \
        --no-wait \
        --custom-data cloud-init.txt \
        --admin-password <password>
    
  6. Eseguire il comando watch di Linux seguente per controllare se le macchine virtuali sono in esecuzione. Il comando watch esegue periodicamente il comando az vm list in modo da poter monitorare lo stato di avanzamento delle macchine virtuali.

    watch -d -n 5 "az vm list \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --show-details \
        --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \
        --output table"
    

    Il valore Succeeded (Completato) per ProvisioningState e il valore VM running (Macchina virtuale in esecuzione) per PowerState indicano che la distribuzione è stata eseguita correttamente. Quando tutte le macchine virtuali sono in esecuzione, è possibile passare alla fase successiva. Premere CTRL+C per arrestare il comando e continuare con l'esercizio.

  7. Eseguire il comando seguente per salvare l'indirizzo IP pubblico della macchina virtuale public in una variabile denominata PUBLICIP.

    PUBLICIP="$(az vm list-ip-addresses \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name public \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $PUBLICIP
    
  8. Eseguire il comando seguente per salvare l'indirizzo IP pubblico della macchina virtuale private in una variabile denominata PRIVATEIP.

    PRIVATEIP="$(az vm list-ip-addresses \
        --resource-group "<rgn>[sandbox resource group name]</rgn>" \
        --name private \
        --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
        --output tsv)"
    
    echo $PRIVATEIP
    

Testare il routing del traffico attraverso l'appliance virtuale di rete

I passaggi finali consistono nell'usare l'utilità traceroute Linux per vedere come viene instradato il traffico. Si userà il comando ssh per eseguire traceroute in ogni macchina virtuale. Il primo test mostrerà la route seguita dai pacchetti ICMP inviati dalla macchina virtuale public alla macchina virtuale private. Il secondo test mostrerà la route seguita dai pacchetti ICMP inviati dalla macchina virtuale private alla macchina virtuale public.

  1. Eseguire il comando seguente per tracciare la route da public a private. Quando richiesto, immettere la password per l'account azureuser specificato in precedenza.

    ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
    

    Se viene visualizzato il messaggio di errore bash: traceroute: command not found, attendere un minuto ed eseguire di nuovo il comando. L'installazione automatica di traceroute può richiedere uno o due minuti dopo la distribuzione della macchina virtuale. Al termine, l'output dovrebbe essere simile all'esempio seguente:

    traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max
    1   10.0.2.4  0.710ms  0.410ms  0.536ms
    2   10.0.1.4  0.966ms  0.981ms  1.268ms
    Connection to 52.165.151.216 closed.
    

    Si noti che il primo hop è 10.0.2.4. Questo indirizzo è l'indirizzo IP privato di nva. Il secondo hop è 10.0.1.4, ovvero l'indirizzo di private. Nel primo esercizio questa route è stata aggiunta alla tabella di route e la tabella è stata collegata alla subnet publicsubnet. Tutto il traffico da public a private, quindi, viene ora instradato attraverso l'appliance virtuale di rete.

    Diagram of route from public to private.

  2. Eseguire il comando seguente per tracciare la route da private a public. Quando richiesto, immettere la password per l'account azureuser.

    ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
    

    Si noterà che il traffico passa direttamente a public (10.0.0.4) senza attraversare l'appliance virtuale di rete, come illustrato nell'output di comando seguente.

    traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max
    1   10.0.0.4  1.095ms  1.610ms  0.812ms
    Connection to 52.173.21.188 closed.
    

    La macchina virtuale private usa le route predefinite e il traffico viene instradato direttamente tra le subnet.

    Diagram of route from private to public.

A questo punto, è stato configurato il routing tra subnet per indirizzare il traffico dalla rete Internet pubblica attraverso la subnet dmzsubnet prima che raggiunga la subnet privata. Nella subnet dmzsubnet è stata aggiunta una macchina virtuale che funge da appliance virtuale di rete. È possibile configurare questa appliance virtuale di rete per rilevare le richieste potenzialmente dannose e bloccarle prima che raggiungano le destinazioni previste.