Share via


Administración de capturas de paquetes para máquinas virtuales con Azure Network Watcher mediante la CLI de Azure

La herramienta de captura de paquetes de Network Watcher permite crear sesiones de captura para registrar el tráfico de red hacia y desde máquinas virtuales (VM) de Azure. La sesión de captura cuenta con filtros para asegurarse de capturar solo el tráfico que se desea. La captura de paquetes ayuda a diagnosticar anomalías de red, tanto de forma reactiva como proactiva. Sus aplicaciones se extienden más allá de la detección de anomalías para incluir la recopilación de estadísticas de red, la adquisición de información sobre intrusiones de red, la depuración de la comunicación entre cliente y servidor, así como la solución de otros desafíos de red. La captura de paquetes de Network Watcher permite iniciar capturas de paquetes de forma remota, lo que reduce la necesidad de ejecución manual en máquinas virtuales específicas.

En este artículo, aprenderás a configurar, iniciar, detener, descargar y eliminar de forma remota una captura de paquetes de máquina virtual con Azure PowerShell. Para obtener información sobre cómo administrar capturas de paquetes mediante Azure Portal o la CLI de Azure, consulta Administración de capturas de paquetes para máquinas virtuales mediante Azure Portal o Administración de capturas de paquetes para máquinas virtuales mediante PowerShell.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.

  • Azure Cloud Shell o la CLI de Azure.

    Los pasos de este artículo ejecutarán los comandos de la CLI de Azure de forma interactiva en Azure Cloud Shell. Para ejecutar los comandos en Cloud Shell, seleccione Abrir Cloud Shell en la esquina superior derecha de un bloque de código. Seleccione Copiar para copiar el código y péguelo en Cloud Shell para ejecutarlo. También podrá ejecutar Cloud Shell desde Azure Portal.

    También puede instalar la CLI de Azure localmente para ejecutar los comandos. Si ejecuta la CLI de Azure localmente, inicie sesión en Azure con el comando az login.

  • Una máquina virtual con la conectividad TCP de salida siguiente:

    • a la cuenta de almacenamiento en el puerto 443
    • a 169.254.169.254 a través del puerto 80
    • a 168.63.129.16 a través del puerto 8037

Nota:

  • Azure crea una instancia de Network Watcher en la región de la máquina virtual si Network Watcher no se habilitó para esa región. Para obtener más información, consulte Habilitar o deshabilitar Azure Network Watcher.
  • La captura de paquetes de Network Watcher requiere que se instale la extensión de la máquina virtual del agente de Network Watcher en la máquina virtual de destino. Para obtener más información, consulta Instalación del agente de Network Watcher.
  • Las dos últimas direcciones IP y puertos enumerados en los Requisitos previos son comunes en todas las herramientas de Network Watcher que usan el agente de Network Watcher y podrían cambiar ocasionalmente.

Si un grupo de seguridad de red está asociado a la interfaz de red o a una subred en la que se encuentra la interfaz de red, asegúrese de que existen reglas que permiten la conectividad de salida a través de los puertos anteriores. Del mismo modo, garantice la conectividad de salida a través de los puertos anteriores al agregar a la red rutas definidas por el usuario.

Instalación del agente de Network Watcher

Paso 1

Ejecute el comando az vm extension set para instalar el agente de captura de paquetes en la máquina virtual invitada.

En las máquinas virtuales Windows:

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

En las máquinas virtuales Linux:

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

Paso 2

Para asegurarse de que el agente está instalado, ejecute el comando vm extension show y pásele el nombre de la máquina virtual y del grupo de recursos. Compruebe la lista resultante para asegurarse de que el agente está instalado.

En las máquinas virtuales Windows:

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

En las máquinas virtuales Linux:

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

El siguiente es un ejemplo de la respuesta de la ejecución de az vm extension show.

{
  "autoUpgradeMinorVersion": true,
  "forceUpdateTag": null,
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/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"
}

Inicio de una captura de paquetes

Una vez completados los pasos anteriores, el agente de captura de paquetes está instalado en la máquina virtual.

Paso 1

Recupere una cuenta de almacenamiento. Esta cuenta de almacenamiento se utiliza para almacenar el archivo de captura de paquetes.

az storage account list

Paso 2

En este punto, está listo para crear una captura de paquetes. En primer lugar, vamos a examinar los parámetros que quiere configurar. Los filtros son uno de estos parámetros que se pueden usar para limitar los datos que se almacenan mediante la captura de paquetes. En el ejemplo siguiente se configura una captura de paquetes con varios filtros. Los tres primeros filtros recopilan el tráfico TCP saliente solo de la dirección IP local 10.0.0.3 a los puertos de destino 20, 80 y 443. El último filtro recopila solo el tráfico 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\"}]"

El ejemplo siguiente es la salida esperada de la ejecución del comando 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/00000000-0000-0000-0000-000000000000/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_westcentralus/pa
cketCaptures/packetCaptureName",
  "name": "packetCaptureName",
  "provisioningState": "Succeeded",
  "resourceGroup": "NetworkWatcherRG",
  "storageLocation": {
    "filePath": null,
    "storageId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/gwteststorage123abc",
    "storagePath": "https://gwteststorage123abc.blob.core.windows.net/network-watcher-logs/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/{resourceGroupName}/p
roviders/microsoft.compute/virtualmachines/{vmName}/2017/05/25/packetcapture_16_22_34_630.cap"
  },
  "target": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}",
  "timeLimitInSeconds": 18000,
  "totalBytesPerSession": 1073741824
}

Obtención de una captura de paquetes

Al ejecutar el comando az network watcher packet-capture show-status, se recupera el estado de una captura de paquetes que está en ejecución o se ha completado.

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

El ejemplo siguiente es la salida del comando az network watcher packet-capture show-status. El siguiente ejemplo refiere a cuando se detiene la captura, con un StopReason de TimeExceeded.

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

Detención de una captura de paquetes

Al ejecutar el comando az network watcher packet-capture stop, se detiene una sesión de captura si está en curso.

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

Nota

El comando no devuelve ninguna respuesta cuando se ejecuta en una sesión de captura actualmente en ejecución o en una sesión que ya se ha detenido.

Eliminación de una captura de paquetes

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

Nota

La eliminación de una captura de paquetes no elimina el archivo en la cuenta de almacenamiento.

Descarga de una captura de paquetes

Una vez finalizada la sesión de captura de paquetes, el archivo de captura se puede cargar en Blob Storage o en un archivo local en la máquina virtual. La ubicación de almacenamiento de la captura de paquetes se define al crear la sesión. Una herramienta práctica para acceder a estos archivos de captura guardados en una cuenta de almacenamiento es el Explorador de Microsoft Azure Storage, que puede descargarse aquí: https://storageexplorer.com/

Si se especifica una cuenta de almacenamiento, los archivos de captura de paquetes se guardan en una cuenta de almacenamiento en la siguiente ubicación:

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