Zarządzanie przechwytywaniem pakietów dla maszyn wirtualnych za pomocą usługi Azure Network Watcher przy użyciu programu PowerShell

Narzędzie przechwytywania pakietów usługi Network Watcher umożliwia tworzenie sesji przechwytywania w celu rejestrowania ruchu sieciowego do i z maszyny wirtualnej platformy Azure. Filtry są udostępniane dla sesji przechwytywania, aby zapewnić przechwycenie tylko żądanego ruchu. Przechwytywanie pakietów pomaga w diagnozowaniu anomalii sieci zarówno reaktywnie, jak i aktywnie. Jej aplikacje wykraczają poza wykrywanie anomalii, aby obejmować zbieranie statystyk sieciowych, uzyskiwanie wglądu w włamania do sieci, debugowanie komunikacji klient-serwer i rozwiązywanie różnych innych problemów z siecią. Przechwytywanie pakietów usługi Network Watcher umożliwia zdalne inicjowanie przechwytywania pakietów, co pozwala zmniejszyć potrzebę ręcznego wykonywania na określonej maszynie wirtualnej.

Z tego artykułu dowiesz się, jak zdalnie konfigurować, uruchamiać, zatrzymywać, pobierać i usuwać przechwytywanie pakietów maszyn wirtualnych przy użyciu programu Azure PowerShell. Aby dowiedzieć się, jak zarządzać przechwytywaniem pakietów przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure, zobacz Zarządzanie przechwytywaniem pakietów dla maszyn wirtualnych przy użyciu witryny Azure Portal lub Zarządzanie przechwytywaniem pakietów dla maszyn wirtualnych przy użyciu interfejsu wiersza polecenia platformy Azure.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.

  • Azure Cloud Shell lub Azure PowerShell.

    Kroki opisane w tym artykule uruchamiają interaktywne polecenia cmdlet programu Azure PowerShell w usłudze Azure Cloud Shell. Aby uruchomić polecenia w usłudze Cloud Shell, wybierz pozycję Otwórz usługę Cloud Shell w prawym górnym rogu bloku kodu. Wybierz pozycję Kopiuj , aby skopiować kod, a następnie wklej go w usłudze Cloud Shell, aby go uruchomić. Możesz również uruchomić usługę Cloud Shell z poziomu witryny Azure Portal.

    Możesz również zainstalować program Azure PowerShell lokalnie, aby uruchomić polecenia cmdlet. Ten artykuł wymaga modułu Az programu PowerShell. Aby uzyskać więcej informacji, zobacz How to install Azure PowerShell (Jak zainstalować program Azure PowerShell). Aby dowiedzieć się, jaka wersja została zainstalowana, uruchom polecenie Get-InstalledModule -Name Az. Jeśli uruchomisz program PowerShell lokalnie, zaloguj się do platformy Azure przy użyciu polecenia cmdlet Połączenie-AzAccount.

  • Maszyna wirtualna z następującą wychodzącą łącznością TCP:

    • do konta magazynu za pośrednictwem portu 443
    • do 169.254.169.254 przez port 80
    • do 168.63.129.16 przez port 8037

Uwaga

  • Platforma Azure tworzy wystąpienie usługi Network Watcher w regionie maszyny wirtualnej, jeśli usługa Network Watcher nie została włączona dla tego regionu. Aby uzyskać więcej informacji, zobacz Włączanie lub wyłączanie usługi Azure Network Watcher.
  • Przechwytywanie pakietów usługi Network Watcher wymaga zainstalowania rozszerzenia maszyny wirtualnej agenta usługi Network Watcher na docelowej maszynie wirtualnej. Aby uzyskać więcej informacji, zobacz Instalowanie agenta usługi Network Watcher.
  • Dwa ostatnie adresy IP i porty wymienione w sekcji Wymagania wstępne są wspólne we wszystkich narzędziach usługi Network Watcher korzystających z agenta usługi Network Watcher i mogą czasami ulec zmianie.

Jeśli sieciowa grupa zabezpieczeń jest skojarzona z interfejsem sieciowym lub podsiecią, w którą znajduje się interfejs sieciowy, upewnij się, że istnieją reguły zezwalające na łączność wychodzącą przez poprzednie porty. Podobnie należy zapewnić łączność wychodzącą przez poprzednie porty podczas dodawania tras zdefiniowanych przez użytkownika do sieci.

Instalowanie agenta usługi Network Watcher

Aby można było używać funkcji przechwytywania pakietów, rozszerzenie maszyny wirtualnej agenta usługi Network Watcher musi być zainstalowane na maszynie wirtualnej.

Użyj polecenia cmdlet Get-AzVMExtension , aby sprawdzić, czy rozszerzenie jest zainstalowane na maszynie wirtualnej:

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

Jeśli rozszerzenie jest zainstalowane na maszynie wirtualnej, można go wyświetlić w danych wyjściowych poprzedniego polecenia:

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

Jeśli rozszerzenie nie jest zainstalowane, użyj polecenia cmdlet Set-AzVMExtension , aby go zainstalować:

# 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 

Po pomyślnej instalacji rozszerzenia zobaczysz następujące dane wyjściowe:

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

Uruchamianie przechwytywania pakietów

Aby rozpocząć sesję przechwytywania, użyj polecenia 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 

Po rozpoczęciu sesji przechwytywania zobaczysz następujące dane wyjściowe:

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

W poniższej tabeli opisano opcjonalne parametry, których można użyć z poleceniem New-AzNetworkWatcherPacketCapture cmdlet :

Parametr opis
-Filter Dodaj filtry, aby przechwycić tylko żądany ruch. Na przykład można przechwytywać tylko ruch TCP z określonego adresu IP do określonego portu.
-TimeLimitInSeconds Ustaw maksymalny czas trwania sesji przechwytywania. Wartość domyślna to 18000 sekund (5 godzin).
-BytesToCapturePerPacket Ustaw maksymalną liczbę bajtów do przechwycenia dla każdego pakietu. Wszystkie bajty są przechwytywane, jeśli nie są używane lub 0 wprowadzone.
-TotalBytesPerSession Ustaw łączną liczbę bajtów przechwyconych. Gdy wartość zostanie osiągnięta, przechwytywanie pakietów zostanie zatrzymane. Przechwytywane jest maksymalnie 1 GB (1073 741 824 bajtów), jeśli nie są używane.
-LocalFilePath Wprowadź prawidłową lokalną ścieżkę pliku, jeśli chcesz zapisać przechwytywanie na docelowej maszynie wirtualnej (na przykład C:\Capture\myVM_1.cap). Jeśli używasz maszyny z systemem Linux, ścieżka musi zaczynać się od /var/captures.

Zatrzymywanie przechwytywania pakietów

Użyj polecenia cmdlet Stop-AzNetworkWatcherPacketCapture , aby ręcznie zatrzymać uruchomioną sesję przechwytywania pakietów.

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

Uwaga

Polecenie cmdlet nie zwraca odpowiedzi, czy uruchomiono aktualnie uruchomioną sesję przechwytywania, czy sesję, która została już zatrzymana.

Pobieranie przechwytywania pakietów

Użyj polecenia cmdlet Get-AzNetworkWatcherPacketCapture , aby pobrać stan przechwytywania pakietów (uruchomione lub ukończone).

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

Poniższe dane wyjściowe są przykładem danych wyjściowych polecenia Get-AzNetworkWatcherPacketCapture cmdlet . Poniższy przykład jest po zakończeniu przechwytywania. Wartość PacketCaptureStatus to Stopped z wartością StopReason timeExceeded. Ta wartość pokazuje, że przechwytywanie pakietów zakończyło się pomyślnie i trwało jego czas.

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

Uwaga

Aby uzyskać więcej szczegółów w danych wyjściowych, dodaj | Format-List na końcu polecenia .

Pobieranie przechwytywania pakietów

Po zakończeniu sesji przechwytywania pakietów wynikowy plik przechwytywania jest zapisywany w usłudze Azure Storage, pliku lokalnego na docelowej maszynie wirtualnej lub obu tych maszynach. Miejsce docelowe magazynu przechwytywania pakietów jest określone podczas jego tworzenia. Aby uzyskać więcej informacji, zobacz Uruchamianie przechwytywania pakietów.

Jeśli określono konto magazynu, pliki przechwytywania są zapisywane na koncie magazynu w następującej ścieżce:

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

Aby pobrać plik przechwytywania pakietów zapisany w usłudze Azure Storage, użyj polecenia 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'

Uwaga

Plik przechwytywania można również pobrać z kontenera konta magazynu przy użyciu Eksplorator usługi Azure Storage. Eksplorator usługi Storage to autonomiczna aplikacja, której można wygodnie używać do uzyskiwania dostępu do danych usługi Azure Storage i pracy z danymi usługi Azure Storage. Aby uzyskać więcej informacji, zobacz Wprowadzenie do Eksplorator usługi Storage.

Usuwanie przechwytywania pakietów

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

Ważne

Usunięcie przechwytywania pakietów w usłudze Network Watcher nie powoduje usunięcia pliku przechwytywania z konta magazynu ani maszyny wirtualnej. Jeśli nie potrzebujesz już pliku przechwytywania, musisz ręcznie usunąć go z konta magazynu, aby uniknąć ponoszenia kosztów magazynowania.

  • Aby dowiedzieć się, jak zautomatyzować przechwytywanie pakietów przy użyciu alertów maszyny wirtualnej, zobacz Tworzenie przechwycenia pakietów wyzwalanych przez alert.
  • Aby dowiedzieć się, jak analizować plik przechwytywania pakietów usługi Network Watcher przy użyciu programu Wireshark, zobacz Inspekcja i analizowanie plików przechwytywania pakietów usługi Network Watcher.