Diagnosticar un problema de filtro del tráfico de red de una máquina virtual

En este artículo, aprenderá a diagnosticar problemas de filtro de tráfico de red para una máquina virtual (VM). El proceso implica ver las reglas de seguridad vigentes aplicadas por el grupo de seguridad de red (NSG).

Los NSG le permiten controlar los tipos de tráfico que entran y salen de una máquina virtual. Puede asociar un NSG a una subred de una red virtual de Azure, a una interfaz de red conectada a una máquina virtual, o a ambas. Las reglas de seguridad en vigor aplicadas a una interfaz de red son una agregación de las reglas que existen en el NSG asociado a una interfaz de red y la subred en la que se encuentra la interfaz. Las reglas de distintos grupos de seguridad de red a veces pueden entrar en conflicto entre sí y afectar a la conectividad de red de una máquina virtual. Puede ver todas las reglas de seguridad vigentes desde los NSG que se aplican a las interfaces de red de la máquina virtual. Si no está familiarizado con los conceptos de red virtual, interfaz de red o NSG, consulte Introducción a la red virtual, Interfaz de red e Introducción a los grupos de seguridad de red.

Escenario

Intenta conectarse a una máquina virtual en el puerto 80 desde Internet, pero se produce un error en la conexión. Para determinar por qué no puede acceder al puerto 80 desde Internet, puede ver las reglas de seguridad vigentes para una interfaz de red mediante Azure Portal, PowerShell o la CLI de Azure.

En los pasos que se indican a continuación se da por hecho que tiene una maquina virtual para ver las reglas de seguridad vigentes. Si no tiene una máquina virtual, implemente primero una máquina virtual Linux o Windows para completar las tareas de este artículo. Los ejemplos de este artículo son para una máquina virtual denominada myVM con una interfaz de red llamada myVMVMNic. La máquina virtual y la interfaz de red están en un grupo de recursos llamado myResourceGroup y en la región Este de EE. UU. Cambie los valores de los pasos, según corresponda, para la máquina virtual en la que está diagnosticando el problema.

Diagnosticar mediante el portal de Azure

  1. Inicie sesión en Azure Portal con una cuenta de Azure que disponga de los permisos necesarios.

  2. En la parte superior de Azure Portal, vaya al cuadro de búsqueda y escriba el nombre de la máquina virtual. Cuando el nombre de la máquina virtual aparezca en los resultados de búsqueda, selecciónela.

  3. Expanda Redes en el panel izquierdo. Selecciona ajustes de red. En las ilustraciones siguientes se muestra la configuración del grupo de seguridad de red para la interfaz de red de la máquina virtual.

    Captura de pantalla de las reglas de seguridad para el NSG nsg-subnet.

    Captura de pantalla de las normas de seguridad para NSG nsg-nic.

    Las reglas que ves en las figuras anteriores son para una interfaz de red llamada vm-1445. Ves que existen reglas de puerto entrante para la interfaz de red de dos grupos de seguridad de red diferentes:

    • : asociado a la subred en la que está la interfaz de red.
    • NSG-NIC: Asociado a la interfaz de red en la VM llamada vm-1445.

    La regla denominada DenyAllInBound es lo que impide la comunicación entrante con la máquina virtual en el puerto 80, desde Internet, tal como se describe en el escenario. La regla enumera 0.0.0.0/0 para ORIGEN, lo que incluye Internet. Ninguna otra regla con una prioridad más alta (número menor) permite tráfico entrante por el puerto 80. Para permitir el puerto 80 de entrada a la máquina virtual desde Internet, consulte Resolver un problema (Resolución de un problema). Para más información acerca de las reglas de seguridad y de la forma en que Azure las aplica, consulte Grupos de seguridad de red.

    En la parte inferior de la imagen también se ven las Reglas de puerto de salida. Se muestran las reglas de puerto de salida de la interfaz de red.

    Aunque la imagen solo muestra cuatro reglas de entrada para cada NSG, sus NSG pueden tener más de cuatro. En la imagen, ves VirtualNetwork bajo Fuente y Destino y AzureLoadBalancer bajo FUENTE. VirtualNetwork y AzureLoadBalancer son etiquetas de servicio. Las etiquetas de servicio representan un grupo de prefijos de direcciones IP que ayudan a reducir la complejidad de la creación de reglas de seguridad.

  4. Para ver las reglas de seguridad vigentes, seleccione la interfaz en la configuración de red de la máquina virtual. Asegúrese de que la máquina virtual está en estado en ejecución antes de continuar.

  5. En la configuración de la interfaz de red, expande Ayuda y luego selecciona Reglas de seguridad efectivas.

    El siguiente ejemplo muestra la interfaz de red de ejemplo vm-1445 con las reglas de seguridad efectivas seleccionadas.

    Captura de pantalla de las reglas de seguridad efectivas para la interfaz de red VM-1445.

    Las reglas que se enumeran son las mismas que vio en el paso 3, aunque hay pestañas diferentes para el grupo de seguridad de red asociado a la interfaz de red y la subred. Como puede ver en la imagen, solo se muestran las 50 primeras reglas. Para descargar un archivo .csv que contiene todas las reglas, seleccione Descargar.

  6. Los pasos anteriores mostraban las reglas de seguridad para una interfaz de red llamada vm-1445. ¿Qué ocurre si una máquina virtual tiene dos interfaces de red? La máquina virtual de este ejemplo tiene dos interfaces de red conectadas. Las reglas de seguridad vigentes pueden ser diferentes para cada interfaz de red.

    Para ver las reglas de la interfaz de red vm-nic-2, selecciónala. Como se muestra en el ejemplo que sigue, la interfaz de red tiene las mismas reglas asociadas a su subred que la interfaz de red vm-1445, porque ambas interfaces de red están en la misma subred. Al asociar un NSG a una subred, sus reglas se aplican a todas las interfaces de red de la subred.

    Captura de pantalla de las reglas de seguridad para nic vm-nic-2.

    A diferencia de la interfaz de red vm-1445 , la interfaz de red vm-nic-2 no tiene un grupo de seguridad de red asociado. Cada interfaz de red y cada subred pueden tener cero o un grupo de seguridad de red asociado. El grupo de seguridad de red asociado a cada interfaz de red o subred puede ser el mismo o diferente. El mismo grupo de seguridad de red se puede asociar a tantas interfaces de red y subredes como se desee.

Aunque las reglas de seguridad vigentes se vieron a través de la máquina virtual, también se puede ver a través de un usuario individual:

Diagnosticar con PowerShell

Nota

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Puede ejecutar los comandos siguientes en Azure Cloud Shell o ejecutando PowerShell desde su equipo. Azure Cloud Shell es un shell interactivo gratuito. Tiene las herramientas comunes de Azure preinstaladas y configuradas para usarlas con su cuenta. Si ejecuta PowerShell desde el equipo, necesita el módulo Azure PowerShell versión 1.0.0 o posterior. Ejecute Get-Module -ListAvailable Az en el equipo para encontrar la versión instalada. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell. Si ejecutas PowerShell localmente, también necesitas iniciar Connect-AzAccount sesión en Azure con una cuenta que tenga los permisos necesarios].

Obtenga las reglas de seguridad vigentes para una interfaz de red con Get-AzEffectiveNetworkSecurityGroup. El siguiente ejemplo obtiene las reglas de seguridad efectivas para una interfaz de red llamada vm-nic que pertenece a un grupo de recursos llamado test-rg:

$Params = @{
  NetworkInterfaceName = "vm-nic"
  ResourceGroupName    = "test-rg"
}
Get-AzEffectiveNetworkSecurityGroup @Params

La salida se devuelve en formato json. Para comprender la salida, consulte la sección Interpretación de la salida de los comandos. La salida solo se devuelve si un NSG está asociado a la interfaz de red, la subred en la que está la interfaz de red, o a ambas. La máquina virtual debe estar en estado de ejecución. Una máquina virtual puede tener varias interfaces de red con distintos grupos de seguridad de red aplicados. Cuando esté intentando solucionar un problema, ejecute el comando para cada interfaz de red.

Si sigues teniendo problemas de conectividad, consulta más diagnósticos y consideraciones.

Si solo conoce el nombre de la máquina virtual, use los siguientes comandos para enumerar todos los identificadores de interfaz de red conectados a la máquina virtual.

$Params = @{
  Name              = "vm-1"
  ResourceGroupName = "test-rg"
}
$VM = Get-AzVM @Params
$VM.NetworkProfile

Recibirá una salida similar a la del ejemplo siguiente:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-nic

En la salida anterior, el nombre de la interfaz de red es vm-nic.

Diagnosticar mediante la CLI de Azure

Si usa comandos de la CLI de Azure para completar las tareas de este artículo, ejecute los comandos que se encuentran en Azure Cloud Shell o ejecute la CLI de Azure en el equipo. En este artículo se requiere la CLI de Azure versión 2.0.32 o posterior. Ejecute az --version para comprobar la versión instalada. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure. Si ejecuta la CLI de Azure localmente, también debe ejecutar az login e iniciar sesión en Azure con una cuenta que tenga los permisos necesarios.

Obtenga las reglas de seguridad vigentes de una interfaz de red con az network nic list-effective-nsg. El siguiente ejemplo obtiene las reglas de seguridad efectivas para una interfaz de red llamada vm-nic que pertenece a un grupo de recursos llamado test-rg:

az network nic list-effective-nsg \
  --name vm-nic \
  --resource-group test-rg

La salida se devuelve en formato json. Para comprender la salida, consulte la sección Interpretación de la salida de los comandos. La salida solo se devuelve si un NSG está asociado a la interfaz de red, la subred en la que está la interfaz de red, o a ambas. La máquina virtual debe estar en estado de ejecución. Una máquina virtual puede tener varias interfaces de red con distintos grupos de seguridad de red aplicados. Cuando esté intentando solucionar un problema, ejecute el comando para cada interfaz de red.

Si sigues teniendo problemas de conectividad, consulta más diagnósticos y consideraciones.

Si solo conoce el nombre de la máquina virtual, use los siguientes comandos para enumerar todos los identificadores de interfaz de red conectados a la máquina virtual.

az vm show \
  --name vm-1 \
  --resource-group test-rg

En la salida devuelta, verá información similar a la del ejemplo siguiente:

"networkProfile": {
    "additionalProperties": {},
    "networkInterfaces": [
      {
        "additionalProperties": {},
        "id": "/subscriptions/<ID>/resourceGroups/test-rg/providers/Microsoft.Network/networkInterfaces/vm-nic",
        "primary": true,
        "resourceGroup": "test-rg"
      },

En la salida anterior, el nombre de la interfaz de red es vm-nic

Interpretación de la salida de los comandos

Independientemente de si ha utilizado PowerShell o la CLI de Azure para diagnosticar el problema, recibirá una salida que contiene la siguiente información:

  • NetworkSecurityGroup: el identificador del grupo de seguridad de red.
  • Asociación: indica si el grupo de seguridad de red está vinculado a un NetworkInterface o Subnet. Si el estado de asociación del NSG cambia justo antes de ejecutar el comando, espere unos segundos para que la salida refleje la actualización.
  • EffectiveSecurityRules: La explicación de cada propiedad se detalla en Crear una regla de seguridad. Los nombres de regla precedidos por defaultSecurityRules/ son las reglas de seguridad predeterminadas que existen en todos los grupos de seguridad de red. Los nombres de reglas precedidos por securityRules/ son reglas creadas por el usuario. Las reglas que especifican una etiqueta de servicio, como Internet, VirtualNetwork y AzureLoadBalancer para las propiedades destinationAddressPrefix o sourceAddressPrefix también tienen valores para la propiedad expandedDestinationAddressPrefix. La propiedad expandedDestinationAddressPrefix enumera todos los prefijos de dirección representados por la etiqueta de servicio.

Las reglas duplicadas aparecen en la salida cuando un NSG está vinculado a la interfaz de red y a la subred. Las reglas predeterminadas y las reglas personalizadas compartidas entre los NSG provocan estos duplicados.

La regla denominada defaultSecurityRules/DenyAllInBound es lo que impide la comunicación entrante con la máquina virtual en el puerto 80, desde Internet, tal como se describe en el escenario. Ninguna otra regla con una prioridad más alta (número menor) permite el puerto 80 de entrada desde Internet.

Resolver un problema

Puede diagnosticar el problema descrito en el scenario con el Azure portal, PowerShell o el CLI de Azure. La solución consiste en crear una regla de seguridad de red con las siguientes propiedades:

Propiedad Valor
Origen Cualquiera
Intervalos de puertos de origen Cualquiera
Destino La dirección IP de la máquina virtual, un intervalo de direcciones IP o todas las direcciones de la subred.
Intervalos de puertos de destino 80
Protocolo TCP
Acción Permitir
Prioridad 100
Nombre Allow-HTTP-All

Tras la creación de la regla, se permite el tráfico entrante por el puerto 80 desde internet porque su prioridad es mayor que la de la regla predeterminada DenyAllInBound. Si los NSG están asociados tanto a la interfaz de red como a la subred, cree la misma regla en ambos NSG. Aprenda a crear una regla de seguridad.

Escenarios de gestión de Windows que requieren RPC/DCOM

Windows Management Instrumentation (WMI) y Distributed Component Object Model (DCOM) utilizan Remote Procedure Call (RPC). El cliente se conecta primero al RPC Endpoint Mapper en el puerto TCP 135. El asignador de puntos de conexión dirige entonces al cliente a un puerto TCP asignado dinámicamente. En los valores predeterminados actuales de Windows, el rango dinámico de TCP es 49152-65535. Verifica el rango configurado en la máquina virtual de Windows destino antes de crear la regla; si el host usa un rango personalizado, usa ese rango verificado en lugar de asumir 49152-65535.

Para cada NSG asociado a la subred o interfaz de red de la VM objetivo, crea ambas reglas de permitir de entrada. Sustituye <management-source-prefix> por la red de gestión, host o servicio aprobado, y sustituye <target-vm-nic-or-subnet-prefix> por la VM, NIC o destino de subred objetivo. Sustituye <priority-rpc-endpoint-mapper> y <priority-rpc-dynamic> con prioridades enteras distintas no utilizadas entre 100 y 4096. Ambas reglas son necesarias porque una prueba de solo TCP 135 puede tener éxito mientras que la conexión dinámica RPC posterior está bloqueada.

Para más información sobre este flujo WMI/DCOM, consulte Solucionar errores de configuración NSG que bloquean tráfico en Azure Virtual Network. Para los detalles de los puertos de Windows y RPC, consulta Resumen del servicio y requisitos de puertos de red, Resolución de problemas de una conexión WMI remota y Funcionamiento de los puertos dinámicos de RPC con cortafuegos.

az network nsg rule create \
  --resource-group <resource-group> \
  --nsg-name <nsg-name> \
  --name Allow-RpcEndpointMapper \
  --priority <priority-rpc-endpoint-mapper> \
  --source-address-prefixes <management-source-prefix> \
  --source-port-ranges '*' \
  --destination-address-prefixes <target-vm-nic-or-subnet-prefix> \
  --destination-port-ranges 135 \
  --access Allow \
  --protocol Tcp \
  --direction Inbound

az network nsg rule create \
  --resource-group <resource-group> \
  --nsg-name <nsg-name> \
  --name Allow-RpcDynamic \
  --priority <priority-rpc-dynamic> \
  --source-address-prefixes <management-source-prefix> \
  --source-port-ranges '*' \
  --destination-address-prefixes <target-vm-nic-or-subnet-prefix> \
  --destination-port-ranges 49152-65535 \
  --access Allow \
  --protocol Tcp \
  --direction Inbound

El valor 49152-65535 en la regla dinámica es solo el valor predeterminado. Si verificaste un rango personalizado en la máquina virtual de Windows objetivo, reemplácialo en esa regla.

$managementSourcePrefix = "<management-source-prefix>"
$targetDestinationPrefix = "<target-vm-nic-or-subnet-prefix>"
$rpcEndpointMapperPriority = 300
$rpcDynamicPriority = 310

$networkSecurityGroup = Get-AzNetworkSecurityGroup `
  -Name "<nsg-name>" `
  -ResourceGroupName "<resource-group>"

Add-AzNetworkSecurityRuleConfig `
  -Name "Allow-RpcEndpointMapper" `
  -Description "Allow RPC Endpoint Mapper from approved management source" `
  -NetworkSecurityGroup $networkSecurityGroup `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority $rpcEndpointMapperPriority `
  -SourceAddressPrefix $managementSourcePrefix `
  -SourcePortRange "*" `
  -DestinationAddressPrefix $targetDestinationPrefix `
  -DestinationPortRange "135"

Add-AzNetworkSecurityRuleConfig `
  -Name "Allow-RpcDynamic" `
  -Description "Allow RPC dynamic ports from approved management source" `
  -NetworkSecurityGroup $networkSecurityGroup `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority $rpcDynamicPriority `
  -SourceAddressPrefix $managementSourcePrefix `
  -SourcePortRange "*" `
  -DestinationAddressPrefix $targetDestinationPrefix `
  -DestinationPortRange "49152-65535"

Set-AzNetworkSecurityGroup -NetworkSecurityGroup $networkSecurityGroup

Cuando Azure procesa el tráfico entrante, procesa las reglas del grupo de seguridad de red asociado a la subred (si hay un NSG asociado) y, a continuación, procesa las reglas del grupo de seguridad de red asociado a la interfaz de red. Si hay un NSG asociado con la interfaz de red y la subred, el puerto debe estar abierto en ambos NSG para que el tráfico llegue a la máquina virtual. Para solucionar los problemas de administración y la comunicación, se recomienda asociar un NSG a una subred, en lugar de a interfaces de red individuales. Si las máquinas virtuales de una subred necesitan reglas de seguridad diferentes, puede hacer que las interfaces de red sean miembros de un grupo de seguridad de aplicaciones (ASG) y especificar un ASG como origen y destino de una regla de seguridad. Más información acerca de los grupos de seguridad de aplicaciones.

Si sigue teniendo problemas de comunicación, consulte Consideraciones y más diagnóstico.

Consideraciones

Tenga en cuenta los puntos siguientes cuando tenga que solucionar problemas de conectividad:

  • Las reglas de seguridad predeterminadas bloquean el acceso de entrada desde Internet y solo permiten el tráfico entrante desde la red virtual. Para permitir el tráfico entrante desde Internet, agregue reglas de seguridad con una prioridad más alta que las reglas predeterminadas. Obtenga más información acerca de las reglas de seguridad predeterminadas o de cómo agregar una regla de seguridad.

  • Para redes virtuales peered, por defecto, la etiqueta de servicio VIRTUAL_NETWORK se amplía automáticamente para incluir prefijos para redes virtuales peered. Para solucionar los problemas relacionados con el emparejamiento de redes virtuales, puede ver los prefijos en la lista ExpandedAddressPrefix. Obtenga más información acerca del emparejamiento de redes virtuales y de las etiquetas de servicio.

  • Azure solo muestra reglas de seguridad eficaces para una interfaz de red cuando un NSG está asociado a la interfaz de red o subred de la máquina virtual. Además, la máquina virtual debe estar en estado en ejecución.

  • Si la interfaz de red o subred carece de un NSG asociado, todos los puertos permanecen abiertos para acceso entrante y saliente cuando una VM tiene una dirección IP pública. Esta configuración permite el acceso sin restricciones a y desde cualquier lugar. Para proteger la máquina virtual, aplique un NSG a la subred que hospeda la interfaz de red si tiene una dirección IP pública.

Más diagnósticos

  • Para ejecutar una prueba rápida para determinar si se permite el tráfico hacia o desde una máquina virtual, use la funcionalidad IP flow verify de Azure Network Watcher. IP flow verify indica si el tráfico se permite o se deniega. Si se deniega, IP flow verify indica la regla de seguridad que deniega el tráfico.
  • Si no hay reglas de seguridad que provoquen un error en la conectividad de red de una máquina virtual, es posible que el problema se deba a:
    • Software de firewall que se esté ejecutando en el sistema operativo de la máquina virtual
    • Rutas configuradas para dispositivos virtuales o para el tráfico local. El tráfico de Internet puede redirigirse a su red local local a través de la tunelización forzada. Si se fuerza el tráfico de Internet del túnel a una aplicación virtual o local, es posible que no puedas conectarte a la máquina virtual desde Internet. Para aprender cómo diagnosticar problemas de ruta que puedan dificultar el flujo de tráfico que sale de la máquina virtual, véase Diagnosticar un problema de enrutamiento del tráfico de red de una máquina virtual.

Siguientes pasos