Implementación y configuración de Azure Firewall en una red híbrida con Azure PowerShell
Cuando conecta la red local a una red virtual de Azure para crear una red híbrida, la capacidad de controlar el acceso a los recursos de la red de Azure es parte importante de un plan de seguridad global.
Puede usar Azure Firewall para controlar el acceso de red en una red híbrida con reglas que definen el tráfico de red que se permite o que se rechaza.
En este artículo se crearán tres redes virtuales:
- VNet-Hub: el firewall está en esta red virtual.
- VNet-Spoke: la red virtual de radio representa la carga de trabajo ubicada en Azure.
- VNet-Onprem: la red virtual local representa una red local. En una implementación real, puede conectarse a ella mediante una conexión de red privada virtual (VPN) o una conexión de Azure ExpressRoute. Para simplificar, este artículo usa una conexión de puerta de enlace de VPN y una red virtual ubicada en Azure para representar una red local.
Si quiere usar Azure Portal en su lugar para completar los procedimientos de este artículo, consulte Implementación y configuración de Azure Firewall en una red híbrida mediante Azure Portal.
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.
Requisitos previos
En este artículo es necesario ejecutar PowerShell en local. Debe tener instalados el módulo de Azure PowerShell. Ejecute Get-Module -ListAvailable Az
para encontrar la versión. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell. Después de verificar la versión de PowerShell, ejecute Login-AzAccount
para crear una conexión con Azure.
Hay tres requisitos clave para que este escenario funcione correctamente:
Una ruta definida por el usuario (UDR) en la subred de radio que apunte a la dirección IP de Azure Firewall como puerta de enlace predeterminada. La propagación de las rutas de puerta de enlace de red virtual se debe deshabilitar en esta tabla de rutas.
Una ruta definida por el usuario en la subred de la puerta de enlace del centro debe apuntar a la dirección IP del firewall como próximo salto para las redes de radio.
No se requiere ninguna UDR en la subred de Azure Firewall, ya que aprende rutas del Protocolo de puerta de enlace de borde (BGP).
Asegúrese de establecer
AllowGatewayTransit
cuando esté emparejando VNet-Hub a VNet-Spoke. EstablezcaUseRemoteGateways
cuando esté emparejando VNet-Spoke a VNet-Hub.
La sección Crear las rutas más adelante en este artículo muestra cómo crear estas rutas.
Nota:
Azure Firewall debe tener conectividad directa a Internet. Si la subred de AzureFirewallSubnet aprende una ruta predeterminada a la red local mediante BGP, debe configurar Azure Firewall en el modo de tunelización forzada. Si se trata de una instancia de Azure Firewall existente que no se puede volver a configurar en modo de tunelización forzada, se recomienda agregar una UDR 0.0.0.0/0 en la subred de AzureFirewallSubnet con el valor de NextHopType
establecido como Internet
para mantener la conectividad directa a Internet.
Para más información, consulte Tunelización forzada de Azure Firewall.
El tráfico entre redes virtuales emparejadas directamente se enruta directamente, aunque una ruta definida por el usuario apunte a Azure Firewall como puerta de enlace predeterminada. Para enviar tráfico de subred a subred al firewall en este escenario, una UDR debe contener el prefijo de red de la subred de destino de forma explícita en ambas subredes.
Para revisar la documentación de referencia de Azure PowerShell relacionada, consulte New-AzFirewall.
Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
Declaración de las variables
En el ejemplo siguiente se declaran las variables con los valores para este artículo. En algunos casos, puede que tenga que reemplazar algunos valores por los suyos propios para trabajar en su suscripción. Si es necesario, modifique las variables y después cópielas y péguelas en la consola de PowerShell.
$RG1 = "FW-Hybrid-Test"
$Location1 = "East US"
# Variables for the firewall hub virtual network
$VNetnameHub = "VNet-Hub"
$SNnameHub = "AzureFirewallSubnet"
$VNetHubPrefix = "10.5.0.0/16"
$SNHubPrefix = "10.5.0.0/24"
$SNGWHubPrefix = "10.5.1.0/24"
$GWHubName = "GW-hub"
$GWHubpipName = "VNet-Hub-GW-pip"
$GWIPconfNameHub = "GW-ipconf-hub"
$ConnectionNameHub = "hub-to-Onprem"
# Variables for the spoke virtual network
$VnetNameSpoke = "VNet-Spoke"
$SNnameSpoke = "SN-Workload"
$VNetSpokePrefix = "10.6.0.0/16"
$SNSpokePrefix = "10.6.0.0/24"
$SNSpokeGWPrefix = "10.6.1.0/24"
# Variables for the on-premises virtual network
$VNetnameOnprem = "Vnet-Onprem"
$SNNameOnprem = "SN-Corp"
$VNetOnpremPrefix = "192.168.0.0/16"
$SNOnpremPrefix = "192.168.1.0/24"
$SNGWOnpremPrefix = "192.168.2.0/24"
$GWOnpremName = "GW-Onprem"
$GWIPconfNameOnprem = "GW-ipconf-Onprem"
$ConnectionNameOnprem = "Onprem-to-hub"
$GWOnprempipName = "VNet-Onprem-GW-pip"
$SNnameGW = "GatewaySubnet"
Crear la red virtual del centro de firewall
En primer lugar, cree el grupo de recursos en el que se incluirán los recursos de este artículo:
New-AzResourceGroup -Name $RG1 -Location $Location1
Defina las subredes que se incluirán en la red virtual:
$FWsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameHub -AddressPrefix $SNHubPrefix
$GWsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNGWHubPrefix
Crear la red virtual del centro de firewall:
$VNetHub = New-AzVirtualNetwork -Name $VNetnameHub -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetHubPrefix -Subnet $FWsub,$GWsub
Solicite que se asigne una dirección IP pública a la puerta de enlace de VPN que creará para la red virtual. Observe que el valor de AllocationMethod
es Dynamic
. No puede especificar la dirección IP que desea usar. Se asigna dinámicamente a la puerta de enlace de VPN.
$gwpip1 = New-AzPublicIpAddress -Name $GWHubpipName -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Dynamic
Crear la red virtual de tipo hub-and-spoke
Defina las subredes que se incluirán en la red virtual de tipo hub-and-spoke:
$Spokesub = New-AzVirtualNetworkSubnetConfig -Name $SNnameSpoke -AddressPrefix $SNSpokePrefix
$GWsubSpoke = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNSpokeGWPrefix
Cree la red virtual de tipo hub-and-spoke:
$VNetSpoke = New-AzVirtualNetwork -Name $VnetNameSpoke -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetSpokePrefix -Subnet $Spokesub,$GWsubSpoke
Crear la red virtual local
Defina las subredes que se incluirán en la red virtual:
$Onpremsub = New-AzVirtualNetworkSubnetConfig -Name $SNNameOnprem -AddressPrefix $SNOnpremPrefix
$GWOnpremsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNGWOnpremPrefix
Crear la red virtual local:
$VNetOnprem = New-AzVirtualNetwork -Name $VNetnameOnprem -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetOnpremPrefix -Subnet $Onpremsub,$GWOnpremsub
Solicite que se asigne una dirección IP pública a la puerta de enlace que creará para la red virtual. Observe que el valor de AllocationMethod
es Dynamic
. No puede especificar la dirección IP que desea usar. Se asigna dinámicamente a la puerta de enlace.
$gwOnprempip = New-AzPublicIpAddress -Name $GWOnprempipName -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Dynamic
Configuración e implementación del firewall
Ahora, implemente el firewall en la red virtual del centro de conectividad:
# Get a public IP for the firewall
$FWpip = New-AzPublicIpAddress -Name "fw-pip" -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Static -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall -Name AzFW01 -ResourceGroupName $RG1 -Location $Location1 -VirtualNetworkName $VNetnameHub -PublicIpName fw-pip
#Save the firewall private IP address for future use
$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP
Configurar reglas de red:
$Rule1 = New-AzFirewallNetworkRule -Name "AllowWeb" -Protocol TCP -SourceAddress $SNOnpremPrefix `
-DestinationAddress $VNetSpokePrefix -DestinationPort 80
$Rule2 = New-AzFirewallNetworkRule -Name "AllowRDP" -Protocol TCP -SourceAddress $SNOnpremPrefix `
-DestinationAddress $VNetSpokePrefix -DestinationPort 3389
$Rule3 = New-AzFirewallNetworkRule -Name "AllowPing" -Protocol ICMP -SourceAddress $SNOnpremPrefix `
-DestinationAddress $VNetSpokePrefix -DestinationPort
$NetRuleCollection = New-AzFirewallNetworkRuleCollection -Name RCNet01 -Priority 100 `
-Rule $Rule1,$Rule2 -ActionType "Allow"
$Azfw.NetworkRuleCollections = $NetRuleCollection
Set-AzFirewall -AzureFirewall $Azfw
Creación y conexión de las puertas de enlace de VPN
Las redes virtuales de centro y local están conectadas mediante puertas de enlace VPN.
Creación de una puerta de enlace VPN para la red virtual de centro
Cree la configuración de la puerta de enlace de VPN para la red virtual del centro de conectividad. La configuración de la puerta de enlace de VPN define la subred y la dirección IP pública.
$vnet1 = Get-AzVirtualNetwork -Name $VNetnameHub -ResourceGroupName $RG1
$subnet1 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1
$gwipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfNameHub `
-Subnet $subnet1 -PublicIpAddress $gwpip1
Ahora, cree la puerta de enlace de VPN para la red virtual del centro de conectividad. Las configuraciones de red a red requieren un valor de VpnType
de RouteBased
. La creación de una puerta de enlace de VPN suele tardar 45 minutos o más, en función de la SKU que seleccione.
New-AzVirtualNetworkGateway -Name $GWHubName -ResourceGroupName $RG1 `
-Location $Location1 -IpConfigurations $gwipconf1 -GatewayType Vpn `
-VpnType RouteBased -GatewaySku basic
Creación de una puerta de enlace VPN para la red virtual local
Cree la configuración de la puerta de enlace de VPN para la red virtual local. La configuración de la puerta de enlace de VPN define la subred y la dirección IP pública.
$vnet2 = Get-AzVirtualNetwork -Name $VNetnameOnprem -ResourceGroupName $RG1
$subnet2 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet2
$gwipconf2 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfNameOnprem `
-Subnet $subnet2 -PublicIpAddress $gwOnprempip
Ahora, cree la puerta de enlace de VPN para la red virtual local. Las configuraciones de red a red requieren un valor de VpnType
de RouteBased
. La creación de una puerta de enlace de VPN suele tardar 45 minutos o más, en función de la SKU que seleccione.
New-AzVirtualNetworkGateway -Name $GWOnpremName -ResourceGroupName $RG1 `
-Location $Location1 -IpConfigurations $gwipconf2 -GatewayType Vpn `
-VpnType RouteBased -GatewaySku basic
Creación de las conexiones
Cree las conexiones de VPN entre las puertas de enlace del centro de conectividad y locales.
Obtención de las puertas de enlace de VPN
$vnetHubgw = Get-AzVirtualNetworkGateway -Name $GWHubName -ResourceGroupName $RG1
$vnetOnpremgw = Get-AzVirtualNetworkGateway -Name $GWOnpremName -ResourceGroupName $RG1
Creación de las conexiones
En este paso va a crear la conexión entre la red virtual de centro y la red virtual local. Los ejemplos muestran una clave compartida, pero puede usar sus propios valores para la clave compartida. Lo importante es que la clave compartida coincida en ambas conexiones. Se tardará unos momentos en terminar de crear la conexión.
New-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1 `
-VirtualNetworkGateway1 $vnetHubgw -VirtualNetworkGateway2 $vnetOnpremgw -Location $Location1 `
-ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'
Cree la conexión de red virtual desde el entorno local al centro de conectividad. Este paso es similar al anterior, salvo que se crea la conexión desde VNet-Onprem a VNet-Hub. Asegúrese de que coincidan las claves compartidas. Después de unos minutos, se establece la conexión.
New-AzVirtualNetworkGatewayConnection -Name $ConnectionNameOnprem -ResourceGroupName $RG1 `
-VirtualNetworkGateway1 $vnetOnpremgw -VirtualNetworkGateway2 $vnetHubgw -Location $Location1 `
-ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'
Comprobación de la conexión
Puede comprobar una conexión correcta mediante el cmdlet Get-AzVirtualNetworkGatewayConnection
, con o sin -Debug
.
Use el siguiente ejemplo de cmdlet, pero configure los valores para que coincidan con los suyos propios. Si se le solicita, seleccione A
para ejecutar All
. En el ejemplo, -Name
es el nombre de la conexión que desea probar.
Get-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1
Cuando el cmdlet termine, consulte los valores. En el ejemplo siguiente se muestra un estado de conexión de Connected
, junto con bytes de entrada y salida:
"connectionStatus": "Connected",
"ingressBytesTransferred": 33509044,
"egressBytesTransferred": 4142431
Emparejar las redes virtuales de tipo hub-and-spoke
Ahora, empareje las redes virtuales de tipo hub-and-spoke:
# Peer hub to spoke
Add-AzVirtualNetworkPeering -Name HubtoSpoke -VirtualNetwork $VNetHub -RemoteVirtualNetworkId $VNetSpoke.Id -AllowGatewayTransit
# Peer spoke to hub
Add-AzVirtualNetworkPeering -Name SpoketoHub -VirtualNetwork $VNetSpoke -RemoteVirtualNetworkId $VNetHub.Id -AllowForwardedTraffic -UseRemoteGateways
Creación de las rutas
Use los siguientes comandos para crear estas rutas:
- Una ruta desde la subred de puerta de enlace de concentrador a la subred de radio mediante la dirección IP del firewall.
- Una ruta predeterminada desde la subred de radio mediante la dirección IP del firewall.
#Create a route table
$routeTableHubSpoke = New-AzRouteTable `
-Name 'UDR-Hub-Spoke' `
-ResourceGroupName $RG1 `
-location $Location1
#Create a route
Get-AzRouteTable `
-ResourceGroupName $RG1 `
-Name UDR-Hub-Spoke `
| Add-AzRouteConfig `
-Name "ToSpoke" `
-AddressPrefix $VNetSpokePrefix `
-NextHopType "VirtualAppliance" `
-NextHopIpAddress $AzfwPrivateIP `
| Set-AzRouteTable
#Associate the route table to the subnet
Set-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $VNetHub `
-Name $SNnameGW `
-AddressPrefix $SNGWHubPrefix `
-RouteTable $routeTableHubSpoke | `
Set-AzVirtualNetwork
#Now, create the default route
#Create a table, with BGP route propagation disabled. The property is now called "Virtual network gateway route propagation," but the API still refers to the parameter as "DisableBgpRoutePropagation."
$routeTableSpokeDG = New-AzRouteTable `
-Name 'UDR-DG' `
-ResourceGroupName $RG1 `
-location $Location1 `
-DisableBgpRoutePropagation
#Create a route
Get-AzRouteTable `
-ResourceGroupName $RG1 `
-Name UDR-DG `
| Add-AzRouteConfig `
-Name "ToFirewall" `
-AddressPrefix 0.0.0.0/0 `
-NextHopType "VirtualAppliance" `
-NextHopIpAddress $AzfwPrivateIP `
| Set-AzRouteTable
#Associate the route table to the subnet
Set-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $VNetSpoke `
-Name $SNnameSpoke `
-AddressPrefix $SNSpokePrefix `
-RouteTable $routeTableSpokeDG | `
Set-AzVirtualNetwork
Creación de máquinas virtuales
Cree la carga de trabajo de radio y las máquinas virtuales locales, y colóquelas en las subredes adecuadas.
Creación de la máquina virtual de cargas de trabajo
Cree una máquina virtual en la red virtual de radio que ejecuta Internet Information Services (IIS), no tiene ninguna dirección IP pública y permite pings. Cuando se le solicite, escriba un nombre de usuario y una contraseña para la máquina virtual.
# Create an inbound network security group rule for ports 3389 and 80
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name Allow-RDP -Protocol Tcp `
-Direction Inbound -Priority 200 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix $SNSpokePrefix -DestinationPortRange 3389 -Access Allow
$nsgRuleWeb = New-AzNetworkSecurityRuleConfig -Name Allow-web -Protocol Tcp `
-Direction Inbound -Priority 202 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix $SNSpokePrefix -DestinationPortRange 80 -Access Allow
# Create a network security group
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $RG1 -Location $Location1 -Name NSG-Spoke02 -SecurityRules $nsgRuleRDP,$nsgRuleWeb
#Create the NIC
$NIC = New-AzNetworkInterface -Name spoke-01 -ResourceGroupName $RG1 -Location $Location1 -SubnetId $VnetSpoke.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id
#Define the virtual machine
$VirtualMachine = New-AzVMConfig -VMName VM-Spoke-01 -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Spoke-01 -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2016-Datacenter' -Version latest
#Create the virtual machine
New-AzVM -ResourceGroupName $RG1 -Location $Location1 -VM $VirtualMachine -Verbose
#Install IIS on the VM
Set-AzVMExtension `
-ResourceGroupName $RG1 `
-ExtensionName IIS `
-VMName VM-Spoke-01 `
-Publisher Microsoft.Compute `
-ExtensionType CustomScriptExtension `
-TypeHandlerVersion 1.4 `
-SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server"}' `
-Location $Location1
#Create a host firewall rule to allow pings in
Set-AzVMExtension `
-ResourceGroupName $RG1 `
-ExtensionName IIS `
-VMName VM-Spoke-01 `
-Publisher Microsoft.Compute `
-ExtensionType CustomScriptExtension `
-TypeHandlerVersion 1.4 `
-SettingString '{"commandToExecute":"powershell New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4"}' `
-Location $Location1
Creación de la máquina virtual local
Cree una máquina virtual sencilla que pueda usar para conectarse a través del acceso remoto a la dirección IP pública. Desde allí, puede conectarse al servidor local a través del firewall. Cuando se le solicite, escriba un nombre de usuario y una contraseña para la máquina virtual.
New-AzVm `
-ResourceGroupName $RG1 `
-Name "VM-Onprem" `
-Location $Location1 `
-VirtualNetworkName $VNetnameOnprem `
-SubnetName $SNNameOnprem `
-OpenPorts 3389 `
-Size "Standard_DS2"
Nota:
Azure proporciona una dirección IP de acceso de salida predeterminada para las máquinas virtuales que no tienen asignada una dirección IP pública o están en el grupo back-end de un equilibrador de carga de Azure básico interno. El mecanismo de dirección IP de acceso de salida predeterminado proporciona una dirección IP de salida que no se puede configurar.
La dirección IP de acceso de salida predeterminada está deshabilitada cuando se produce uno de los siguientes eventos:
- Se asigna una dirección IP pública a la máquina virtual.
- La máquina virtual se coloca en el grupo back-end de un equilibrador de carga estándar, con o sin reglas de salida.
- Se asigna un recurso de Azure NAT Gateway a la subred de la máquina virtual.
Las máquinas virtuales creadas mediante conjuntos de escalado de máquinas virtuales en modo de orquestación flexible no tienen acceso de salida predeterminado.
Para más información sobre las conexiones de salida en Azure, vea Acceso de salida predeterminado en Azure y Uso de traducción de direcciones de red (SNAT) de origen para conexiones de salida.
Probar el firewall
Obtenga y anote la dirección IP privada de la máquina virtual de vm-spoke-01:
$NIC.IpConfigurations.privateipaddress
En Azure Portal, conéctese a la máquina virtual VM-Onprem.
Abra un símbolo del sistema de Windows PowerShell en VM-Onprem y haga ping a la dirección IP privada de VM-spoke-01. Obtendrá una respuesta.
Abra un explorador web en VM-Onprem y vaya a
http://<VM-spoke-01 private IP>
. La página predeterminada de IIS debería abrirse.Desde VM-Onprem, abra una conexión de acceso remoto a VM-spoke-01 en la dirección IP privada. Se realizará la conexión y podrá iniciar sesión con el nombre de usuario y la contraseña elegidos.
Ahora que ha comprobado que las reglas de firewall funcionan, puede hacer lo siguiente:
- Haga ping al servidor en la red virtual de radio.
- Vaya al servidor web en la red virtual de radio.
- Conéctese al servidor de la red virtual de radio mediante RDP.
A continuación, ejecute el siguiente script para cambiar la acción de la colección de reglas de red de firewall a Deny
:
$rcNet = $azfw.GetNetworkRuleCollectionByName("RCNet01")
$rcNet.action.type = "Deny"
Set-AzFirewall -AzureFirewall $azfw
Cierre las conexiones de acceso remoto existentes. Vuelva a ejecutar las pruebas para probar las reglas modificadas. Esta vez, todas producirán un error.
Limpieza de recursos
Puede mantener los recursos del firewall para el siguiente tutorial. Si ya no los necesita, elimine el grupo de recursos FW-Hybrid-Test para eliminar todos los recursos relacionados con el firewall.