Partager via


Gérer les captures de paquets pour les machines virtuelles avec Azure Network Watcher à l’aide de PowerShell

L’outil de capture de paquets Network Watcher vous permet de créer des sessions de capture pour enregistrer le trafic réseau vers et à partir d’une machine virtuelle Azure. Les filtres sont fournis pour la session de capture afin de vous garantir que vous capturez uniquement le trafic souhaité. La capture de paquets permet de diagnostiquer les anomalies du réseau de manières proactive et réactive. Ses applications vont au-delà de la détection d’anomalie pour inclure la collecte de statistiques réseau, l’acquisition d’insights sur les intrusions réseau, le débogage de la communication client-serveur, et la résolution de divers autres défis réseau. La capture de paquets Network Watcher vous permet de lancer des captures de paquets à distance, réduisant ainsi la nécessité d’une exécution manuelle sur une machine virtuelle spécifique.

Dans cet article, vous allez découvrir comment configurer, démarrer, arrêter, télécharger et supprimer à distance une capture de paquets de machine virtuelle à l’aide d’Azure PowerShell. Pour savoir comment gérer la capture de paquets à l’aide du Portail Azure ou de l’interface de ligne de commande Azure, consultez Gérer la capture de paquets pour machines virtuelles à l’aide du Portail Azure ou Gérer la capture de paquets pour machines virtuelles à l’aide de l’interface de ligne de commande Azure.

Prérequis

  • Compte Azure avec un abonnement actif. Créez un compte gratuitement.

  • Azure Cloud Shell ou Azure PowerShell.

    Les étapes de cet article exécutent les applets de commande Azure PowerShell de manière interactive dans Azure Cloud Shell. Pour exécuter les commandes dans le Cloud Shell, sélectionnez Ouvrir Cloud Shell dans le coin supérieur droit d’un bloc de code. Sélectionnez Copier pour copier le code, puis collez-le dans Cloud Shell pour l’exécuter. Vous pouvez également exécuter le Cloud Shell à partir du Portail Azure.

    Vous pouvez également installer Azure PowerShell localement pour exécuter les applets de commande. Cet article nécessite le module Az PowerShell. Pour plus d’informations, consultez Comment installer Azure PowerShell. Pour trouver la version installée, exécutez Get-InstalledModule -Name Az. Si vous exécutez PowerShell localement, connectez-vous à Azure avec la cmdlet Connect-AzAccount.

  • Une machine virtuelle avec la connectivité TCP sortante suivante :

    • vers le compte de stockage sur le port 443
    • vers 169.254.169.254 sur le port 80
    • vers 168.63.129.16 sur le port 8037

Remarque

  • Azure crée une instance Network Watcher dans la région de la machine virtuelle si Network Watcher n’a pas été activé pour cette région. Pour plus d’informations, consultez Activer ou désactiver Azure Network Watcher.
  • La capture de paquets Network Watcher nécessite l’installation de l’extension de machine virtuelle de l’agent Network Watcher sur la machine virtuelle cible. Pour plus d’informations, consultez Installer l’agent Network Watcher.
  • Les deux dernières adresses IP et ports répertoriés dans les Prérequis sont communs à tous les outils Network Watcher qui utilisent l’agent Network Watcher, et peuvent parfois changer.

Si un groupe de sécurité réseau est associé à l’interface réseau ou à un sous-réseau dans lequel figure l’interface réseau, assurez-vous qu’il existe des règles autorisant la connectivité de sortie sur les ports précédents. De même, assurez une connectivité sortante sur les ports précédents lors de l’ajout d’itinéraires définis par l’utilisateur à votre réseau.

Installer l’agent Network Watcher

Pour utiliser la capture de paquets, l’extension de machine virtuelle de l’agent Network Watcher doit être installée sur la machine virtuelle.

Utilisez le cmdlet Get-AzVMExtension pour vérifier si l’extension est installée sur la machine virtuelle :

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

Si l’extension est installée sur la machine virtuelle, vous pouvez la voir répertoriée dans la sortie de la commande précédente :

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

Si l’extension n’est pas installée, utilisez le cmdlet Set-AzVMExtension pour l’installer :

# 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 

Après une installation réussie de l’extension, la sortie suivante s’affiche :

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

Démarrer une capture de paquets

Pour démarrer une session de capture, utilisez le 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 

Une fois la session de capture démarrée, la sortie suivante s’affiche :

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

Le tableau suivant décrit les paramètres facultatifs que vous pouvez utiliser avec le cmdlet New-AzNetworkWatcherPacketCapture :

Paramètre description
-Filter Ajoutez des filtres pour capturer uniquement le trafic souhaité. Par exemple, vous pouvez capturer uniquement le trafic TCP à partir d’une adresse IP spécifique vers un port spécifique.
-TimeLimitInSeconds Définissez la durée maximale de la session de capture. La valeur par défaut est 18 000 secondes (5 heures).
-BytesToCapturePerPacket Définissez le nombre maximal d’octets à capturer pour chaque paquet. Tous les octets sont capturés s’ils ne sont pas utilisés ou si 0 est saisi.
-TotalBytesPerSession Définissez le nombre total d’octets capturés. Une fois la valeur atteinte, la capture de paquets s’arrête. Jusqu’à 1 Go (1 073 741 824 octets) est capturé s’il n’est pas utilisé.
-LocalFilePath Entrez un chemin d’accès de fichier local valide si vous souhaitez que la capture soit enregistrée dans la machine virtuelle cible (par exemple, C:\Capture\myVM_1.cap). Si vous utilisez une machine Linux, le chemin doit commencer par /var/captures.

Arrêter une capture de paquets

Utilisez le cmdlet Stop-AzNetworkWatcherPacketCapture pour arrêter manuellement une session de capture de paquets en cours d’exécution.

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

Remarque

Le cmdlet ne retourne pas de réponse s’il est exécuté sur une session de capture en cours d’exécution ou une session qui a déjà été arrêtée.

Obtenir une capture de paquets

Utilisez le cmdlet Get-AzNetworkWatcherPacketCapture pour récupérer l’état d’une capture de paquets (en cours d’exécution ou terminée).

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

La sortie suivante est un exemple de sortie du cmdlet Get-AzNetworkWatcherPacketCapture. L’exemple suivant est postérieur à la capture. La valeur PacketCaptureStatus est Stopped, et la valeur StopReason est TimeExceeded. Cela indique que la capture de paquets a réussi et s’est correctement exécutée.

ProvisioningState Name   Target                                                                                                                              BytesToCapturePerPacket TotalBytesPerSession TimeLimitInSeconds
----------------- ----   ------                                                                                                                              ----------------------- -------------------- ------------------
Succeeded         myVM_1 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM 0                       1073741824           18000

Remarque

Pour obtenir plus de détails dans la sortie, ajoutez | Format-List à la fin de la commande.

Télécharger une capture de paquets

Une fois votre session de capture de paquets terminée, le fichier de capture résultant est enregistré dans le stockage Azure, un fichier local sur la machine virtuelle cible, ou les deux. La destination de stockage de la capture de paquets est spécifiée lors de sa création. Pour plus d’informations, consultez Démarrer une capture de paquets.

Si un compte de stockage est spécifié, les fichiers de capture sont enregistrés dans un compte de stockage au chemin d’accès suivant :

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

Pour télécharger un fichier de capture de paquets enregistré dans le stockage Azure, utilisez le cmdlet Get-AzStorageBlobContent :

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

Remarque

Vous pouvez également télécharger le fichier de capture à partir du conteneur de compte de stockage à l’aide de l’Explorateur Stockage Azure. L’Explorateur Stockage est une application autonome qui vous permet d’accéder aux données Stockage Azure et de les utiliser. Pour plus d’informations, consultez Prise en main de l’Explorateur Stockage.

Supprimer une capture de paquets

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

Important

La suppression d’une capture de paquets dans Network Watcher ne supprime pas le fichier de capture du compte de stockage ou de la machine virtuelle. Si vous n’avez plus besoin du fichier de capture, vous devez le supprimer manuellement du compte de stockage pour éviter d’encourir des coûts de stockage.