Partilhar via


Gerenciar capturas de pacotes para máquinas virtuais com o Azure Network Watcher usando o PowerShell

A ferramenta de captura de pacotes do Inspetor de Rede permite criar sessões de captura para registrar o tráfego de rede de e para uma máquina virtual (VM) do Azure. Os filtros são fornecidos para a sessão de captura para garantir que você capture apenas o tráfego desejado. A captura de pacotes ajuda no diagnóstico de anomalias de rede de forma reativa e proativa. Suas aplicações vão além da deteção de anomalias para incluir a coleta de estatísticas de rede, a aquisição de informações sobre invasões de rede, depuração da comunicação cliente-servidor e abordagem de vários outros desafios de rede. A captura de pacotes do Inspetor de Rede permite iniciar capturas de pacotes remotamente, aliviando a necessidade de execução manual em uma máquina virtual específica.

Neste artigo, você aprenderá a configurar, iniciar, parar, baixar e excluir remotamente uma captura de pacote de máquina virtual usando o Azure PowerShell. Para saber como gerenciar capturas de pacotes usando o portal do Azure ou a CLI do Azure, consulte Gerenciar capturas de pacotes para máquinas virtuais usando o portal do Azure ou Gerenciar capturas de pacotes para máquinas virtuais usando a CLI do Azure.

Pré-requisitos

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

  • Azure Cloud Shell ou Azure PowerShell.

    As etapas neste artigo executam os cmdlets do Azure PowerShell 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 o Azure PowerShell localmente para executar os cmdlets. Este artigo requer o módulo Az PowerShell. Para obter mais informações, consulte Como instalar o Azure PowerShell. Para localizar a versão instalada, execute Get-InstalledModule -Name Az. Se você executar o PowerShell localmente, entre no Azure usando o cmdlet Connect-AzAccount .

  • Uma máquina virtual com a seguinte conectividade TCP de saída:

    • para a conta de armazenamento pela porta 443
    • para 169.254.169.254 sobre a porta 80
    • para 168.63.129.16 sobre a porta 8037

Nota

  • O Azure cria uma instância do Inspetor de Rede na região da máquina virtual se o Inspetor de Rede não estiver habilitado para essa região. Para obter mais informações, consulte Habilitar ou desabilitar o Azure Network Watcher.
  • A captura de pacotes do Inspetor de Rede requer que a extensão da VM do agente do Inspetor de Rede seja instalada na máquina virtual de destino. Para obter mais informações, consulte Instalar o agente do Inspetor de Rede.
  • Os dois últimos endereços IP e portas listados nos Pré-requisitos são comuns em todas as ferramentas do Inspetor de Rede que usam o agente do Inspetor de Rede e podem ser alterados ocasionalmente.

Se um grupo de segurança de rede estiver associado à interface de rede ou sub-rede em que a interface de rede se encontra, verifique se existem regras para permitir a conectividade de saída nas portas anteriores. Da mesma forma, garanta a conectividade de saída sobre as portas anteriores ao adicionar rotas definidas pelo usuário à sua rede.

Instalar o agente do Network Watcher

Para usar a captura de pacotes, a extensão de máquina virtual do agente do Inspetor de Rede deve ser instalada na máquina virtual.

Use o cmdlet Get-AzVMExtension para verificar se a extensão está instalada na máquina virtual:

# List the installed extensions on the virtual machine.
Get-AzVMExtension -VMName 'myVM' -ResourceGroupName 'myResourceGroup' | format-table Name, Publisher, ExtensionType, EnableAutomaticUpgrade 

Se a extensão estiver instalada na máquina virtual, você poderá vê-la listada na saída do comando anterior:

Name                         Publisher                      ExtensionType            EnableAutomaticUpgrade
----                         ---------                      -------------            ----------------------
AzureNetworkWatcherExtension Microsoft.Azure.NetworkWatcher NetworkWatcherAgentLinux                   True

Se a extensão não estiver instalada, use o cmdlet Set-AzVMExtension para instalá-la:

# Install Network Watcher agent on a Linux virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentLinux' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 
# Install Network Watcher agent on a Windows virtual machine.
Set-AzVMExtension -Publisher 'Microsoft.Azure.NetworkWatcher' -ExtensionType 'NetworkWatcherAgentWindows' -Name 'AzureNetworkWatcherExtension' -VMName 'myVM' -ResourceGroupName 'myResourceGroup' -TypeHandlerVersion '1.4' -EnableAutomaticUpgrade 1 

Após uma instalação bem-sucedida da extensão, você verá a seguinte saída:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK 

Iniciar uma captura de pacotes

Para iniciar uma sessão de captura, use o cmdlet New-AzNetworkWatcherPacketCapture :

# Place the virtual machine configuration into a variable.
$vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'

# Place the storage account configuration into a variable.
$storageAccount = Get-AzStorageAccount -ResourceGroupName 'myResourceGroup' -Name 'mystorageaccount'

# Start the Network Watcher capture session.
New-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1' -TargetVirtualMachineId $vm.Id  -StorageAccountId $storageAccount.Id 

Depois que a sessão de captura for iniciada, você verá a seguinte saída:

ProvisioningState Name   BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ----------------------- -------------------- ------------------
Succeeded         myVM_1 0                       1073741824           18000

A tabela a seguir descreve os parâmetros opcionais que você pode usar com o New-AzNetworkWatcherPacketCapture cmdlet:

Parâmetro descrição
-Filter Adicione filtro(s) para capturar apenas o tráfego desejado. Por exemplo, você pode capturar apenas o tráfego TCP de um endereço IP específico para uma porta específica.
-TimeLimitInSeconds Defina a duração máxima da sessão de captura. O valor padrão é 18000 segundos (5 horas).
-BytesToCapturePerPacket Defina o número máximo de bytes a serem capturados por cada pacote. Todos os bytes são capturados se não forem usados ou 0 inserido.
-TotalBytesPerSession Defina o número total de bytes capturados. Quando o valor é atingido, a captura de pacotes é interrompida. Até 1 GB (1.073.741.824 bytes) é capturado se não for usado.
-LocalFilePath Insira um caminho de arquivo local válido se desejar que a captura seja salva na máquina virtual de destino (por exemplo, C:\Capture\myVM_1.cap). Se você estiver usando uma máquina Linux, o caminho deve começar com /var/captures.

Parar uma captura de pacotes

Use o cmdlet Stop-AzNetworkWatcherPacketCapture para interromper manualmente uma sessão de captura de pacotes em execução.

# Manually stop a packet capture session.
Stop-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Nota

O cmdlet não retorna uma resposta executada em uma sessão de captura em execução no momento ou em uma sessão que já foi interrompida.

Obter uma captura de pacotes

Use o cmdlet Get-AzNetworkWatcherPacketCapture para recuperar o status de uma captura de pacote (em execução ou concluída).

# Get information, properties, and status of a packet capture.
Get-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

A saída a seguir é um exemplo da saída do Get-AzNetworkWatcherPacketCapture cmdlet. O exemplo a seguir é após a conclusão da captura. O valor PacketCaptureStatus é Stopped, com um StopReason de TimeExceeded. Esse valor mostra que a captura de pacotes foi bem-sucedida e executou seu tempo.

ProvisioningState Name   Target                                                                                                                              BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ------                                                                                                                              ----------------------- -------------------- ------------------
Succeeded         myVM_1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0                       1073741824           18000

Nota

Para obter mais detalhes na saída, adicione | Format-List ao final do comando.

Baixar uma captura de pacote

Depois de concluir sua sessão de captura de pacotes, o arquivo de captura resultante é salvo no armazenamento do Azure, em um arquivo local na máquina virtual de destino ou em ambos. O destino de armazenamento para a captura de pacotes é especificado durante sua criação. Para obter mais informações, consulte Iniciar uma captura de pacote.

Se uma conta de armazenamento for especificada, os arquivos de captura serão salvos na conta de armazenamento no seguinte caminho:

https://{storageAccountName}.blob.core.windows.net/network-watcher-logs/subscriptions/{subscriptionId}/resourcegroups/{storageAccountResourceGroup}/providers/microsoft.compute/virtualmachines/{virtualMachineName}/{year}/{month}/{day}/packetcapture_{UTCcreationTime}.cap

Para baixar um arquivo de captura de pacote salvo no armazenamento do Azure, use o cmdlet Get-AzStorageBlobContent :

# Download the packet capture file from Azure storage container.
Get-AzStorageBlobContent -Container 'network-watcher-logs' -Blob 'subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/myresourcegroup/providers/microsoft.compute/virtualmachines/myvm/2024/01/25/packetcapture_22_44_54_342.cap' -Destination 'C:\Capture\myVM_1.cap'

Nota

Você também pode baixar o arquivo de captura do contêiner da conta de armazenamento usando o Gerenciador de Armazenamento do Azure. O Gerenciador de Armazenamento é um aplicativo autônomo que você pode usar convenientemente para acessar e trabalhar com dados do Armazenamento do Azure. Para obter mais informações, consulte Introdução ao Storage Explorer.

Excluir uma captura de pacote

# Remove a packet capture resource.
Remove-AzNetworkWatcherPacketCapture -Location 'eastus' -PacketCaptureName 'myVM_1'

Importante

A exclusão de uma captura de pacote no Inspetor de Rede não exclui o arquivo de captura da conta de armazenamento ou da máquina virtual. Se você não precisar mais do arquivo de captura, deverá excluí-lo manualmente da conta de armazenamento para evitar incorrer em custos de armazenamento.

  • Para saber como automatizar capturas de pacotes com alertas de máquina virtual, consulte Criar uma captura de pacote acionada por alerta.
  • Para saber como analisar um arquivo de captura de pacotes do Network Watcher usando o Wireshark, consulte Inspecionar e analisar arquivos de captura de pacotes do Network Watcher.