Partilhar via


Implantar e configurar o Firewall do Azure em uma rede híbrida usando o Azure PowerShell

Quando liga a sua rede local a uma rede virtual do Azure para criar uma rede híbrida, a capacidade de controlar o acesso aos seus recursos de rede do Azure é uma parte importante de um plano de segurança global.

Você pode usar o Firewall do Azure para controlar o acesso à rede em uma rede híbrida usando regras que definem o tráfego de rede permitido e negado.

Para este artigo, você cria três redes virtuais:

  • VNet-Hub: O firewall está nesta rede virtual.
  • VNet-Spoke: A rede virtual spoke representa a carga de trabalho localizada no Azure.
  • VNet-Onprem: A rede virtual local representa uma rede local. Em uma implantação real, você pode se conectar a ela usando uma conexão de rede virtual privada (VPN) ou uma conexão de Rota Expressa do Azure. Para simplificar, este artigo usa uma conexão de gateway VPN e uma rede virtual localizada no Azure representa uma rede local.

Diagrama que mostra um firewall em uma rede híbrida.

Se você quiser usar o portal do Azure para concluir os procedimentos neste artigo, consulte Implantar e configurar o Firewall do Azure em uma rede híbrida usando o portal do Azure.

Nota

Recomendamos que utilize o módulo Azure Az do PowerShell para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo do Az PowerShell, veja Migrar o Azure PowerShell do AzureRM para o Az.

Pré-requisitos

Este artigo requer que você execute o PowerShell localmente. Você deve ter o módulo do Azure PowerShell instalado. Executar Get-Module -ListAvailable Az para localizar a versão. Se precisar de atualizar, veja Instalar o módulo do Azure PowerShell. Depois de verificar a versão do PowerShell, execute Login-AzAccount para criar uma ligação ao Azure.

Existem três requisitos chave para este cenário funcionar corretamente:

  • Uma rota definida pelo usuário (UDR) na sub-rede spoke que aponta para o endereço IP do Firewall do Azure como o gateway padrão. A propagação de rotas do gateway de rede virtual deve ser desabilitada nesta tabela de rotas.

  • Um UDR na sub-rede do gateway de hub deve apontar para o endereço IP do firewall como o próximo salto para as redes faladas.

    Nenhuma UDR é necessária na sub-rede do Firewall do Azure, porque ela aprende rotas do BGP (Border Gateway Protocol).

  • Certifique-se de definir AllowGatewayTransit quando estiver emparelhando VNet-Hub para VNet-Spoke. Defina UseRemoteGateways quando estiver emparelhando VNet-Spoke para VNet-Hub.

A seção Criar as rotas mais adiante neste artigo mostra como criar essas rotas.

Nota

O Azure Firewall tem de ter conectividade à Internet direta. Se sua sub-rede AzureFirewallSubnet aprender uma rota padrão para sua rede local via BGP, você deverá configurar o Firewall do Azure no modo de encapsulamento forçado. Se esta for uma instância existente do Firewall do Azure que não pode ser reconfigurada no modo de encapsulamento forçado, recomendamos que você adicione uma UDR 0.0.0.0/0 na sub-rede AzureFirewallSubnet com o valor definido como Internet para manter a conectividade direta com a NextHopType Internet.

Para obter mais informações, veja Túnel forçado do Azure Firewall.

O tráfego entre redes virtuais diretamente emparelhadas é roteado diretamente, mesmo que um UDR aponte para o Firewall do Azure como o gateway padrão. Para enviar tráfego de sub-rede para sub-rede para o firewall nesse cenário, um UDR deve conter o prefixo de rede de sub-rede de destino explicitamente em ambas as sub-redes.

Para revisar a documentação de referência do Azure PowerShell relacionada, consulte New-AzFirewall.

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

Declarar as variáveis

O exemplo a seguir declara as variáveis usando os valores para este artigo. Em alguns casos, poderá ter de substituir alguns valores pelos seus próprios valores para trabalhar na sua subscrição. Modifique as variáveis, se necessário, e copie-as e cole-as no console do 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"

Criar a rede virtual do hub de firewall

Primeiro, crie o grupo de recursos para conter os recursos deste artigo:

  New-AzResourceGroup -Name $RG1 -Location $Location1

Defina as sub-redes a serem incluídas na rede virtual:

$FWsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameHub -AddressPrefix $SNHubPrefix
$GWsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNGWHubPrefix

Crie a rede virtual do hub de firewall:

$VNetHub = New-AzVirtualNetwork -Name $VNetnameHub -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetHubPrefix -Subnet $FWsub,$GWsub

Solicite que um endereço IP público seja alocado para o gateway VPN que você criará para sua rede virtual. Observe que o AllocationMethod valor é Dynamic. Não é possível especificar o endereço IP que pretende utilizar. É atribuído dinamicamente ao seu gateway de VPN.

$gwpip1 = New-AzPublicIpAddress -Name $GWHubpipName -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Dynamic

Crie a rede virtual spoke

Defina as sub-redes a serem incluídas na rede virtual falada:

$Spokesub = New-AzVirtualNetworkSubnetConfig -Name $SNnameSpoke -AddressPrefix $SNSpokePrefix
$GWsubSpoke = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNSpokeGWPrefix

Crie a rede virtual falada:

$VNetSpoke = New-AzVirtualNetwork -Name $VnetNameSpoke -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetSpokePrefix -Subnet $Spokesub,$GWsubSpoke

Criar a rede virtual local

Defina as sub-redes a serem incluídas na rede virtual:

$Onpremsub = New-AzVirtualNetworkSubnetConfig -Name $SNNameOnprem -AddressPrefix $SNOnpremPrefix
$GWOnpremsub = New-AzVirtualNetworkSubnetConfig -Name $SNnameGW -AddressPrefix $SNGWOnpremPrefix

Crie a rede virtual local:

$VNetOnprem = New-AzVirtualNetwork -Name $VNetnameOnprem -ResourceGroupName $RG1 `
-Location $Location1 -AddressPrefix $VNetOnpremPrefix -Subnet $Onpremsub,$GWOnpremsub

Solicite que um endereço IP público seja alocado ao gateway que você criará para a rede virtual. Observe que o AllocationMethod valor é Dynamic. Não é possível especificar o endereço IP que pretende utilizar. É atribuído dinamicamente ao seu gateway.

$gwOnprempip = New-AzPublicIpAddress -Name $GWOnprempipName -ResourceGroupName $RG1 `
-Location $Location1 -AllocationMethod Dynamic

Configurar e implementar a firewall

Agora, implante o firewall na rede virtual do hub:

# 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

Configure regras de rede:

$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

Criar e ligar os gateways de VPN

O hub e as redes virtuais locais são conectados por meio de gateways VPN.

Criar um gateway VPN para a rede virtual do hub

Crie a configuração do gateway VPN para a rede virtual do hub. A configuração do gateway de VPN define a sub-rede e o endereço IP público a utilizar.

$vnet1 = Get-AzVirtualNetwork -Name $VNetnameHub -ResourceGroupName $RG1
$subnet1 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet1
$gwipconf1 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfNameHub `
-Subnet $subnet1 -PublicIpAddress $gwpip1

Agora, crie o gateway VPN para a rede virtual do hub. As configurações de rede para rede requerem um VpnType valor de RouteBased. A criação de um gateway VPN geralmente pode levar 45 minutos ou mais, dependendo da SKU selecionada.

New-AzVirtualNetworkGateway -Name $GWHubName -ResourceGroupName $RG1 `
-Location $Location1 -IpConfigurations $gwipconf1 -GatewayType Vpn `
-VpnType RouteBased -GatewaySku basic

Criar um gateway VPN para a rede virtual local

Crie a configuração do gateway VPN para a rede virtual local. A configuração do gateway de VPN define a sub-rede e o endereço IP público a utilizar.

$vnet2 = Get-AzVirtualNetwork -Name $VNetnameOnprem -ResourceGroupName $RG1
$subnet2 = Get-AzVirtualNetworkSubnetConfig -Name "GatewaySubnet" -VirtualNetwork $vnet2
$gwipconf2 = New-AzVirtualNetworkGatewayIpConfig -Name $GWIPconfNameOnprem `
-Subnet $subnet2 -PublicIpAddress $gwOnprempip

Agora, crie o gateway VPN para a rede virtual local. As configurações de rede para rede requerem um VpnType valor de RouteBased. A criação de um gateway VPN geralmente pode levar 45 minutos ou mais, dependendo da SKU selecionada.

New-AzVirtualNetworkGateway -Name $GWOnpremName -ResourceGroupName $RG1 `
-Location $Location1 -IpConfigurations $gwipconf2 -GatewayType Vpn `
-VpnType RouteBased -GatewaySku basic

Criar as ligações VPN

Crie as conexões VPN entre o hub e os gateways locais.

Obter os gateways de VPN

$vnetHubgw = Get-AzVirtualNetworkGateway -Name $GWHubName -ResourceGroupName $RG1
$vnetOnpremgw = Get-AzVirtualNetworkGateway -Name $GWOnpremName -ResourceGroupName $RG1

Criar as ligações

Nesta etapa, você cria a conexão da rede virtual do hub com a rede virtual local. Os exemplos mostram uma chave compartilhada, mas você pode usar seus próprios valores para a chave compartilhada. Importante: a chave partilhada tem de corresponder a ambas as ligações. A criação de uma ligação pode demorar algum tempo.

New-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1 `
-VirtualNetworkGateway1 $vnetHubgw -VirtualNetworkGateway2 $vnetOnpremgw -Location $Location1 `
-ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'

Crie a conexão de rede virtual do local para o hub. Esta etapa é semelhante à anterior, exceto que você cria a conexão de VNet-Onprem para VNet-Hub. Certifique-se de que as chaves partilhadas correspondem. A conexão é estabelecida após alguns minutos.

New-AzVirtualNetworkGatewayConnection -Name $ConnectionNameOnprem -ResourceGroupName $RG1 `
-VirtualNetworkGateway1 $vnetOnpremgw -VirtualNetworkGateway2 $vnetHubgw -Location $Location1 `
-ConnectionType Vnet2Vnet -SharedKey 'AzureA1b2C3'

Verificar a ligação

Você pode verificar uma conexão bem-sucedida usando o Get-AzVirtualNetworkGatewayConnection cmdlet, com ou sem -Debug.

Use o exemplo de cmdlet a seguir, mas configure os valores para corresponder aos seus. Se lhe for pedido, selecione A para executar All. No exemplo, -Name refere-se ao nome da conexão que você deseja testar.

Get-AzVirtualNetworkGatewayConnection -Name $ConnectionNameHub -ResourceGroupName $RG1

Quando o cmdlet terminar, veja os valores. O exemplo a seguir mostra um status de conexão de , juntamente com bytes de Connectedentrada e saída:

"connectionStatus": "Connected",
"ingressBytesTransferred": 33509044,
"egressBytesTransferred": 4142431

Peer o hub e redes virtuais spoke

Agora, peer o hub e redes virtuais faladas:

# 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

Criar as rotas

Use os seguintes comandos para criar essas rotas:

  • Uma rota da sub-rede de gateway do hub para a sub-rede spoke através do endereço IP da firewall
  • Uma rota predefinida da sub-rede spoke através do endereço IP da 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

Criar máquinas virtuais

Crie a carga de trabalho spoke e as máquinas virtuais locais e coloque-as nas sub-redes apropriadas.

Criar a máquina virtual de carga de trabalho

Crie uma máquina virtual na rede virtual spoke que execute o IIS (Serviços de Informações da Internet), não tenha endereço IP público e permita pings. Quando lhe for pedido, introduza um nome de utilizador e palavra-passe para a 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

Criar a máquina virtual local

Crie uma máquina virtual simples que você pode usar para se conectar via acesso remoto ao endereço IP público. A partir daí, você pode se conectar ao servidor local por meio do firewall. Quando lhe for pedido, introduza um nome de utilizador e palavra-passe para a máquina virtual.

New-AzVm `
    -ResourceGroupName $RG1 `
    -Name "VM-Onprem" `
    -Location $Location1 `
    -VirtualNetworkName $VNetnameOnprem `
    -SubnetName $SNNameOnprem `
    -OpenPorts 3389 `
    -Size "Standard_DS2"

Nota

O Azure fornece um IP de acesso de saída padrão para VMs que não recebem um endereço IP público ou estão no pool de back-end de um balanceador de carga básico interno do Azure. O mecanismo 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 é desativado 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 NAT do Azure é atribuído à sub-rede da VM.

As VMs que você cria usando conjuntos de dimensionamento de máquina virtual no modo de orquestração flexível não têm acesso de saída padrão.

Para obter mais informações sobre conexões de saída no Azure, consulte Acesso de saída padrão no Azure e Usar SNAT (Conversão de Endereço de Rede de Origem) para conexões de saída.

Testar a firewall

  1. Obtenha e anote o endereço IP privado para a máquina virtual VM-spoke-01 :

    $NIC.IpConfigurations.privateipaddress
    
  2. No portal do Azure, ligue à máquina virtual VM-Onprem.

  3. Abra uma linha de comandos do Windows PowerShell na VM Onprem, e envie o ping do IP privado para VM-spoke-01. Deve obter uma resposta.

  4. Abra um navegador da Web no VM-Onprem e navegue até http://<VM-spoke-01 private IP>. A página padrão do IIS deve ser aberta.

  5. No VM-Onprem, abra uma conexão de acesso remoto para VM-spoke-01 no endereço IP privado. Sua conexão deve ser bem-sucedida e você deve ser capaz de entrar usando seu nome de usuário e senha escolhidos.

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

  • Execute ping no servidor na rede virtual falada.
  • Navegue até o servidor web na rede virtual falada.
  • Conecte-se ao servidor na rede virtual spoke usando RDP.

Em seguida, execute o seguinte script para alterar a ação para a coleção de regras de rede de firewall para Deny:

$rcNet = $azfw.GetNetworkRuleCollectionByName("RCNet01")
$rcNet.action.type = "Deny"

Set-AzFirewall -AzureFirewall $azfw

Feche todas as conexões de acesso remoto existentes. Execute os testes novamente para testar as regras alteradas. Desta vez, devem falhar todos.

Clean up resources (Limpar recursos)

Você pode manter seus recursos de firewall para o próximo tutorial. Se você não precisar mais deles, exclua o grupo de recursos FW-Hybrid-Test para excluir todos os recursos relacionados ao firewall.

Próximos passos

Monitorizar os registos do Azure Firewall