Puede usar un grupo de seguridad de red de Azure para filtrar el tráfico de red que entra y sale de los recursos de Azure en una red virtual de Azure.
Los grupos de seguridad de red contienen reglas de seguridad que filtran el tráfico de red por dirección IP, puerto y protocolo. Cuando un grupo de seguridad de red está asociado a una subred, se aplican reglas de seguridad a los recursos implementados en esa subred.
En este tutorial, aprenderá a:
- Crear un grupo de seguridad de red y reglas de seguridad
- Creación de grupos de seguridad de aplicaciones
- Crear una red virtual y asociar un grupo de seguridad de red a una subred
- Implementar máquinas virtuales y asociar sus interfaces de red a los grupos de seguridad de aplicación.
Requisitos previos
Azure Cloud Shell
Azure hospeda Azure Cloud Shell, un entorno de shell interactivo que puede usar a través del explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.
Para iniciar Azure Cloud Shell:
| Opción |
Ejemplo o vínculo |
| Seleccione Pruébelo en la esquina superior derecha de un bloque de código o de comandos. Al seleccionar Probar no se copia automáticamente el código ni el comando en Cloud Shell. |
|
| Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. |
|
| Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. |
|
Para usar Azure Cloud Shell:
Inicie Cloud Shell.
Seleccione el botón Copiar en un bloque de código (o bloque de comandos) para copiar el código o comando.
Pegue el código o comando en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.
Seleccione Enter para ejecutar el código o comando.
Si decide instalar y usar PowerShell de forma local, para realizar los pasos de este artículo necesita la versión 1.0.0 del módulo de Azure PowerShell o cualquier versión posterior. Ejecute Get-Module -ListAvailable Az para buscar la versión instalada. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell. Si PowerShell se ejecuta localmente, también debe ejecutar Connect-AzAccount para crear una conexión con Azure.
Si no tiene una cuenta de Azure, cree una cuenta gratuita antes de comenzar.
- 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.
El siguiente procedimiento crea una red virtual con una subred de recurso.
En el portal, busque y seleccione Redes virtuales.
En la página Redes virtuales, seleccione y Crear.
En la pestaña Datos básicos de Crear una red virtual, introduzca o seleccione la siguiente información:
| Configuración |
Value |
|
Detalles del proyecto |
|
| Suscripción |
Seleccione su suscripción. |
| Grupo de recursos |
Seleccione Crear nuevo.
Escriba test-rg en Nombre.
Seleccione Aceptar. |
|
Detalles de instancia |
|
| Nombre |
Escriba vnet-1. |
| Región |
Seleccione Este de EE. UU. 2. |
Seleccione Siguiente para ir a la pestaña Seguridad.
Seleccione Siguiente para continuar con la pestaña Direcciones IP.
En el cuadro de espacio de direcciones de Subredes, seleccione la subred predeterminada.
En el panel Editar subred, escriba o seleccione la siguiente información:
| Configuración |
Value |
|
Detalles de subred |
|
| Plantilla de subred |
Deje el valor predeterminado como Predeterminado. |
| Nombre |
Escriba subnet-1. |
| Dirección inicial |
Deje el valor predeterminado de 10.0.0.0. |
| Tamaño de la subred |
Deje el valor predeterminado de /24(256 direcciones). |
Seleccione Guardar.
En la parte inferior de la pantalla, seleccione Revisar y crear. Una vez pasada la validación, seleccione Crear.
En primer lugar, cree un grupo para todos los recursos generados en este artículo con New-AzResourceGroup. En el ejemplo siguiente, se crea un grupo de recursos en la ubicación westus2:
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
Cree una red virtual con New-AzVirtualNetwork. El siguiente ejemplo crea una red virtual denominada vnet-1:
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Cree una configuración de subred con New-AzVirtualNetworkSubnetConfig y escríbala en la red virtual con Set-AzVirtualNetwork. El siguiente ejemplo agrega una subred denominada subnet-1 a la red virtual y le asocia el grupo de seguridad de red nsg-1:
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
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 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
Creación de grupos de seguridad de aplicaciones
Un grupo de seguridad de aplicaciones (ASG) permite agrupar servidores con funciones similares, como servidores web.
En el cuadro de búsqueda que aparece en la parte superior del portal, escriba Grupo de seguridad de aplicaciones. Seleccione Grupos de seguridad de aplicaciones en los resultados de la búsqueda.
Seleccione + Create (+ Crear).
En la pestaña Aspectos básicos de Crear un grupo de seguridad de aplicación, escriba o seleccione esta información:
| Configuración |
Value |
|
Detalles del proyecto |
|
| Suscripción |
Seleccione su suscripción. |
| Grupo de recursos |
Seleccione test-rg. |
|
Detalles de instancia |
|
| Nombre |
Escriba asg-web. |
| Región |
Seleccione Oeste de EE. UU. 2. |
Seleccione Revisar + crear.
Seleccione + Create (+ Crear).
Repita los pasos anteriores, pero especifique los valores siguientes:
| Configuración |
Value |
|
Detalles del proyecto |
|
| Suscripción |
Seleccione su suscripción. |
| Grupo de recursos |
Seleccione test-rg. |
|
Detalles de instancia |
|
| Nombre |
Escriba asg-mgmt. |
| Región |
Seleccione Oeste de EE. UU. 2. |
Seleccione Revisar + crear.
Seleccione Crear.
Cree un grupo de seguridad de aplicaciones con New-AzApplicationSecurityGroup. 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.
$web = @{
ResourceGroupName = "test-rg"
Name = "asg-web"
Location = "westus2"
}
$webAsg = New-AzApplicationSecurityGroup @web
$mgmt = @{
ResourceGroupName = "test-rg"
Name = "asg-mgmt"
Location = "westus2"
}
$mgmtAsg = New-AzApplicationSecurityGroup @mgmt
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 \
--location westus2
az network asg create \
--resource-group test-rg \
--name asg-mgmt \
--location westus2
Crear un grupo de seguridad de red
Un grupo de seguridad de red (NSG) protege el tráfico de red de una red virtual.
En el cuadro de búsqueda que aparece en la parte superior del portal, escriba Grupo de seguridad de red. En los resultados de la búsqueda, seleccione Grupos de seguridad de red.
Nota:
En los resultados de la búsqueda de grupos de seguridad de red, es posible que vea Grupos de seguridad de red (clásico). Seleccione Grupos de seguridad de red.
Seleccione + Create (+ Crear).
En la pestaña Aspectos básicos de Crear grupo de seguridad de red, escriba o seleccione esta información:
| Configuración |
Value |
|
Detalles del proyecto |
|
| Suscripción |
Seleccione su suscripción. |
| Grupo de recursos |
Seleccione test-rg. |
|
Detalles de instancia |
|
| Nombre |
Escriba nsg-1. |
| Ubicación |
Seleccione Oeste de EE. UU. 2. |
Seleccione Revisar + crear.
Seleccione Crear.
Cree un grupo de seguridad de red con New-AzNetworkSecurityGroup. En el ejemplo siguiente, se crea un grupo de seguridad de red denominado nsg-1:
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
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
Asociación del grupo de seguridad de red a la subred
En esta sección, asociará el grupo de seguridad de red con la subred de la red virtual que creó anteriormente.
En el cuadro de búsqueda que aparece en la parte superior del portal, escriba Grupo de seguridad de red. En los resultados de la búsqueda, seleccione Grupos de seguridad de red.
Seleccione nsg-1.
Seleccione Subredes en la sección Configuración de nsg-1.
En la página Subredes, seleccione +Asociar:
En Asociar subred, seleccione vnet-1 (test-rg) en Red virtual.
Seleccione subnet-1 en Subred y, luego, seleccione Aceptar.
Use Get-AzVirtualNetwork para recuperar el objeto de red virtual y, a continuación, use Set-AzVirtualNetworkSubnetConfig para asociar el grupo de seguridad de red a la subred. En el ejemplo siguiente se recupera el objeto de red virtual y se actualiza la configuración de subred para asociar el grupo de seguridad de red:
# Retrieve the virtual network
$vnet = Get-AzVirtualNetwork -Name "vnet-1" -ResourceGroupName "test-rg"
# Update the subnet configuration to associate the network security group
$subnetConfigParams = @{
VirtualNetwork = $vnet
Name = "subnet-1"
AddressPrefix = $vnet.Subnets[0].AddressPrefix
NetworkSecurityGroup = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
# Update the virtual network with the new subnet configuration
$vnet | Set-AzVirtualNetwork
Para asociar la subred al grupo de seguridad de red, use az network vnet subnet update. En el ejemplo siguiente se asocia el grupo de seguridad de red nsg-1 con la subred subnet-1:
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-1 \
--name subnet-1 \
--network-security-group nsg-1
Creación de reglas de seguridad
Seleccione Reglas de seguridad de entrada en la sección Configuración de nsg-1.
En la página Reglas de seguridad de entrada, seleccione +Agregar.
Cree una regla de seguridad que permita el puerto 80 al grupo de seguridad de aplicaciones asg-web . En la página Agregar regla de seguridad de entrada, especifique o seleccione los siguientes datos:
| Configuración |
Value |
| Fuente |
Deje el valor predeterminado, Cualquiera. |
| Intervalos de puertos de origen |
Deje el valor predeterminado de (*). |
| Destino |
Seleccione Grupo de seguridad de aplicación. |
| Grupos de seguridad de aplicaciones de destino |
Seleccione asg-web. |
| Servicio |
Deje el valor predeterminado, Personalizado. |
| Intervalos de puertos de destino |
Escriba 80. |
| Protocolo |
seleccione TCP. |
| Acción |
Deje el valor predeterminado, Permitir. |
| Prioridad |
Deje el valor predeterminado, 100. |
| Nombre |
Escriba allow-http-web. |
Seleccione Agregar.
Complete los pasos anteriores con la siguiente información:
| Configuración |
Value |
| Fuente |
Deje el valor predeterminado, Cualquiera. |
| Intervalos de puertos de origen |
Deje el valor predeterminado de (*). |
| Destino |
Seleccione Grupo de seguridad de aplicación. |
| Grupo de seguridad de aplicación de destino |
Seleccione asg-mgmt. |
| Servicio |
Deje el valor predeterminado, Personalizado. |
| Intervalos de puertos de destino |
Escriba 8080. |
| Protocolo |
seleccione TCP. |
| Acción |
Deje el valor predeterminado, Permitir. |
| Prioridad |
Deje el valor predeterminado, 110. |
| Nombre |
Escriba allow-8080-mgmt. |
Seleccione Agregar.
Cree una regla de seguridad con New-AzNetworkSecurityRuleConfig. En el ejemplo siguiente se crea una regla que permite el tráfico entrante desde Internet al grupo de seguridad de aplicaciones asg-web a través del puerto 80:
$webAsgParams = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$webAsg = Get-AzApplicationSecurityGroup @webAsgParams
$webRuleParams = @{
Name = "Allow-HTTP-Web"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 100
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $webAsg.id
DestinationPortRange = 80
}
$webRule = New-AzNetworkSecurityRuleConfig @webRuleParams
En el ejemplo siguiente se crea una regla que permite el tráfico entrante desde Internet al grupo de seguridad de aplicaciones asg-mgmt a través del puerto 8080:
$mgmtAsgParams = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtAsg = Get-AzApplicationSecurityGroup @mgmtAsgParams
$mgmtRuleParams = @{
Name = "Allow-8080-Mgmt"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 110
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $mgmtAsg.id
DestinationPortRange = 8080
}
$mgmtRule = New-AzNetworkSecurityRuleConfig @mgmtRuleParams
Use Get-AzNetworkSecurityGroup para recuperar el grupo de seguridad de red existente y, a continuación, agregue las nuevas reglas con el operador +=. Por último, actualice el grupo de seguridad de red con Set-AzNetworkSecurityGroup:
# Retrieve the existing network security group
$nsg = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
# Add the new rules to the security group
$nsg.SecurityRules += $webRule
$nsg.SecurityRules += $mgmtRule
# Update the network security group with the new rules
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
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 a través del puerto 80:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-HTTP-Web \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-web" \
--destination-port-range 80
En el ejemplo siguiente se crea una regla que permite el tráfico entrante desde Internet al grupo de seguridad de aplicaciones asg-mgmt a través del puerto 8080:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-8080-Mgmt \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 110 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-mgmt" \
--destination-port-range 8080
Creación de máquinas virtuales
Cree dos máquinas virtuales (VM) en la red virtual.
En el portal, busque y seleccione Máquinas virtuales.
En Máquinas virtuales, seleccione + Crear y, después, Máquina virtual.
En Crear una máquina virtual, escriba o seleccione los datos siguientes en la pestaña Conceptos básicos:
| Configuración |
Value |
|
Detalles del proyecto |
|
| Suscripción |
Seleccione su suscripción. |
| Grupo de recursos |
Seleccione test-rg. |
|
Detalles de instancia |
|
| Nombre de la máquina virtual |
Escriba vm-web. |
| Región |
Seleccione (EE. UU.) Oeste de EE. UU. 2. |
| Opciones de disponibilidad |
Deje el valor predeterminado No se requiere redundancia de la infraestructura. |
| Tipo de seguridad |
Seleccione Estándar. |
| Imagen |
Seleccione Ubuntu Server 24.04 LTS: x64 Gen2. |
| Instancia de Azure Spot |
Deje esta casilla desactivada, tal y como está de forma predeterminada. |
| Tamaño |
Seleccione un tamaño. |
|
Cuenta de administrador |
|
| Tipo de autenticación |
Seleccione Clave pública SSH. |
| Nombre de usuario |
escriba usuarioazure. |
| Origen de la clave pública SSH |
Seleccione Generar un par de claves nuevo. |
| Nombre del par de claves |
Escriba vm-web-key. |
|
Reglas de puerto de entrada |
|
| Selección de puertos de entrada |
Seleccione Ninguno. |
Seleccione Siguiente: Discos y, luego, Siguiente: Redes.
En la pestaña Redes, escriba o seleccione la siguiente información:
| Configuración |
Value |
|
Interfaz de red |
|
| Red de área virtual |
Seleccione vnet-1. |
| Subred |
Seleccione subnet-1 (10.0.0.0/24). |
| Dirección IP pública |
Deje el valor predeterminado, que es una nueva dirección IP pública. |
| Grupo de seguridad de red de NIC |
Seleccione Ninguno. |
Seleccione la pestaña Revisar y crear o el botón azul Revisar y crear en la parte inferior de la página.
Seleccione Crear.
Cuando se le pida que genere un nuevo par de claves, seleccione Descargar clave privada y crear recurso. La clave privada se descarga en el equipo local. La máquina virtual puede tardar unos minutos en implementarse.
Repita los pasos anteriores para crear una segunda máquina virtual denominada vm-mgmt con el nombre de par de claves vm-mgmt-key.
Antes de crear las máquinas virtuales, recupere el objeto de red virtual con la subred mediante Get-AzVirtualNetwork:
$virtualNetworkParams = @{
Name = "vnet-1"
ResourceGroupName = "test-rg"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
Cree una dirección IP pública para cada máquina virtual con New-AzPublicIpAddress:
$publicIpWebParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-web"
}
$publicIpWeb = New-AzPublicIpAddress @publicIpWebParams
$publicIpMgmtParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-mgmt"
}
$publicIpMgmt = New-AzPublicIpAddress @publicIpMgmtParams
Cree dos interfaces de red con New-AzNetworkInterface y asigne una dirección IP pública a la interfaz de red. En el ejemplo siguiente se crea una interfaz de red, se asocia la dirección IP pública public-ip-vm-web a ella.
$webNicParams = @{
Location = "westus2"
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpWeb.Id
}
$webNic = New-AzNetworkInterface @webNicParams
En el ejemplo siguiente se crea una interfaz de red, se asocia la dirección IP pública public-ip-vm-mgmt a ella.
$mgmtNicParams = @{
Location = "westus2"
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpMgmt.Id
}
$mgmtNic = New-AzNetworkInterface @mgmtNicParams
Cree dos máquinas virtuales en la red virtual para que pueda validar el filtrado de tráfico en un paso posterior.
Genere claves SSH en Azure con New-AzSshKey. En el ejemplo siguiente se crean recursos de clave SSH para cada máquina virtual:
# Create SSH key for vm-web
$webSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-web-key"
}
New-AzSshKey @webSshKeyParams
# Create SSH key for vm-mgmt
$mgmtSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-mgmt-key"
}
New-AzSshKey @mgmtSshKeyParams
Cree una configuración de máquina virtual con New-AzVMConfig y, a continuación, cree la máquina virtual con New-AzVM. En el ejemplo siguiente se crea una máquina virtual que actúa como un servidor web. La opción -AsJob crea la máquina virtual en segundo plano, por lo tanto, puede continuar con el siguiente paso:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-web-key" -ResourceGroupName "test-rg"
$webVmConfigParams = @{
VMName = "vm-web"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$webVmConfig = New-AzVMConfig @webVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-web" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $webNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$webVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $webVmConfig
}
New-AzVM @webVmParams -AsJob
Cree una máquina virtual para que actúe como un servidor de administración:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-mgmt-key" -ResourceGroupName "test-rg"
$mgmtVmConfigParams = @{
VMName = "vm-mgmt"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$mgmtVmConfig = New-AzVMConfig @mgmtVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-mgmt" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $mgmtNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$mgmtVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $mgmtVmConfig
}
New-AzVM @mgmtVmParams
La creación de la máquina virtual tarda algunos minutos. No continúe con el paso siguiente hasta que Azure finalice la creación de la máquina virtual.
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 --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 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:
az vm create \
--resource-group test-rg \
--name vm-web \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
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:
az vm create \
--resource-group test-rg \
--name vm-mgmt \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
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.
Asociación de interfaces de red a un ASG
Cuando se crearon las máquinas virtuales, Azure creó una interfaz de red para cada una y la asoció a estas.
Agregue la interfaz de red de cada máquina virtual a uno de los grupos de seguridad de aplicaciones que creó anteriormente:
En el cuadro de búsqueda que aparece en la parte superior del portal, escriba Máquina virtual. Seleccione Máquinas virtuales en los resultados de búsqueda y, a continuación, seleccione vm-web.
Seleccione Grupos de seguridad de aplicaciones en la sección Redes de vm-web.
Seleccione Agregar grupos de seguridad de aplicaciones y, después, en la pestaña Agregar grupos de seguridad de aplicaciones, seleccione asg-web. Por último, seleccione Agregar.
Repita los pasos anteriores para vm-mgmt y seleccione asg-mgmt en la pestaña Agregar grupos de seguridad de aplicaciones.
Use Get-AzNetworkInterface para recuperar la interfaz de red de la máquina virtual y, a continuación, use Get-AzApplicationSecurityGroup para recuperar el grupo de seguridad de aplicaciones. Por último, use Set-AzNetworkInterface para asociar el grupo de seguridad de aplicaciones a la interfaz de red. En el ejemplo siguiente se asocia el grupo de seguridad de aplicaciones asg-web a la interfaz de red vm-web-nic:
$params1 = @{
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Repita el comando para asociar el grupo de seguridad de aplicaciones asg-mgmt con la interfaz de red vm-mgmt-nic.
$params1 = @{
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Use az network nic update para asociar la interfaz de red con el grupo de seguridad de aplicaciones. En el ejemplo siguiente se asocia el grupo de seguridad de aplicaciones asg-web a la interfaz de red vm-web-nic:
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-web --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-web \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-web
Repita el comando para asociar el grupo de seguridad de aplicaciones asg-mgmt con la interfaz de red vm-mgmt-nic.
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-mgmt --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-mgmt \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-mgmt
Probar los filtros de tráfico
En el cuadro de búsqueda que aparece en la parte superior del portal, escriba Máquina virtual. En los resultados de la búsqueda, seleccione Máquinas virtuales.
Seleccione vm-web.
Seleccione Ejecutar comando en la sección Operaciones .
Seleccione Run Shell Script.
En el panel Ejecutar script de comandos , escriba los siguientes comandos:
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Seleccione Ejecutar. Espere a que el script se complete correctamente.
En la página Información general de vm-web, anote la dirección IP pública de la máquina virtual.
Para confirmar que puede acceder al servidor web vm-web desde Internet en el puerto 80, abra un explorador de Internet en el equipo y vaya a http://<public-ip-address-from-previous-step>.
Verá la página predeterminada nginx, ya que el tráfico entrante de Internet al grupo de seguridad de aplicaciones asg-web está permitido a través del puerto 80.
La interfaz de red asociada a vm-web está asociada con el grupo de seguridad de aplicaciones asg-web y permite la conexión.
Intente acceder a vm-web en el puerto 443; para ello, vaya a https://<public-ip-address-vm-web> en el explorador. Se produce un error en la conexión o se agota el tiempo de espera porque la regla de seguridad de asg-web no permite el puerto 443 entrante desde Internet.
Ahora configure vm-mgmt con nginx en el puerto 8080. Seleccione vm-mgmt en la página Máquinas virtuales .
Seleccione Ejecutar comando en la sección Operaciones .
Seleccione Run Shell Script.
En el panel Ejecutar script de comandos , escriba los siguientes comandos para instalar nginx en el puerto 8080:
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
Seleccione Ejecutar. Espere a que el script se complete correctamente.
En la página Información general de vm-mgmt, anote la dirección IP pública de la máquina virtual.
Para confirmar que puede acceder al servidor web vm-mgmt desde Internet en el puerto 8080, abra un explorador de Internet en el equipo y vaya a http://<public-ip-address-vm-mgmt>:8080.
Verás la página predeterminada de nginx porque está permitido el tráfico entrante de Internet al grupo de seguridad de aplicaciones asg-mgmt a través del puerto 8080.
Intente acceder a vm-mgmt en el puerto 80; para ello, vaya a http://<public-ip-address-vm-mgmt> en el explorador. Se produce un error en la conexión o se agota el tiempo de espera porque no hay ninguna regla de seguridad que permita el acceso a través del puerto 80 al grupo de seguridad de aplicaciones asg-mgmt.
La interfaz de red asociada a vm-web está asociada con el grupo de seguridad de aplicaciones asg-web y permite la conexión.
Instale nginx en vm-web mediante Invoke-AzVMRunCommand:
$webInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-web"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
"@
}
Invoke-AzVMRunCommand @webInstallParams
El comando puede tardar unos minutos en completarse. Después de finalizar, pruebe el acceso web en vm-web.
Obtenga la dirección IP pública de vm-web:
$webIPParams = @{
Name = "public-ip-vm-web"
ResourceGroupName = "test-rg"
}
$webIP = Get-AzPublicIpAddress @webIPParams
Write-Host "vm-web IP: $($webIP.IpAddress)"
Para confirmar que puede acceder al servidor web vm-web desde Internet en el puerto 80, abra un explorador de Internet en el equipo y vaya a http://<vm-web-ip-address>.
Verá la página predeterminada de nginx porque el tráfico entrante de Internet al grupo de seguridad de aplicaciones asg-web está permitido a través del puerto 80. La interfaz de red conectada a la máquina virtual vm-web está en este grupo.
Intente acceder a vm-web en el puerto 443; para ello, vaya a https://<vm-web-ip-address> en el explorador. Se produce un error en la conexión o se agota el tiempo de espera porque la regla de seguridad de asg-web no permite el puerto 443 entrante desde Internet.
Ahora instale nginx en el puerto 8080 en vm-mgmt:
$mgmtInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-mgmt"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<'EOF'
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
"@
}
Invoke-AzVMRunCommand @mgmtInstallParams
Obtenga la dirección IP pública de vm-mgmt:
$mgmtIPParams = @{
Name = "public-ip-vm-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtIP = Get-AzPublicIpAddress @mgmtIPParams
Write-Host "vm-mgmt IP: $($mgmtIP.IpAddress)"
Para confirmar que puede acceder al servidor web vm-mgmt desde Internet en el puerto 8080, abra un explorador de Internet en el equipo y vaya a http://<vm-mgmt-ip-address>:8080.
Verá la página predeterminada de nginx porque el tráfico entrante de Internet al grupo de seguridad de aplicaciones asg-mgmt se permite a través del puerto 8080.
Intente acceder a vm-mgmt en el puerto 80; para ello, vaya a http://<vm-mgmt-ip-address> en el explorador. Se produce un error en la conexión o se agota el tiempo de espera porque no hay ninguna regla de seguridad que permita el acceso a través del puerto 80 al grupo de seguridad de aplicaciones asg-mgmt.
Instale nginx en vm-web mediante az vm run-command invoke:
az vm run-command invoke \
--resource-group test-rg \
--name vm-web \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && sudo apt-get install -y nginx && sudo systemctl enable nginx && sudo systemctl start nginx"
Obtenga la dirección IP pública de vm-web:
webIP=$(az vm show --show-details --resource-group test-rg --name vm-web --query publicIps --output tsv)
echo "vm-web IP: $webIP"
Para confirmar que puede acceder al servidor web vm-web desde Internet en el puerto 80, use curl:
curl http://$webIP
La conexión se realiza correctamente porque el grupo de seguridad de aplicaciones asg-web, en el que se encuentra la interfaz de red conectada a la máquina virtual vm-web, permite migrar al puerto 80 desde Internet.
Intente acceder a vm-web en el puerto 443:
curl -k https://$webIP
Se produce un error en la conexión o se agota el tiempo de espera porque la regla de seguridad de asg-web no permite el puerto 443 entrante desde Internet.
Ahora instale nginx en el puerto 8080 en vm-mgmt:
az vm run-command invoke \
--resource-group test-rg \
--name vm-mgmt \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && \
sudo apt-get install -y nginx && \
sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \\\$uri \\\$uri/ =404;
}
}
EOF' && \
sudo systemctl restart nginx"
Obtenga la dirección IP pública de vm-mgmt:
mgmtIP=$(az vm show --show-details --resource-group test-rg --name vm-mgmt --query publicIps --output tsv)
echo "vm-mgmt IP: $mgmtIP"
Para confirmar que puede acceder al servidor web vm-mgmt desde Internet en el puerto 8080, use curl:
curl http://$mgmtIP:8080
La conexión se realiza correctamente porque el tráfico entrante de Internet al grupo de seguridad de aplicaciones asg-mgmt se permite a través del puerto 8080.
Intente acceder a vm-mgmt en el puerto 80:
curl http://$mgmtIP
Se produce un error en la conexión o se agota el tiempo de espera porque no hay ninguna regla de seguridad que permita el acceso a través del puerto 80 al grupo de seguridad de aplicaciones asg-mgmt.
Cuando termine de usar los recursos que creó, puede eliminar el grupo de recursos y todos sus recursos.
En Azure Portal, busque y seleccione Grupos de recursos.
En la página Grupos de recursos, seleccione el grupo de recursos test-rg.
En la página test-rg, elija Eliminar grupo de recursos.
Escriba test-rg en Introducir nombre del grupo de recursos para confirmar la eliminación y, luego, seleccione Eliminar.
Cuando ya no lo necesite, puede usar Remove-AzResourceGroup para quitar el grupo de recursos y todos los recursos que contiene:
$params = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @params
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 tutorial, hizo lo siguiente:
- Creado un grupo de seguridad de red y lo ha asociado a una subred de red virtual.
- Se crearon grupos de seguridad de aplicaciones para el tráfico web y de administración.
- Ha creado dos máquinas virtuales Linux con autenticación de clave SSH y asociadas sus interfaces de red con los grupos de seguridad de aplicaciones.
- Se instalaron servidores web nginx en ambas máquinas virtuales con configuraciones de puerto diferentes.
- Se ha probado el filtrado de red del grupo de seguridad de aplicaciones mediante la demostración de que vm-web permite el puerto 80 (HTTP), pero deniega el puerto 443, mientras que vm-mgmt permite el puerto 8080 pero deniega el puerto 80 (HTTP).
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 aprender a crear una tabla de rutas, avance al siguiente tutorial.