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.
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. DefinaUseRemoteGateways
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 Connected
entrada 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
Obtenha e anote o endereço IP privado para a máquina virtual VM-spoke-01 :
$NIC.IpConfigurations.privateipaddress
No portal do Azure, ligue à máquina virtual VM-Onprem.
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.
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.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.