Diagnosticar um problema de filtro de tráfego de rede na máquina virtual

Neste artigo, vai aprender a diagnosticar um problema de filtro de tráfego de rede ao ver as regras de segurança do grupo de segurança de rede (NSG) que são eficazes para uma máquina virtual (VM).

Os NSGs permitem-lhe controlar os tipos de tráfego que fluem dentro e fora de uma VM. Pode associar um NSG a uma sub-rede numa rede virtual do Azure, a uma interface de rede anexada a uma VM ou a ambas. As regras de segurança efetivas aplicadas a uma interface de rede são uma agregação das regras existentes no NSG associado a uma interface de rede e a sub-rede em que se encontra a interface de rede. Por vezes, as regras em NSGs diferentes podem entrar em conflito entre si e afetar a conectividade de rede de uma VM. Pode ver todas as regras de segurança efetivas dos NSGs aplicados nas interfaces de rede da VM. Se não estiver familiarizado com os conceitos de rede virtual, interface de rede ou NSG, veja Descrição geral da rede virtual, Interface de rede e Descrição geral dos grupos de segurança de rede.

Scenario

Tenta ligar-se a uma VM através da porta 80 a partir da Internet, mas a ligação falha. Para determinar por que motivo não consegue aceder à porta 80 a partir da Internet, pode ver as regras de segurança efetivas de uma interface de rede com o portal do Azure, o PowerShell ou a CLI do Azure.

Os passos seguintes partem do princípio de que tem uma VM existente para ver as regras de segurança efetivas. Se não tiver uma VM existente, implemente primeiro uma VM do Linux ou do Windows para concluir as tarefas neste artigo. Os exemplos neste artigo destinam-se a uma VM chamada myVM com uma interface de rede chamada myVMVMNic. A VM e a interface de rede estão num grupo de recursos com o nome myResourceGroup e estão na região E.U.A. Leste . Altere os valores nos passos, conforme adequado, para a VM para a qual está a diagnosticar o problema.

Diagnosticar com portal do Azure

  1. Inicie sessão no portal do Azure com uma conta do Azure que tenha as permissões necessárias.

  2. Na parte superior do portal do Azure, introduza o nome da VM na caixa de pesquisa. Quando o nome da VM aparecer nos resultados da pesquisa, selecione-o.

  3. Em DEFINIÇÕES, selecione Rede, conforme mostrado na imagem seguinte:

    Captura de ecrã a mostrar o portal do Azure com definições de Rede para o meu Nic V M V M.

    As regras que vê listadas na imagem anterior destinam-se a uma interface de rede chamada myVMVMNic. Verá que existem REGRAS DE PORTA DE ENTRADA para a interface de rede de dois grupos de segurança de rede diferentes:

    • mySubnetNSG: associado à sub-rede em que se encontra a interface de rede.
    • myVMNSG: associado à interface de rede na VM com o nome myVMVMNic.

    A regra denominada DenyAllInBound é o que está a impedir a comunicação de entrada para a VM através da porta 80, a partir da Internet, conforme descrito no cenário. A regra lista 0.0.0.0/0 para SOURCE, que inclui a Internet. Nenhuma outra regra com uma prioridade mais alta (número inferior) permite a entrada da porta 80. Para permitir a entrada da porta 80 para a VM a partir da Internet, consulte Resolver um problema. Para saber mais sobre as regras de segurança e como o Azure as aplica, veja Grupos de segurança de rede.

    Na parte inferior da imagem, também verá REGRAS DE PORTA DE SAÍDA. Em que estão as regras de porta de saída para a interface de rede. Embora a imagem mostre apenas quatro regras de entrada para cada NSG, os NSGs podem ter muitas mais do que quatro regras. Na imagem, verá VirtualNetwork em SOURCE e DESTINATION e AzureLoadBalancer em SOURCE. VirtualNetwork e AzureLoadBalancer são etiquetas de serviço. As etiquetas de serviço representam um grupo de prefixos de endereços IP para ajudar a minimizar a complexidade da criação de regras de segurança.

  4. Certifique-se de que a VM está no estado de execução e, em seguida, selecione Regras de segurança efetivas, conforme mostrado na imagem anterior, para ver as regras de segurança efetivas, apresentadas na imagem seguinte:

    Captura de ecrã a mostrar o painel Regras de segurança efetivas com a opção Transferir selecionada e PermitirAzureLoadBalancerInbound Regra de entrada selecionada.

    As regras listadas são as mesmas que viu no passo 3, embora existam separadores diferentes para o NSG associado à interface de rede e à sub-rede. Como pode ver na imagem, só são apresentadas as primeiras 50 regras. Para transferir um ficheiro .csv que contém todas as regras, selecione Transferir.

    Para ver os prefixos que cada etiqueta de serviço representa, selecione uma regra, como a regra denominada AllowAzureLoadBalancerInbound. A imagem seguinte mostra os prefixos da etiqueta de serviço AzureLoadBalancer :

    Captura de ecrã a mostrar os prefixos de endereço para AllowAzureLoadBalancerInbound introduzidos.

    Embora a etiqueta de serviço AzureLoadBalancer represente apenas um prefixo, outras etiquetas de serviço representam vários prefixos.

  5. Os passos anteriores mostraram as regras de segurança de uma interface de rede com o nome myVMVMNic, mas também viu uma interface de rede com o nome myVMVMNic2 em algumas das imagens anteriores. A VM neste exemplo tem duas interfaces de rede ligadas à mesma. As regras de segurança efetivas podem ser diferentes para cada interface de rede.

    Para ver as regras da interface de rede myVMVMNic2 , selecione-a. Conforme mostrado na imagem que se segue, a interface de rede tem as mesmas regras associadas à respetiva sub-rede que a interface de rede myVMVMNic , porque ambas as interfaces de rede estão na mesma sub-rede. Quando associa um NSG a uma sub-rede, as respetivas regras são aplicadas a todas as interfaces de rede na sub-rede.

    Captura de ecrã a mostrar o portal do Azure com definições de Rede para o meu V M V M Nic 2.

    Ao contrário da interface de rede myVMVMNic , a interface de rede myVMVMNic2 não tem um grupo de segurança de rede associado à mesma. Cada interface de rede e sub-rede podem ter zero, ou um, NSG associado à mesma. O NSG associado a cada interface de rede ou sub-rede pode ser igual ou diferente. Pode associar o mesmo grupo de segurança de rede ao número de interfaces de rede e sub-redes que escolher.

Embora as regras de segurança efetivas tenham sido vistas através da VM, também pode ver regras de segurança eficazes através de um indivíduo:

Diagnosticar com o PowerShell

Nota

Recomendamos que utilize o módulo do Azure Az PowerShell para interagir com o Azure. Veja Instalar o Azure PowerShell para começar. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Pode executar os comandos que se seguem na Cloud Shell do Azure ou ao executar o PowerShell a partir do computador. O Azure Cloud Shell é uma shell interativa gratuita. Tem as ferramentas comuns do Azure pré-instaladas e configuradas para utilização com a sua conta. Se executar o PowerShell a partir do computador, precisa do módulo Azure PowerShell, versão 1.0.0 ou posterior. Execute Get-Module -ListAvailable Az no computador para localizar a versão instalada. Se precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell). Se estiver a executar o PowerShell localmente, também terá de executar para iniciar Connect-AzAccount sessão no Azure com uma conta que tenha as permissões necessárias].

Obtenha as regras de segurança efetivas para uma interface de rede com Get-AzEffectiveNetworkSecurityGroup. O exemplo seguinte obtém as regras de segurança efetivas para uma interface de rede com o nome myVMVMNic, que está num grupo de recursos denominado myResourceGroup:

Get-AzEffectiveNetworkSecurityGroup `
  -NetworkInterfaceName myVMVMNic `
  -ResourceGroupName myResourceGroup

A saída é devolvida no formato json. Para compreender o resultado, veja interpretar a saída do comando. A saída só é devolvida se um NSG estiver associado à interface de rede, à sub-rede em que a interface de rede se encontra ou a ambos. A VM tem de estar no estado de execução. Uma VM pode ter várias interfaces de rede com NSGs diferentes aplicadas. Ao resolver problemas, execute o comando para cada interface de rede.

Se ainda estiver a ter um problema de conectividade, veja diagnóstico e consideraçõesadicionais.

Se não souber o nome de uma interface de rede, mas souber o nome da VM à qual a interface de rede está anexada, os seguintes comandos devolvem os IDs de todas as interfaces de rede anexadas a uma VM:

$VM = Get-AzVM -Name myVM -ResourceGroupName myResourceGroup
$VM.NetworkProfile

Recebe um resultado semelhante ao seguinte exemplo:

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

Na saída anterior, o nome da interface de rede é myVMVMNic.

Diagnosticar com a CLI do Azure

Se utilizar comandos da CLI do Azure para concluir tarefas neste artigo, execute os comandos no Cloud Shell do Azure ou executando a CLI do Azure a partir do computador. Este artigo requer a versão 2.0.32 ou posterior da CLI do Azure. Execute az --version para localizar a versão instalada. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI). Se estiver a executar a CLI do Azure localmente, também terá de executar az login e iniciar sessão no Azure com uma conta que tenha as permissões necessárias.

Obtenha as regras de segurança efetivas para uma interface de rede com az network nic list-effective-nsg. O exemplo seguinte obtém as regras de segurança efetivas para uma interface de rede com o nome myVMVMNic que está num grupo de recursos denominado myResourceGroup:

az network nic list-effective-nsg \
  --name myVMVMNic \
  --resource-group myResourceGroup

A saída é devolvida no formato json. Para compreender o resultado, veja interpretar a saída do comando. A saída só é devolvida se um NSG estiver associado à interface de rede, à sub-rede em que a interface de rede se encontra ou a ambos. A VM tem de estar no estado de execução. Uma VM pode ter várias interfaces de rede com NSGs diferentes aplicadas. Ao resolver problemas, execute o comando para cada interface de rede.

Se ainda estiver a ter um problema de conectividade, veja diagnóstico e consideraçõesadicionais.

Se não souber o nome de uma interface de rede, mas souber o nome da VM à qual a interface de rede está anexada, os seguintes comandos devolvem os IDs de todas as interfaces de rede anexadas a uma VM:

az vm show \
  --name myVM \
  --resource-group myResourceGroup

No resultado devolvido, verá informações semelhantes ao seguinte exemplo:

"networkProfile": {
    "additionalProperties": {},
    "networkInterfaces": [
      {
        "additionalProperties": {},
        "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      },

No resultado anterior, o nome da interface de rede é a interface myVMVMNic.

Interpretar saída do comando

Independentemente de ter utilizado o PowerShell ou a CLI do Azure para diagnosticar o problema, receberá uma saída que contém as seguintes informações:

  • NetworkSecurityGroup: o ID do grupo de segurança de rede.
  • Associação: se o grupo de segurança de rede está associado a uma RedeInterface ou Sub-rede. Se um NSG estiver associado a ambos, a saída será devolvida com NetworkSecurityGroup, Association e EffectiveSecurityRules, para cada NSG. Se o NSG estiver associado ou desassociado imediatamente antes de executar o comando para ver as regras de segurança efetivas, poderá ter de aguardar alguns segundos para que a alteração reflita na saída do comando.
  • EffectiveSecurityRules: uma explicação de cada propriedade é detalhada em Criar uma regra de segurança. Os nomes de regras prefaciados com defaultSecurityRules/ são regras de segurança predefinidas que existem em cada NSG. Os nomes de regras prefaciados com securityRules/ são regras que criou. As regras que especificam uma etiqueta de serviço, como Internet, VirtualNetwork e AzureLoadBalancer para as propriedades destinationAddressPrefix ou sourceAddressPrefix , também têm valores para a propriedade expandedDestinationAddressPrefix . A propriedade expandedDestinationAddressPrefix lista todos os prefixos de endereço representados pela etiqueta de serviço.

Se vir regras duplicadas listadas na saída, é porque um NSG está associado à interface de rede e à sub-rede. Ambos os NSGs têm as mesmas regras predefinidas e podem ter regras duplicadas adicionais, se tiver criado as suas próprias regras que são as mesmas em ambos os NSGs.

A regra denominada defaultSecurityRules/DenyAllInBound é o que está a impedir a comunicação de entrada para a VM através da porta 80, a partir da Internet, conforme descrito no cenário. Nenhuma outra regra com uma prioridade mais alta (número inferior) permite a entrada da porta 80 a partir da Internet.

Resolver um problema

Quer utilize o portal do Azure, o PowerShell ou a CLI do Azure para diagnosticar o problema apresentado no cenário neste artigo, a solução é criar uma regra de segurança de rede com as seguintes propriedades:

Propriedade Valor
Origem Qualquer
Intervalo de portas de origem Qualquer
Destino O endereço IP da VM, um intervalo de endereços IP ou todos os endereços na sub-rede.
Intervalos de portas de destino 80
Protocolo TCP
Ação Permitir
Prioridade 100
Nome Permitir-HTTP-All

Depois de criar a regra, é permitida a entrada da porta 80 a partir da Internet, uma vez que a prioridade da regra é superior à regra de segurança predefinida denominada DenyAllInBound, que nega o tráfego. Saiba como criar uma regra de segurança. Se estiverem associados diferentes NSGs à interface de rede e à sub-rede, tem de criar a mesma regra em ambos os NSGs.

Quando o Azure processa o tráfego de entrada, processa regras no NSG associado à sub-rede (se existir um NSG associado) e, em seguida, processa as regras no NSG associado à interface de rede. Se existir um NSG associado à interface de rede e à sub-rede, a porta tem de estar aberta em ambos os NSGs para que o tráfego chegue à VM. Para facilitar problemas de administração e comunicação, recomendamos que associe um NSG a uma sub-rede, em vez de interfaces de rede individuais. Se as VMs numa sub-rede precisarem de regras de segurança diferentes, pode tornar as interfaces de rede membros de um grupo de segurança de aplicações (ASG) e especificar um ASG como a origem e o destino de uma regra de segurança. Saiba mais sobre os grupos de segurança de aplicações.

Se ainda estiver a ter problemas de comunicação, veja Considerações e Diagnóstico adicional.

Considerações

Considere os seguintes pontos ao resolver problemas de conectividade:

  • As regras de segurança predefinidas bloqueiam o acesso de entrada a partir da Internet e permitem apenas o tráfego de entrada da rede virtual. Para permitir o tráfego de entrada a partir da Internet, adicione regras de segurança com uma prioridade superior às regras predefinidas. Saiba mais sobre as regras de segurança predefinidas ou como adicionar uma regra de segurança.
  • Se tiver redes virtuais em modo de peering, por predefinição, a etiqueta de serviço VIRTUAL_NETWORK expande-se automaticamente para incluir prefixos para redes virtuais em modo de peering. Para resolver problemas relacionados com o peering de rede virtual, pode ver os prefixos na lista ExpandedAddressPrefix . Saiba mais sobre o peering de rede virtual e as etiquetas de serviço.
  • As regras de segurança efetivas só são apresentadas para uma interface de rede se existir um NSG associado à interface de rede da VM e, ou, à sub-rede, e se a VM estiver no estado de execução.
  • Se não existirem NSGs associados à interface de rede ou sub-rede e tiver um endereço IP público atribuído a uma VM, todas as portas estão abertas para acesso de entrada e acesso de saída para qualquer lugar. Se a VM tiver um endereço IP público, recomendamos que aplique um NSG à sub-rede da interface de rede.

Diagnóstico adicional

  • Para executar um teste rápido para determinar se o tráfego é permitido de ou para uma VM, utilize a capacidade de verificação do fluxo de IP do Azure Observador de Rede. A verificação do fluxo de IP indica se o tráfego é permitido ou negado. Se for negado, a verificação do fluxo de IP indica-lhe que regra de segurança está a negar o tráfego.
  • Se não existirem regras de segurança que causem a falha da conectividade de rede de uma VM, o problema pode dever-se a:
    • Software de firewall em execução no sistema operativo da VM
    • Rotas configuradas para aplicações virtuais ou tráfego no local. O tráfego da Internet pode ser redirecionado para a sua rede no local através de túnel forçado. Se forçar o tráfego de internet de túnel para uma aplicação virtual ou no local, poderá não conseguir ligar-se à VM a partir da Internet. Para saber como diagnosticar problemas de rota que possam impedir o fluxo de tráfego para fora da VM, veja Diagnosticar um problema de encaminhamento de tráfego de rede de máquinas virtuais.

Passos seguintes