Implantar e configurar o Firewall do Azure usando o Azure PowerShell

O controle do acesso à saída de rede é uma parte importante de um plano geral de segurança de rede. Por exemplo, você talvez queira limitar o acesso a sites. Ou você talvez queira limitar os endereços IP e portas de saída que podem ser acessados.

Uma maneira de controlar o acesso à saída de rede em uma sub-rede do Azure é com o Firewall do Azure. Com o Firewall do Azure, você pode configurar:

  • Regras de aplicativo que definem FQDNs (nomes de domínio totalmente qualificados) que podem ser acessados em uma sub-rede.
  • Regras de rede que definem endereço de origem, protocolo, porta de destino e endereço de destino.

O tráfego de rede está sujeito às regras de firewall configuradas quando o tráfego de rede para o firewall foi roteado como a sub-rede de gateway padrão.

Para este artigo, você criará uma VNet individual simplificada com três sub-redes para facilitar a implantação. Para implantações de produção, é recomendado um modelo de hub e spoke, em que o firewall é, por si só, a VNet. Os servidores de carga de trabalho estão em VNets emparelhadas na mesma região que uma ou mais sub-redes.

  • AzureFirewallSubnet: o firewall está nesta sub-rede.
  • Workload-SN: o servidor de carga de trabalho está nessa sub-rede. O tráfego de rede dessa sub-rede passa pelo firewall.
  • AzureBastionSubnet – a sub-rede usada para Azure Bastion, que é usada para se conectar ao servidor de carga de trabalho.

Para obter mais informações sobre o Azure Bastion, confira O que é o Azure Bastion?

Importante

Os preços por hora começam a partir do momento em que o Bastion é implantado, independentemente do uso de dados de saída. Para saber mais, confira Preços e SKUs. Se estiver implantando o Bastion como parte de um tutorial ou teste, recomendamos que você exclua esse recurso após terminar de usá-lo.

Infraestrutura de rede do tutorial

Neste artigo, você aprenderá como:

  • Configurar um ambiente de rede de teste
  • Implantar um firewall
  • Criar uma rota padrão
  • Configure uma regra de aplicativo para permitir acesso a www.google.com
  • Configurar uma regra de rede para permitir o acesso a servidores DNS externos
  • Testar o firewall

Se preferir, você poderá concluir este procedimento usando o portal do Azure.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

Este procedimento requer a execução do PowerShell localmente. Você deve ter os módulos do Azure PowerShell instalados. Execute Get-Module -ListAvailable Az para encontrar a versão. Se você precisa atualizar, consulte Instalar o módulo do Azure PowerShell. Depois de verificar a versão do PowerShell, execute Connect-AzAccount para criar uma conexão com o Azure.

Configurar a rede

Primeiro, crie um grupo de recursos para conter os recursos necessários à implantação do firewall. Em seguida, crie uma VNET, sub-redes e servidores de teste.

Criar um grupo de recursos

O grupo de recursos contém todos os recursos para a implantação.

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

Criar uma rede virtual e um host do Azure Bastion

Esta rede virtual não tem sub-redes:

Observação

O tamanho da sub-rede AzureFirewallSubnet é /26. Para obter mais informações sobre o tamanho da sub-rede, confira Perguntas frequentes sobre o Firewall do Azure.

$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

Agora, crie a rede 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

Criar o endereço IP público para o host do Azure Bastion

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

Criar um host do Azure Bastion

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

Criar uma máquina virtual

Agora crie a máquina virtual da carga de trabalho e coloque-a na sub-rede apropriada. Quando solicitado, digite um nome de usuário e senha da máquina virtual.

Crie uma máquina virtual de carga de trabalho. Quando solicitado, digite um nome de usuário e senha da 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
$SecurePassword = ConvertTo-SecureString "<choose a password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ("<choose a user name>", $SecurePassword);
$VirtualMachine = New-AzVMConfig -VMName Srv-Work -VMSize "Standard_DS2"
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Srv-Work -ProvisionVMAgent -EnableAutoUpdate -Credential $Credential
$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

Observação

O Azure fornece um IP de acesso de saída padrão para VMs que não receberam um endereço IP público ou que estão no pool de back-end de um balanceador de carga do Azure básico interno. O mecanismo de IP de acesso de saída padrão fornece um endereço IP de saída que não é configurável.

O IP de acesso de saída padrão é desabilitado quando um dos seguintes eventos acontece:

  • Um endereço IP público é atribuído à VM.
  • A VM é colocada no pool de back-end de um balanceador de carga padrão, com ou sem regras de saída.
  • Um recurso do Gateway da NAT do Azure é atribuído à sub-rede da VM.

As VMs criadas por conjuntos de dimensionamento de máquinas virtuais no modo de orquestração flexível não têm acesso de saída padrão.

Para mais informações sobre conexões de saída no Azure, confira Acesso de saída padrão no Azure e Usar SNAT (conversão de endereços de rede de origem) para conexões de saída.

Implantar o firewall

Agora, implante o firewall na rede 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

#Save the firewall private IP address for future use

$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP

Anote o endereço IP privado. Você o usará mais tarde quando criar a rota padrão.

Criar uma rota padrão

Criar uma tabela com a propagação de rota BGP desabilitada

$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

Configurar uma regra de aplicativo

Essa é a regra de aplicativo que permite o acesso de saída para www.google.com.

$AppRule1 = New-AzFirewallApplicationRule -Name Allow-Google -SourceAddress 10.0.2.0/24 `
  -Protocol http, https -TargetFqdn www.google.com

$AppRuleCollection = New-AzFirewallApplicationRuleCollection -Name App-Coll01 `
  -Priority 200 -ActionType Allow -Rule $AppRule1

$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)

Set-AzFirewall -AzureFirewall $Azfw

O Firewall do Azure inclui uma coleção de regras internas para FQDNs de infraestrutura que têm permissão por padrão. Esses FQDNs são específicos da plataforma e não podem ser usados para outras finalidades. Para saber mais, veja FQDNs de infraestrutura.

Configurar uma regra de rede

Essa é a regra de rede que permite o acesso de saída para dois endereços IP na porta 53 (DNS).

$NetRule1 = New-AzFirewallNetworkRule -Name "Allow-DNS" -Protocol UDP -SourceAddress 10.0.2.0/24 `
   -DestinationAddress 209.244.0.3,209.244.0.4 -DestinationPort 53

$NetRuleCollection = New-AzFirewallNetworkRuleCollection -Name RCNet01 -Priority 200 `
   -Rule $NetRule1 -ActionType "Allow"

$Azfw.NetworkRuleCollections.Add($NetRuleCollection)

Set-AzFirewall -AzureFirewall $Azfw

Altere os endereços DNS primário e secundário para o adaptador de rede Srv-Wprk

Para fins de teste neste procedimento, você vai configurar os endereços DNS primários e secundários do servidor. Isso não é um requisito geral do Firewall do Azure.

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

Testar o firewall

Agora teste o firewall para confirmar se ele funciona conforme o esperado.

  1. Conecte-se à máquina virtual Srv-Work usando o Bastion, e entre.

    Conecte-se usando o Bastion.

  2. Em Srv-Work, abra uma janela do PowerShell e execute os seguintes comandos:

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

    Os dois comandos devem retornar respostas, mostrando que as consultas DNS estão passando pelo firewall.

  3. Execute os seguintes comandos:

    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
    

    As solicitações www.google.com devem ter êxito e as solicitações www.microsoft.com devem falhar. Isso demonstra que as regras de firewall estão funcionando conforme o esperado.

Agora que você verificou se as regras de firewall estão funcionando:

  • É possível resolver nomes DNS usando o servidor DNS externo configurado.
  • Você pode navegar para o FQDN permitido, mas não para os outros.

Limpar os recursos

É possível manter seus recursos de firewall para o próximo tutorial ou, se não forem mais necessários, exclua o grupo de recursos Test-FW-RG para excluir todos os recursos relacionados ao firewall:

Remove-AzResourceGroup -Name Test-FW-RG

Próximas etapas