Comparteix a través de


Filtrado del tráfico de red con un grupo de seguridad de red mediante la CLI de Azure

Puede filtrar el tráfico de red entrante y saliente de una subred de una red virtual con un grupo de seguridad de red. Los grupos de seguridad de red contienen reglas de seguridad que filtran el tráfico de red por dirección IP, puerto y protocolo. Las reglas de seguridad se aplican a los recursos implementados en una subred. En este artículo aprenderá a:

  • Crear un grupo de seguridad de red y reglas de seguridad
  • Crear una red virtual y asociar un grupo de seguridad de red a una subred
  • Implementar máquinas virtuales (VM) en una subred
  • Probar los filtros de tráfico

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Requisitos previos

  • En este artículo se necesita la versión 2.0.28 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.

Crear un grupo de seguridad de red

Un grupo de seguridad de red contiene reglas de seguridad. Las reglas de seguridad especifican un origen y destino. Los orígenes y destinos pueden ser grupos de seguridad de aplicaciones.

Creación de grupos de seguridad de aplicaciones

En primer lugar, debe crear un grupo de recursos para todos los recursos creados en este artículo con az group create. En el ejemplo siguiente, se crea un grupo de recursos en la ubicación westus2:

az group create \
  --name test-rg \
  --location westus2

Cree un grupo de seguridad de aplicaciones con az network asg create. Un grupo de seguridad de aplicaciones permite agrupar servidores con requisitos de filtrado de puertos similar. El ejemplo siguiente crea dos grupos de seguridad de aplicaciones.

az network asg create \
  --resource-group test-rg \
  --name asg-web-servers \
  --location westus2

az network asg create \
  --resource-group test-rg \
  --name asg-mgmt-servers \
  --location westus2

Crear un grupo de seguridad de red

Cree un grupo de seguridad de red con az network nsg create. En el ejemplo siguiente, se crea un grupo de seguridad de red denominado nsg-1:

# Create a network security group
az network nsg create \
  --resource-group test-rg \
  --name nsg-1

Creación de reglas de seguridad

Cree una regla de seguridad con az network nsg rule create. En el ejemplo siguiente se crea una regla que permite el tráfico entrante desde Internet al grupo de seguridad de aplicaciones asg-web-servers a través de los puertos 80 y 443:

az network nsg rule create \
  --resource-group test-rg \
  --nsg-name nsg-1 \
  --name Allow-Web-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 100 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "asg-web-servers" \
  --destination-port-range 80 443

En el ejemplo siguiente se crea una regla que permite el tráfico entrante desde Internet al grupo de seguridad de aplicaciones asg-mgmt-servers a través del puerto 22:

az network nsg rule create \
  --resource-group test-rg \
  --nsg-name nsg-1 \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 110 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "asg-mgmt-servers" \
  --destination-port-range 22

En este artículo, asg asg-mgmt-servers expone SSH (puerto 22) a Internet. Para entornos de producción, use una conexión de red VPN o privada para administrar los recursos de Azure en lugar de exponer el puerto 22 a Internet.

Creación de una red virtual

Cree la red virtual con el comando az network vnet create. El siguiente ejemplo crea una red virtual denominada vnet-1:

az network vnet create \
  --name vnet-1 \
  --resource-group test-rg \
  --address-prefixes 10.0.0.0/16

Agregue una subred a una red virtual con az network vnet subnet create. El siguiente ejemplo agrega una subred denominada subnet-1 a la red virtual y le asocia el grupo de seguridad de red nsg-1:

az network vnet subnet create \
  --vnet-name vnet-1 \
  --resource-group test-rg \
  --name subnet-1 \
  --address-prefix 10.0.0.0/24 \
  --network-security-group nsg-1

Creación de máquinas virtuales

Cree dos máquinas virtuales en la red virtual para que pueda validar el filtrado de tráfico en un paso posterior.

Cree la máquina virtual con az vm create. En el ejemplo siguiente se crea una máquina virtual que actúa como un servidor web. La opción --asgs asg-web-servers hace que Azure incluya la interfaz de red que se crea para la máquina virtual como un miembro del grupo de seguridad de aplicaciones asg-web-servers. La opción --nsg "" se especifica para evitar que Azure cree un grupo de seguridad de red predeterminado para la interfaz de red que Azure crea al generar la máquina virtual. El comando le pide que cree una contraseña para la máquina virtual. Las claves SSH no se usan en este ejemplo para facilitar los pasos posteriores de este artículo. En un entorno de producción, use claves SSH para la seguridad.

az vm create \
  --resource-group test-rg \
  --name vm-web \
  --image Ubuntu2204 \
  --vnet-name vnet-1 \
  --subnet subnet-1 \
  --nsg "" \
  --asgs asg-web-servers \
  --admin-username azureuser \
  --authentication-type password \
  --assign-identity

La máquina virtual tarda en crearse unos minutos. Una vez creada la máquina virtual, se devuelve una salida similar a la del siguiente ejemplo:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-web",
  "location": "westus2",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "203.0.113.24",
  "resourceGroup": "test-rg"
}

Cree la máquina virtual con az vm create. En el ejemplo siguiente se crea una máquina virtual que actúa como servidor de administración. La opción --asgs asg-mgmt-servers hace que Azure incluya la interfaz de red que se crea para la máquina virtual como un miembro del grupo de seguridad de aplicaciones asg-mgmt-servers.

En el ejemplo siguiente se crea una máquina virtual y se agrega una cuenta de usuario. El parámetro --generate-ssh-keys hace que la CLI busque una clave SSH disponible en ~/.ssh. Si encuentra una, se usa esa clave. Si no es así, se genera y se almacena en ~/.ssh. Por último, implementamos la imagen más reciente Ubuntu 22.04.

az vm create \
  --resource-group test-rg \
  --name vm-mgmt \
  --image Ubuntu2204 \
  --vnet-name vnet-1 \
  --subnet subnet-1 \
  --nsg "" \
  --asgs asg-mgmt-servers \
  --admin-username azureuser \
  --generate-ssh-keys \
  --assign-identity

La máquina virtual tarda en crearse unos minutos. No continúe con el paso siguiente hasta que Azure finalice la creación de la máquina virtual.

Habilitación del inicio de sesión de Microsoft Entra ID para las máquinas virtuales

En el siguiente ejemplo de código se instala la extensión para habilitar un inicio de sesión de Microsoft Entra ID para una máquina virtual Linux. Las extensiones de máquina virtual son aplicaciones pequeñas que realizan tareas de automatización y configuración posterior a la implementación en máquinas virtuales de Azure.

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory \
    --name AADSSHLoginForLinux \
    --resource-group test-rg \
    --vm-name vm-web

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory \
    --name AADSSHLoginForLinux \
    --resource-group test-rg \
    --vm-name vm-mgmt

Probar los filtros de tráfico

Con un cliente SSH de su elección, conéctese a las máquinas virtuales que se crearon anteriormente. Por ejemplo, el siguiente comando se puede usar desde una interfaz de línea de comandos, como Subsistema de Windows para Linux, para crear una sesión SSH con la máquina virtual vm-mgmt. En los pasos anteriores, habilitamos el inicio de sesión de Microsoft Entra ID para las máquinas virtuales. Puede iniciar sesión en las máquinas virtuales mediante las credenciales de Microsoft Entra ID o puede usar la clave SSH que usó para crear las máquinas virtuales. En el ejemplo siguiente, se usa la clave SSH para iniciar sesión en la máquina virtual de administración e iniciar sesión en la máquina virtual web desde la máquina virtual de administración con una contraseña.

Para obtener más información sobre cómo conectarse mediante SSH a una máquina virtual Linux e iniciar sesión con Microsoft Entra ID, consulte Iniciar sesión en una máquina virtual Linux en Azure mediante Microsoft Entra ID y OpenSSH.

Almacenar la dirección IP de la máquina virtual con el fin de SSH

Ejecute el siguiente comando para almacenar la dirección IP de la máquina virtual como variable de entorno:

export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-mgmt --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS

La conexión se realiza correctamente porque la interfaz de red conectada a la máquina virtual vm-mgmt está en el grupo de seguridad de la aplicación asg-mgmt-servers, que permite la entrada del puerto 22 desde Internet.

Use el siguiente comando para acceder mediante SSH a la máquina virtual vm-web desde la máquina virtual vm-mgmt:

ssh -o StrictHostKeyChecking=no azureuser@vm-web

La conexión se realiza correctamente porque una regla de seguridad predeterminada dentro de cada grupo de seguridad de red permite el tráfico a través de todos los puertos entre todas las direcciones IP de una red virtual. No es posible conectarse mediante SSH a la máquina virtual vm-web desde Internet porque la regla de seguridad para asg-web-servers no permite el puerto 22 de entrada desde Internet.

Use los siguientes comandos para instalar el servidor web nginx en la máquina virtual vm-web:

# Update package source
sudo apt-get -y update

# Install NGINX
sudo apt-get -y install nginx

La máquina virtual vm-web tiene permiso de salida a Internet para recuperar nginx porque una regla de seguridad predeterminada permite todo el tráfico de salida a Internet. Salga de la sesión de SSH vm-web, lo que le deja en el símbolo del sistema username@vm-mgmt:~$ de la máquina virtual vm-mgmt. Escriba el siguiente comando para recuperar la pantalla de bienvenida de nginx desde la máquina virtual vm-web:

curl vm-web

Cierre la sesión de la máquina virtual vm-mgmt. Para confirmar que puede acceder al servidor web vm-web desde fuera de Azure, escriba curl <publicIpAddress> desde su propio equipo. La conexión se realiza correctamente porque el grupo de seguridad de aplicaciones asg-web-servers, en el que se encuentra la interfaz de red conectada a la máquina virtual vm-web, permite migrar al puerto 80 desde Internet.

Limpieza de recursos

Cuando ya no se necesiten, use az group delete para quitar el grupo de recursos y todos los recursos que contenga.

az group delete \
    --name test-rg \
    --yes \
    --no-wait

Pasos siguientes

En este artículo, ha creado un grupo de seguridad de red y lo ha asociado a una subred de una red virtual. Para más información acerca de los grupos de seguridad de red, consulte Introducción a los grupos de seguridad de red y Administración de un grupo de seguridad de red.

De forma predeterminada, Azure enruta el tráfico entre subredes. En su lugar, puede elegir enrutar el tráfico entre subredes a través de una máquina virtual, que actúa como un firewall, por ejemplo. Para obtener información sobre cómo hacerlo, consulte Creación de una tabla de rutas.