Guia de início rápido: diagnosticar um problema de filtro de tráfego de rede de máquina virtual usando a CLI do Azure

Neste início rápido, você implanta uma máquina virtual e usa a verificação de fluxo IP do Inspetor de Rede para testar a conectividade de e para diferentes endereços IP. Usando os resultados da verificação do fluxo de IP, você determina a regra de segurança que está bloqueando o tráfego e causando a falha de comunicação e aprende como resolvê-la. Você também aprende a usar as regras de segurança eficazes para uma interface de rede para determinar por que uma regra de segurança está permitindo ou negando tráfego.

O diagrama mostra os recursos criados no início rápido do Inspetor de Rede.

Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa.

  • Azure Cloud Shell ou CLI do Azure.

    As etapas neste artigo executam os comandos da CLI do Azure interativamente no Azure Cloud Shell. Para executar os comandos no Cloud Shell, selecione Open Cloud Shell no canto superior direito de um bloco de código. Selecione Copiar para copiar o código e cole-o no Cloud Shell para executá-lo. Você também pode executar o Cloud Shell de dentro do portal do Azure.

    Você também pode instalar a CLI do Azure localmente para executar os comandos. Este início rápido requer a versão 2.0 ou posterior da CLI do Azure. Se você executar a CLI do Azure localmente, entre no Azure usando o comando az login .

Criar uma máquina virtual

Nesta seção, você cria uma rede virtual e uma sub-rede na região Leste dos EUA. Em seguida, crie uma máquina virtual na sub-rede com um grupo de segurança de rede padrão.

  1. Crie um grupo de recursos com az group create. Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos.

    # Create a resource group.
    az group create --name 'myResourceGroup' --location 'eastus'
    
  2. Crie uma rede virtual usando az network vnet create.

    # Create a virtual network and a subnet.
    az network vnet create --resource-group 'myResourceGroup' --name 'myVNet' --subnet-name 'mySubnet' --subnet-prefixes 10.0.0.0/24 
    
  3. Crie um grupo de segurança de rede padrão usando az network nsg create.

    # Create a default network security group.
    az network nsg create --name 'myVM-nsg' --resource-group 'myResourceGroup' --location 'eastus'
    
  4. Crie uma máquina virtual usando az vm create. Quando solicitado, digite um nome de usuário e senha.

    # Create a Linux virtual machine using the latest Ubuntu 20.04 LTS image.
    az vm create --resource-group 'myResourceGroup' --name 'myVM' --location 'eastus' --vnet-name 'myVNet' --subnet 'mySubnet' --public-ip-address '' --nsg 'myVM-nsg' --image 'Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest'
    

Testar a comunicação de rede usando a verificação de fluxo IP

Nesta seção, você usa o recurso de verificação de fluxo IP do Inspetor de Rede para testar a comunicação de rede de e para a máquina virtual.

  1. Use o comando az network watcher test-ip-flow para testar a comunicação de saída de myVM para 13.107.21.200 usando a verificação de fluxo IP (13.107.21.200 é um dos endereços IP públicos usados por www.bing.com):

    # Start the IP flow verify session to test outbound flow to www.bing.com.
    az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.0.4:60000' --remote '13.107.21.200:80' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    Após alguns segundos, você obtém uma saída semelhante ao exemplo a seguir:

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

    O resultado do teste indica que o acesso é permitido para 13.107.21.200 devido à regra de segurança padrão AllowInternetOutBound. Por padrão, as máquinas virtuais do Azure podem acessar a Internet.

  2. Altere RemoteIPAddress para 10.0.1.10 e repita o teste. 10.0.1.10 é um endereço IP privado no espaço de endereços myVNet .

    # Start the IP flow verify session to test outbound flow to 10.0.1.10.
    az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.0.4:60000' --remote '10.0.1.10:80' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    Após alguns segundos, você obtém uma saída semelhante ao exemplo a seguir:

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

    O resultado do segundo teste indica que o acesso é permitido para 10.0.1.10 devido à regra de segurança padrão AllowVnetOutBound. Por padrão, uma máquina virtual do Azure pode acessar todos os endereços IP no espaço de endereço de sua rede virtual.

  3. Altere RemoteIPAddress para 10.10.10.10 e repita o teste. 10.10.10.10 é um endereço IP privado que não está no espaço de endereço myVNet .

    # Start the IP flow verify session to test outbound flow to 10.10.10.10.
    az network watcher test-ip-flow --direction 'outbound' --protocol 'TCP' --local '10.0.0.4:60000' --remote '10.10.10.10:80' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    Após alguns segundos, você obtém uma saída semelhante ao exemplo a seguir:

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

    O resultado do terceiro teste indica que o acesso é negado a 10.10.10.10 devido à regra de segurança padrão DenyAllOutBound.

  4. Altere a direção para entrada, a porta local para 80 e a porta remota para 60000 e, em seguida, repita o teste.

    # Start the IP flow verify session to test inbound flow from 10.10.10.10.
    az network watcher test-ip-flow --direction 'inbound' --protocol 'TCP' --local '10.0.0.4:80' --remote '10.10.10.10:6000' --vm 'myVM' --nic 'myVmVMNic' --resource-group 'myResourceGroup' --out 'table'
    

    Após alguns segundos, você obtém uma saída semelhante ao exemplo a seguir:

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

    O resultado do quarto teste indica que o acesso é negado a partir de 10.10.10.10 devido à regra de segurança padrão DenyAllInBound. Por padrão, todo o acesso a uma máquina virtual do Azure de fora da rede virtual é negado.

Ver detalhes de uma regra de segurança

Para determinar por que as regras na seção anterior permitem ou negam comunicação, revise as regras de segurança efetivas para a interface de rede da máquina virtual myVM usando o comando az network nic list-effective-nsg :

# Get the effective security rules for the network interface of myVM.
az network nic list-effective-nsg --resource-group 'myResourceGroup' --name 'myVmVMNic'

A saída retornada inclui as seguintes informações para a regra AllowInternetOutbound que permitiu o acesso de saída a www.bing.com:

{
  "access": "Allow",
  "destinationAddressPrefix": "Internet",
  "destinationAddressPrefixes": [
	"Internet"
  ],
  "destinationPortRange": "0-65535",
  "destinationPortRanges": [
	"0-65535"
  ],
  "direction": "Outbound",
  "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"
  ],
  "name": "defaultSecurityRules/AllowInternetOutBound",
  "priority": 65001,
  "protocol": "All",
  "sourceAddressPrefix": "0.0.0.0/0",
  "sourceAddressPrefixes": [
	"0.0.0.0/0",
	"0.0.0.0/0"
  ],
  "sourcePortRange": "0-65535",
  "sourcePortRanges": [
	"0-65535"
  ]
},

Você pode ver na saída que o prefixo de endereço 13.104.0.0/13 está entre os prefixos de endereço da regra AllowInternetOutBound . Esse prefixo engloba o endereço IP 13.107.21.200, que você utilizou para testar a comunicação de saída com o www.bing.com.

Da mesma forma, você pode verificar as outras regras para ver os prefixos de endereço IP de origem e destino sob cada regra.

Clean up resources (Limpar recursos)

Quando não for mais necessário, use az group delete para excluir o grupo de recursos myResourceGroup e todos os recursos que ele contém:

# Delete the resource group and all resources it contains.
az group delete --name 'myResourceGroup' --yes

Próximo passo