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

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 PowerShell.

Prérequis

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

  • Azure Cloud Shell ou Azure CLI.

    Dans les étapes de cet article, vous exécutez les commandes Azure CLI 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 afin de l’exécuter. Vous pouvez démarrer Azure Cloud Shell depuis le Portail Azure.

    Vous pouvez également installer Azure CLI localement afin d’exécuter les commandes. Si vous exécutez Azure CLI localement, connectez-vous à Azure à l’aide de la commande az login.

  • 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

Étape 1

Exécutez la commande az vm extension set pour installer l’agent de capture de paquets sur la machine virtuelle invitée.

Pour les machines virtuelles Windows :

az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentWindows --version 1.4

Pour les machines virtuelles Linux :

az vm extension set --resource-group resourceGroupName --vm-name virtualMachineName --publisher Microsoft.Azure.NetworkWatcher --name NetworkWatcherAgentLinux --version 1.4

Étape 2

Pour vous assurer que l’agent est installé, exécutez la commande vm extension show et transmettez-lui le groupe de ressources ainsi que le nom de la machine virtuelle. Vérifiez la liste obtenue afin de vous assurer que l’agent est bien installé.

Pour les machines virtuelles Windows :

az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name NetworkWatcherAgentWindows

Pour les machines virtuelles Linux :

az vm extension show --resource-group resourceGroupName --vm-name virtualMachineName --name AzureNetworkWatcherExtension

L’exemple suivant montre la réponse à l’exécution de az vm extension show

{
  "autoUpgradeMinorVersion": true,
  "forceUpdateTag": null,
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/NetworkWatcherAgentWindows",
  "instanceView": null,
  "location": "westcentralus",
  "name": "NetworkWatcherAgentWindows",
  "protectedSettings": null,
  "provisioningState": "Succeeded",
  "publisher": "Microsoft.Azure.NetworkWatcher",
  "resourceGroup": "{resourceGroupName}",
  "settings": null,
  "tags": null,
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "typeHandlerVersion": "1.4",
  "virtualMachineExtensionType": "NetworkWatcherAgentWindows"
}

Démarrer une capture de paquets

Une fois les étapes précédentes terminées, l’agent de capture de paquets est installé sur la machine virtuelle.

Étape 1

Récupérez un compte de stockage. Ce compte de stockage permet de stocker le fichier de capture de paquets.

az storage account list

Étape 2

À ce stade, vous êtes prêt à créer une capture de paquets. Tout d’abord, examinons les paramètres que vous pouvez configurer. Les filtres sont de tels paramètres, qui permettent de limiter les données stockées par la capture de paquets. L’exemple suivant présente la configuration d’une capture de paquets avec plusieurs filtres. Les trois premiers filtres collectent le trafic TCP sortant uniquement à partir de l’adresse IP locale 10.0.0.3 vers les ports de destination 20, 80 et 443. Le dernier filtre collecte uniquement le trafic UDP.

az network watcher packet-capture create --resource-group {resourceGroupName} --vm {vmName} --name packetCaptureName --storage-account {storageAccountName} --filters "[{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"20\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"80\"},{\"protocol\":\"TCP\", \"remoteIPAddress\":\"1.1.1.1-255.255.255.255\",\"localIPAddress\":\"10.0.0.3\", \"remotePort\":\"443\"},{\"protocol\":\"UDP\"}]"

L’exemple suivant est la sortie attendue de l’exécution de la commande az network watcher packet-capture create.

{
  "bytesToCapturePerPacket": 0,
  "etag": "W/\"b8cf3528-2e14-45cb-a7f3-5712ffb687ac\"",
  "filters": [
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "20"
    },
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "80"
    },
    {
      "localIpAddress": "10.0.0.3",
      "localPort": "",
      "protocol": "TCP",
      "remoteIpAddress": "1.1.1.1-255.255.255.255",
      "remotePort": "443"
    },
    {
      "localIpAddress": "",
      "localPort": "",
      "protocol": "UDP",
      "remoteIpAddress": "",
      "remotePort": ""
    }
  ],
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "provisioningState": "Succeeded",
  "resourceGroup": "NetworkWatcherRG",
  "storageLocation": {
    "filePath": null,
    "storageId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/gwteststorage123abc",
    "storagePath": "https://gwteststorage123abc.blob.core.windows.net/network-watcher-logs/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}/2017/05/25/packetcapture_16_22_34_630.cap"
  },
  "target": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}",
  "timeLimitInSeconds": 18000,
  "totalBytesPerSession": 1073741824
}

Obtenir une capture de paquets

L’exécution de la commande az network watcher packet-capture show-status extrait le statut d’une capture de paquets en cours d’exécution ou terminée.

az network watcher packet-capture show-status --name packetCaptureName --location {networkWatcherLocation}

L’exemple suivant présente la sortie de la commande az network watcher packet-capture show-status. L’exemple suivant illustre un arrêt (Stopped) de la capture avec un dépassement de délai (TimeExceeded) comme motif (StopReason).

{
  "additionalProperties": {
    "status": "Succeeded"
  },
  "captureStartTime": "2016-12-06T17:20:01.5671279Z",
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/packetCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "packetCaptureError": [],
  "packetCaptureStatus": "Stopped",
  "stopReason": "TimeExceeded"
}

Arrêter une capture de paquets

Lors de l’exécution de la commande az network watcher packet-capture stop, toute session de capture en cours est arrêtée.

az network watcher packet-capture stop --name packetCaptureName --location westcentralus

Notes

La commande ne retourne aucune réponse quand elle est exécutée dans une session de capture en cours d’exécution ou dans une session existante déjà arrêtée.

Supprimer une capture de paquets

az network watcher packet-capture delete --name packetCaptureName --location westcentralus

Notes

La suppression d’une capture de paquets ne supprime pas le fichier dans le compte de stockage.

Télécharger une capture de paquets

Une fois votre session de capture de paquets terminée, le fichier de capture peut être téléchargé vers le stockage d’objets blob ou dans un fichier local sur la machine virtuelle. L’emplacement de stockage de la capture de paquets est défini lors de la création de la session. L’Explorateur Stockage Microsoft Azure est un outil très pratique pour accéder à ces fichiers de capture enregistrés dans un compte de stockage. Vous pouvez le télécharger ici : https://storageexplorer.com/

Si un compte de stockage est spécifié, les fichiers de capture de paquets sont enregistrés dans un compte de stockage à l’emplacement suivant :

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