Redes Seguras de Azure con NSGs: Tutorial Paso a Paso

Grupos de seguridad de red de Azure o NSG de Azure te permiten filtrar el tráfico de red tanto de entrada como de salida, desde uno o más recursos de Azure. Si alguna vez necesitas evitar el acceso a un recurso de Azure, debes entender cómo funcionan los NSG.

En este artículo, aprenderás el propósito de los NSG de Azure y cómo configurarlos con el lenguaje de secuencias de comandos PowerShell.

Requisitos previos

  • Un recurso de Azure como objetivo. Este tutorial utilizará una suscripción de pago por uso y una máquina virtual de Azure con Windows Server 2019.
  • PowerShell 7+. Versiones anteriores de PowerShell pueden funcionar, pero este tutorial utiliza PowerShell 7.0.1 para la configuración.
  • El módulo Azure Az de PowerShell

Comprensión de los NSG de Azure

Piensa en un NSG de Azure como un firewall. Un firewall consta de reglas que definen acciones a tomar en el tráfico de entrada y salida, llamadas conjuntos de reglas. Los firewalls suelen venir con conjuntos de reglas predeterminados que son reglas que dictan qué puede y qué no puede atravesar el firewall; los NSG de Azure tienen algo similar.

A diferencia de los firewalls tradicionales, las NSG de Azure también tienen un concepto en la nube llamado etiquetas de servicio. Las etiquetas de servicio son la forma en que Azure abstrae los rangos de direcciones para facilitar su gestión.

Veamos brevemente cada uno de estos temas importantes.

Uso de Etiquetas de Servicio para Simplificar la Configuración de Reglas

En los servicios en la nube, las direcciones IP y los rangos pueden cambiar con frecuencia. Esto puede dificultar el mantenimiento de conjuntos de reglas de rangos IP de Azure definidos manualmente. Afortunadamente, Azure define muchas etiquetas de servicio diferentes a las que puede apuntar la regla de su NSG.

Las etiquetas de servicio son un concepto que siempre utilizará la lista de direcciones más actualizada. Son una forma de asignar marcadores de posición a conjuntos de rangos de direcciones para facilitar la gestión.

Azure service tags in the Azure portal

Tenga en cuenta los conjuntos de reglas predeterminados

Cuando crea y aplica una NSG de Azure, primero debe conocer las reglas que esas NSG automáticamente aplican. Estas reglas predeterminadas son inmutables y se crean tanto para el tráfico entrante como saliente.

Cada regla en un conjunto de reglas de NSG de Azure tiene una prioridad. La prioridad dicta el orden de operación o qué reglas tienen prioridad sobre otras. Por ejemplo, si existe una regla con una prioridad de 65000 que bloquea todo el tráfico entrante y crea una regla con una prioridad de 64999 que permite el puerto 80, la NSG de Azure bloqueará todo el tráfico excepto el puerto 80.

Default Azure NSG rule priorities

Las reglas predefinidas no pueden cambiarse, pero se pueden anular utilizando una regla de mayor prioridad, como se muestra arriba. Cada una de estas reglas se aplica a todos los protocolos, como TCP, UDP e ICMP.

Asegúrate de que tus reglas utilicen un número inferior a 65500 para anular las reglas predefinidas por defecto.

Cuando creas un NSG de Azure, verás varias reglas predefinidas:

Reglas de entrada

  • AllowVNetInBound – Esta regla de entrada contiene todos los rangos de direcciones IP definidos para la red virtual y todos los espacios de direcciones locales conectados. Además, esta regla contiene redes virtuales conectadas mediante emparejamiento, redes virtuales conectadas a una puerta de enlace de red virtual, dirección IP virtual del host y cualquier prefijo de dirección utilizado en rutas definidas por el usuario. Esta regla se establece con una prioridad de 65000.
  • AllowAzureLoadBalancerInBound – La etiqueta de servicio AzureLoadBalancer se traduce a la dirección IP virtual del host, 168.63.129.16, donde se origina la sonda de salud de Azure. El tráfico real no pasa por aquí y si no utilizas Azure Load Balancing, esta regla se puede anular. La dirección IP virtual del host existe en todas las regiones específicamente para proporcionar servicios de infraestructura esenciales como DHCP, DNS, IMDS y monitoreo de salud. Esta regla se establece con una prioridad de 65001.
  • DenyAllInbound – Establecida como la última regla, utilizando la prioridad 65500, esta regla deniega todo el tráfico de entrada no permitido explícitamente.

Reglas de salida

  • AllowVNetOutBound – Esto contiene todos los rangos de direcciones IP definidos para la red virtual, todos los espacios de direcciones conectados localmente, redes virtuales emparejadas, redes virtuales conectadas a una puerta de enlace de red virtual, la dirección IP virtual del host y cualquier prefijo de dirección utilizado en rutas definidas por el usuario. Esta regla se establece con una prioridad de 65000.
  • AllowInternetOutBound – Espacio de direcciones IP que está fuera de la red virtual y alcanzable a través de Internet público. Incluye el rango de direcciones IP públicas propiedad de Azure. Esta regla se establece con una prioridad de 65001.
  • DenyAllOutBound – Al igual que en el conjunto de reglas de entrada, esta regla se establece como la última regla, utilizando la prioridad 65500. Esta regla de salida denegará todo el tráfico no permitido explícitamente.

Creación de NSGs de Azure con PowerShell

Basta de charla, ¡pongamos manos a la obra y comencemos a crear algunas NSGs de Azure con PowerShell! Suponiendo que estás en tu consola de PowerShell y autenticado, continúa leyendo.

Relacionado: Connect-AzAccount: Tu Puerta de Acceso a Azure con PowerShell

Para crear una NSG de Azure con PowerShell, necesitas un comando; New-AzNetworkSecurityGroup. Para crear una NSG con este comando, proporciónale el nombre, el nombre del grupo de recursos donde crear la NSG y la ubicación.

El siguiente ejemplo de código está utilizando el cmdlet New-AzNetworkSecurityGroup para crear un NSG llamado NSG-MyVM en el grupo de recursos Articles que está ubicado en el centro de datos eastus de Azure.

$Params = @{
  'Name'              = 'NSG-MyVM'
  'ResourceGroupName' = 'Articles' 
  'Location'          = 'centralus'
}

$NSG = New-AzNetworkSecurityGroup @Params

Creación de Reglas de NSG de Azure con PowerShell

Una vez que tenga el NSG, probablemente el conjunto de reglas predeterminadas no sea suficiente. Necesitará crear sus propias reglas.

Configuración de una Regla de Entrada para el Protocolo de Escritorio Remoto

A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.

Para agregar una nueva regla de entrada a un NSG existente se requieren tres pasos:

  1. Ejecute el comando Get-AzNetworkSecurityGroup para recuperar el NSG existente.
  2. Ejecute el Add-AzNetworkSecurityRuleConfig para crear la regla.
  3. Ejecute el comando Set-AzNetworkSecurityGroup para aplicar esa regla al NSG.

El siguiente ejemplo de código está utilizando el Get-AzNetworkSecurityGroup para recuperar un NSG existente. Luego, se define una regla utilizando Add-AzNetworkSecurityRuleConfig la cual luego se aplica al NSG existente utilizando el cmdlet Set-AzNetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

$Params = @{
  'Name'                     = 'allowRDP'
  'NetworkSecurityGroup'     = $NSG
  'Protocol'                 = 'TCP'
  'Direction'                = 'Inbound'
  'Priority'                 = 200
  'SourceAddressPrefix'      = 'my.ip.address'
  'SourcePortRange'          = '*'
  'DestinationAddressPrefix' = '*'
  'DestinationPortRange'     = 3389
  'Access'                   = 'Allow'
}

Add-AzNetworkSecurityRuleConfig @Params | Set-AzNetworkSecurityGroup

El parámetro Prioridad determina cuándo se evalúa la regla, el valor de 200 está cerca de la parte superior ya que 4096 es la regla de prioridad más baja.

A menudo, el tráfico saliente no se bloquea ya que puede ser desafiante conocer todos los puertos posibles que una aplicación puede necesitar usar. Afortunadamente, puedes encontrar algunas recomendaciones expertas de filtrado de salida del Instituto SANS, una organización ampliamente confiable en cuanto a estándares de seguridad de la información.

Para implementar las recomendaciones de SANS, podemos seguir los mismos tres pasos proporcionados anteriormente pero esta vez crear una regla con múltiples puertos y con una Dirección de Salida en lugar de Entrada.

  • MS RPC – Puertos TCP y UDP 135
  • NetBIOS/IP – Puertos TCP y UDP 137-139
  • SMB/IP – Puerto TCP 445
  • Protocolo de Transferencia de Archivos Trivial (TFTP) – Puerto UDP 69
  • Syslog – Puerto UDP 514
  • Protocolo Simple de Administración de Redes (SNMP) – Puertos UDP 161-162

El siguiente código recupera una regla NSG existente usando el cmdlet Get-AzNetworkSecurityGroup. Una regla de salida se define utilizando Add-AzNetworkSecurityRuleConfig y se aplica mediante el cmdlet Set-AzNetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

$Params = @{
  'Name'                     = 'DenySANSOutBound'
  'NetworkSecurityGroup'     = $NSG
  'Protocol'                 = '*'
  'Direction'                = 'Outbound'
  'Priority'                 = 4000
  'SourceAddressPrefix'      = '*'
  'SourcePortRange'          = '*'
  'DestinationAddressPrefix' = 'Internet'
  'DestinationPortRange'     = @('135', '137','139','445','69','514','161','162')
  'Access'                   = 'Deny'
}

Add-AzNetworkSecurityRuleConfig @Params | Set-AzNetworkSecurityGroup

Por supuesto, algunos de estos puertos son valiosos y necesarios, dependiendo de los servicios que estás proporcionando. Lo más probable es que necesites personalizar esta lista según lo que requiera tu aplicación, que generalmente se proporcionan por el proveedor o utilizando una herramienta para encontrar puertos abiertos, como netstat.

Relacionado: Encontrar Puertos con Netstat y PowerShell

Configurando un NSG de Azure para una Subred Específica

Quizás hayas segmentado tu espacio de red virtual a través de subredes. Para ser más detallado, puedes aplicar NSGs solo a una subred específica, controlando de manera más detallada el tráfico en esa subred.

El fragmento de código a continuación está buscando un prefijo de dirección completo y aplicando un NSG a él.

# Recupera una Red Virtual existente
$VNet = Get-AzVirtualNetwork -Name 'Articles-vnet' -ResourceGroupName 'Articles'
# Recupera un NSG existente
$NSG  = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

# Selecciona la primera subred utilizando notación de array y el primer registro ubicado en el índice 0
$Params = @{
    'VirtualNetwork'       = $VNet
    'Name'                 = ($VNet.Subnets[0]).Name
    'AddressPrefix'        = ($VNet.Subnets[0]).AddressPrefix
    'NetworkSecurityGroup' = $NSG
}

# Aplica la configuración actualizada a la configuración de la subred y luego aplica el cambio a la VNet
Set-AzVirtualNetworkSubnetConfig @Params
Set-AzVirtualNetwork -VirtualNetwork $VNet

A continuación, aprende cómo utilizar interfaces de red para segmentar aún más y limitar los NSG solo a lo que pueda ser necesario, como una interfaz de red.

Aplicando un NSG de Azure a una Interfaz de Red

Similar a cómo funcionan las subredes, puede aplicar reglas de NSG directamente a una interfaz de red. Este nivel de granularidad generalmente no es necesario, pero cuando tiene múltiples interfaces de red por máquina virtual, puede tener sentido aplicar conjuntos de reglas diferentes a las NIC individuales según sea necesario.

Similar a cómo se define la limitación de subred, puede aplicar reglas a una NIC individual. En este caso, está utilizando el cmdlet Get-AzNetworkInterface para recuperar una NIC específica en la VM dada. Esto tendrá el NSG previamente creado configurado en la propiedad NetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name "MyVM-nsg" -ResourceGroupName "Articles"
$NIC = Get-AzNetworkInterface -name "MyVM-vm-nic"
 
$NIC.NetworkSecurityGroup = $NSG
$NIC | Set-AzNetworkInterface

¿Qué pasa con el diagnóstico y análisis del tráfico a través de un NSG? ¡Sigue leyendo para aprender sobre los registros de flujo de NSG y cómo puedes utilizarlos!

Depuración y solución de problemas con registros de flujo de NSG

A lo largo de la creación y uso de NSG, es posible que descubra que necesita una depuración adicional para solucionar un problema de regla incorrecta o analizar el tráfico. Los registros de flujo son una característica de Azure Network Watcher que registra información sobre el tráfico IP que pasa a través de un NSG.

Una vez que Azure Network Watcher captura el tráfico de red, almacena esos datos en una cuenta de almacenamiento de Azure. Usando PowerShell, puede configurar los registros de flujo de NSG de Azure para analizar esa cuenta de almacenamiento de Azure y depurar y solucionar problemas de manera más efectiva.

Relacionado: Cómo descargar e instalar la herramienta AzCopy

Habilitar los registros de flujo de NSG consta de tres pasos generales en PowerShell:

  1. Registre el proveedor Microsoft.Insights.
  2. Cree un Espacio de trabajo de Insights operativos para almacenar los datos.
  3. Habilita el registro de flujo NSG con el comando Set-AzNetworkWatcherConfigFlowLog.

Para facilitar la configuración de los registros de flujo NSG de Azure, el siguiente código de PowerShell simplificará los diferentes pasos requeridos. Especialmente, este código crea un Espacio de trabajo de Insights operativos y asocia una configuración de registro de flujo con la suscripción correcta, el espacio de trabajo y el NSG.

$resourceGroupName = '<some resource group name>'
$NetworkWatcher = Get-AzNetworkWatcher -Name '<some name>' -ResourceGroupName $resourceGroupName
$NSG            = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName $resourceGroupName
$StorageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name '<storage account name>'
$Subscription   = Get-AzSubscription -SubscriptionName '<your subscription name>'

$Workspace = New-AzOperationalInsightsWorkspace -Location 'centralus' -Name "DefaultWorkspace-$($NSG.Name)-Articles" -Sku 'Standard' -ResourceGroupName $resourceGroupName

$Params = @{
  'NetworkWatcher'         = $NetworkWatcher
  'TargetResourceId'       = $NSG.Id
  'StorageAccountId'       = $StorageAccount.Id
  'EnableFlowLog'          = $True
  'FormatType'             = 'JSON'
  'FormatVersion'          = 2
  'EnableTrafficAnalytics' = $True
  'WorkspaceResourceId'    = $Workspace.ResourceId
  'WorkspaceGUID'          = $Workspace.CustomerId
  'WorkspaceLocation'      = 'centralus'
}

Set-AzNetworkWatcherConfigFlowLog @Params

Los registros de flujo contienen muchas propiedades diferentes, como es típico en los registros de firewall. Esto incluye propiedades como la IP de origen y destino, los puertos, los protocolos y las marcas de tiempo. Los registros de las versiones 1 y 2 tienen una gran diferencia en que la versión 2 tiene el concepto de estado de flujo. Esto marca la continuación y terminación de un flujo junto con información de ancho de banda del tráfico.

Próximos Pasos

Los NSG de Azure son herramientas poderosas para limitar y auditar el tráfico a un recurso. Utilizados de manera efectiva, puede asegurar sus recursos e infraestructura correctamente. Con capacidades de auditoría a través de los registros de flujo NSG y la capacidad de limitar los NSG a subredes o adaptadores de red, tiene la flexibilidad necesaria para delimitar reglas según sea necesario y verificar que todo el tráfico sea el esperado.

Source:
https://adamtheautomator.com/azure-nsg/