Implementación y configuración de una directiva de Azure Firewall mediante Azure PowerShell

El control del acceso de red saliente es una parte importante de un plan de seguridad de red de ámbito general. Por ejemplo, es posible que desee limitar el acceso a sitios web. O bien, que desee limitar las direcciones IP de salida y los puertos a los que se puede acceder.

Una manera de controlar el acceso de red saliente desde una subred de Azure es con Azure Firewall y una directiva de firewall. Con Azure Firewall, puede configurar:

  • Reglas de aplicación que definen los nombres de dominio completos (FQDN) a los que se puede acceder desde una subred.
  • Reglas de red que definen la dirección de origen, el protocolo, el puerto de destino y la dirección de destino.

El tráfico está sujeto a las reglas de firewall configuradas cuando enruta el tráfico al firewall como puerta de enlace predeterminada de la subred.

En este artículo, creará una red virtual única simplificada con tres subredes para facilitar la implementación. Para las implementaciones de producción, se recomienda un modelo de concentrador y radio, en el que el firewall está en su propia red virtual. Los servidores de las cargas de trabajo están en redes virtuales emparejadas en la misma región con una o varias subredes.

  • AzureFirewallSubnet: el firewall está en esta subred.
  • Workload-SN: el servidor de carga de trabajo está en esta subred. El tráfico de red de esta subred va a través del firewall.
  • AzureBastionSubnet : la subred que se usa para Azure Bastion, que se usa para conectarse al servidor de carga de trabajo.

Para más información sobre Azure Bastion, consulte ¿Qué es Azure Bastion?

Importante

Los precios por hora comienzan desde el momento en que se implementa Bastion, independientemente del uso de datos salientes. Para más información, consulte Precios y SKU. Si va a implementar Bastion como parte de un tutorial o prueba, se recomienda eliminar este recurso una vez que haya terminado de usarlo.

Tutorial network infrastructure

En este artículo aprenderá a:

  • Configurar un entorno de red de prueba
  • Implementar un firewall
  • Crear una ruta predeterminada
  • Crear una directiva de firewall
  • Configurar una regla de aplicación para permitir el acceso a www.google.com
  • Configuración de una regla de red para permitir el acceso a los servidores DNS externos
  • Probar el firewall

Si lo prefiere, puede realizar los pasos de este procedimiento mediante Azure Portal.

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

Requisitos previos

En este procedimiento es necesario ejecutar PowerShell de forma 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 Connect-AzAccount para crear una conexión con Azure.

Configuración de la red

En primer lugar, cree un grupo de recursos para que contenga los recursos necesarios para implementar el firewall. A continuación, cree una red virtual, subredes y pruebe los servidores.

Crear un grupo de recursos

El grupo de recursos contiene todos los recursos necesarios para la implementación.

New-AzResourceGroup -Name Test-FW-RG -Location "East US"

Creación de una red virtual y un host de Azure Bastion

Esta red virtual tiene tres subredes:

Nota

El tamaño de la subred AzureFirewallSubnet es /26. Para más información sobre el tamaño de la subred, consulte Preguntas más frecuentes sobre Azure Firewall.

$Bastionsub = New-AzVirtualNetworkSubnetConfig -Name AzureBastionSubnet -AddressPrefix 10.0.0.0/27
$FWsub = New-AzVirtualNetworkSubnetConfig -Name AzureFirewallSubnet -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig -Name Workload-SN -AddressPrefix 10.0.2.0/24

Ahora cree la red virtual:

$testVnet = New-AzVirtualNetwork -Name Test-FW-VN -ResourceGroupName Test-FW-RG `
-Location "East US" -AddressPrefix 10.0.0.0/16 -Subnet $Bastionsub, $FWsub, $Worksub

Creación de una dirección IP pública para un host de Azure Bastion

$publicip = New-AzPublicIpAddress -ResourceGroupName Test-FW-RG -Location "East US" `
   -Name Bastion-pip -AllocationMethod static -Sku standard

Creación de un host de Azure Bastion

New-AzBastion -ResourceGroupName Test-FW-RG -Name Bastion-01 -PublicIpAddress $publicip -VirtualNetwork $testVnet

Creación de una máquina virtual

Ahora cree la máquina virtual de la carga de trabajo y colóquela en la subred correspondiente. Cuando se le solicite, escriba el nombre de usuario y la contraseña de la máquina virtual.

Cree una máquina virtual de carga de trabajo. Cuando se le solicite, escriba el nombre de usuario y la contraseña de la máquina virtual.

#Create the NIC
$wsn = Get-AzVirtualNetworkSubnetConfig -Name  Workload-SN -VirtualNetwork $testvnet
$NIC01 = New-AzNetworkInterface -Name Srv-Work -ResourceGroupName Test-FW-RG -Location "East us" -Subnet $wsn

#Define the virtual machine
$VirtualMachine = New-AzVMConfig -VMName Srv-Work -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Srv-Work -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC01.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2019-Datacenter' -Version latest

#Create the virtual machine
New-AzVM -ResourceGroupName Test-FW-RG -Location "East US" -VM $VirtualMachine -Verbose

Creación de una directiva de firewall

$fwpol = New-AzFirewallPolicy -Name fw-pol -ResourceGroupName Test-FW-RG -Location eastus

Configuración de una regla de aplicación de la directiva de firewall

La regla de aplicación permite el acceso de salida a www.google.com.

$RCGroup = New-AzFirewallPolicyRuleCollectionGroup -Name AppRCGroup -Priority 100 -FirewallPolicyObject $fwpol
$apprule1 = New-AzFirewallPolicyApplicationRule -Name Allow-google -SourceAddress "10.0.2.0/24" -Protocol "http:80","https:443" -TargetFqdn www.google.com
$appcoll1 = New-AzFirewallPolicyFilterRuleCollection -Name App-coll01 -Priority 100 -Rule $appRule1 -ActionType "Allow"
Set-AzFirewallPolicyRuleCollectionGroup -Name $RCGroup.Name -Priority 100 -RuleCollection $appcoll1 -FirewallPolicyObject $fwPol

Azure Firewall incluye una colección de reglas integradas para FQDN de infraestructura que están permitidos de forma predeterminada. Estos FQDN son específicos para la plataforma y no se pueden usar para otros fines. Para más información, consulte Nombres de dominio completos de infraestructura.

Configuración de una regla de red de la directiva de firewall

La regla de red permite el acceso saliente a dos direcciones IP en el puerto 53 (DNS).

$RCGroup = New-AzFirewallPolicyRuleCollectionGroup -Name NetRCGroup -Priority 200 -FirewallPolicyObject $fwpol
$netrule1 = New-AzFirewallPolicyNetworkRule -name Allow-DNS -protocol UDP -sourceaddress 10.0.2.0/24 -destinationaddress 209.244.0.3,209.244.0.4 -destinationport 53
$netcoll1 = New-AzFirewallPolicyFilterRuleCollection -Name Net-coll01 -Priority 200 -Rule $netrule1 -ActionType "Allow"
Set-AzFirewallPolicyRuleCollectionGroup -Name $RCGroup.Name -Priority 200 -RuleCollection $netcoll1 -FirewallPolicyObject $fwPol

Implementación del firewall

Ahora, implemente el firewall en la red virtual.

# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress -Name "fw-pip" -ResourceGroupName Test-FW-RG `
  -Location "East US" -AllocationMethod Static -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall -Name Test-FW01 -ResourceGroupName Test-FW-RG -Location "East US" -VirtualNetwork $testVnet -PublicIpAddress $FWpip -FirewallPolicyId $fwpol.Id


#Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

Anote la dirección IP privada. Se usará más adelante al crear la ruta predeterminada.

Crear una ruta predeterminada

Creación de una tabla con la propagación de la ruta BGP deshabilitada

$routeTableDG = New-AzRouteTable `
  -Name Firewall-rt-table `
  -ResourceGroupName Test-FW-RG `
  -location "East US" `
  -DisableBgpRoutePropagation

#Create a route
 Add-AzRouteConfig `
  -Name "DG-Route" `
  -RouteTable $routeTableDG `
  -AddressPrefix 0.0.0.0/0 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress $AzfwPrivateIP `
 | Set-AzRouteTable

#Associate the route table to the subnet

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $testVnet `
  -Name Workload-SN `
  -AddressPrefix 10.0.2.0/24 `
  -RouteTable $routeTableDG | Set-AzVirtualNetwork

Cambio de la dirección DNS principal y secundaria para la interfaz de red Srv-Work

Con fines de prueba para este procedimiento, configure las direcciones DNS principal y secundaria del servidor. Esto no es un requisito general de Azure Firewall.

$NIC01.DnsSettings.DnsServers.Add("209.244.0.3")
$NIC01.DnsSettings.DnsServers.Add("209.244.0.4")
$NIC01 | Set-AzNetworkInterface

Probar el firewall

Ahora, pruebe el firewall para confirmar que funciona según lo previsto.

  1. Conéctese a la máquina virtual Srv-Work a través de Bastion e inicie sesión.

    Connect using Bastion.

  2. En Srv-Work, abra una ventana de PowerShell y ejecute estos comandos:

    nslookup www.google.com
    nslookup www.microsoft.com
    

    Ambos comandos deben devolver respuestas en las que se muestre que sus consultas de DNS están pasando por el firewall.

  3. Ejecute los comandos siguientes:

    Invoke-WebRequest -Uri https://www.google.com
    Invoke-WebRequest -Uri https://www.google.com
    
    Invoke-WebRequest -Uri https://www.microsoft.com
    Invoke-WebRequest -Uri https://www.microsoft.com
    

    Las solicitudes de www.google.com deberían realizarse correctamente, mientras que las solicitudes de www.microsoft.com deberían producir un error. Esto demostraría que las reglas de firewall están funcionando según lo previsto.

Con ello, ha comprobado que las reglas de la directiva de firewall funcionan:

  • Puede resolver nombres DNS con el servidor DNS externo configurado.
  • Puede navegar al FQDN permitido pero no a ningún otro.

Limpieza de recursos

Puede conservar los recursos de firewall para probarlos más a fondo o, si ya no los necesita, eliminar el grupo de recursos Test-FW-RG para eliminar todos los recursos relacionados con el firewall.

Remove-AzResourceGroup -Name Test-FW-RG

Pasos siguientes