Filtrar o tráfego de rede com um grupo de segurança de rede usando o PowerShell

Pode filtrar o tráfego de rede de entrada e de saída de uma sub-rede de rede virtual com um grupo de segurança de rede. Os grupos de segurança de rede contêm regras de segurança que filtram o tráfego de rede por endereço IP, porta e protocolo. As regras de segurança são aplicadas a recursos implementados numa sub-rede. Neste artigo, vai aprender a:

  • Crie um grupo de segurança de rede e regras de segurança.
  • Criar uma rede virtual e associar um grupo de segurança de rede a uma sub-rede
  • Implementar máquinas virtuais (VMs) numa sub-rede
  • Testar os filtros de tráfego

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

Azure Cloud Shell

O Azure aloja o Azure Cloud Shell, um ambiente de shell interativo que pode utilizar através do seu browser. Pode utilizar o Bash ou o PowerShell com o Cloud Shell para trabalhar com os serviços do Azure. Você pode usar os comandos pré-instalados do Cloud Shell para executar o código neste artigo, sem precisar instalar nada em seu ambiente local.

Para iniciar o Azure Cloud Shell:

Opção Exemplo/Ligação
Selecione Experimentar no canto superior direito de um código ou bloco de comandos. Selecionar Experimentar não copia automaticamente o código ou comando para o Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Aceda a https://shell.azure.com ou selecione o botão Iniciar Cloud Shell para abrir o Cloud Shell no browser. Button to launch Azure Cloud Shell.
Selecione o botão Cloud Shell na barra de menus, na parte direita do portal do Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Para usar o Azure Cloud Shell:

  1. Inicie o Cloud Shell.

  2. Selecione o botão Copiar em um bloco de código (ou bloco de comando) para copiar o código ou comando.

  3. Cole o código ou comando na sessão do Cloud Shell selecionando Ctrl+Shift+V no Windows e Linux ou selecionando Cmd+Shift+V no macOS.

  4. Selecione Enter para executar o código ou comando.

Se você optar por instalar e usar o PowerShell localmente, este artigo exigirá o módulo do Azure PowerShell versão 1.0.0 ou posterior. Execute Get-Module -ListAvailable Az para localizar a versão instalada. Se precisar de atualizar, veja Install Azure PowerShell module (Instalar o módulo do Azure PowerShell). Se estiver a executar localmente o PowerShell, também terá de executar o Connect-AzAccount para criar uma ligação com o Azure.

Criar um grupo de segurança de rede

Os grupos de segurança de rede contêm regras de segurança. As regras de segurança especificam uma origem e um destino. As origens e destinos podem ser grupos de segurança de aplicações.

Criar grupos de segurança de aplicações

Primeiro, crie um grupo de recursos para todos os recursos criados neste artigo com New-AzResourceGroup. O exemplo seguinte cria um grupo de recursos na localização eastus:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Crie um grupo de segurança de aplicativo com New-AzApplicationSecurityGroup. Os grupo de segurança de aplicações permitem-lhe agrupar servidores com requisitos de filtragem de portas semelhante. O exemplo seguinte cria dois grupos de segurança de aplicações.

$webAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgWebServers `
  -Location eastus

$mgmtAsg = New-AzApplicationSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Name myAsgMgmtServers `
  -Location eastus

Criar regras de segurança

Crie uma regra de segurança com New-AzNetworkSecurityRuleConfig. O exemplo seguinte cria uma regra que permite o tráfego de entrada da Internet para o grupo de segurança de aplicações myWebServers através das portas 80 e 443:

$webRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-Web-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 100 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $webAsg.id `
  -DestinationPortRange 80,443

The following example creates a rule that allows traffic inbound from the internet to the *myMgmtServers* application security group over port 3389:

$mgmtRule = New-AzNetworkSecurityRuleConfig `
  -Name "Allow-RDP-All" `
  -Access Allow `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 110 `
  -SourceAddressPrefix Internet `
  -SourcePortRange * `
  -DestinationApplicationSecurityGroupId $mgmtAsg.id `
  -DestinationPortRange 3389

Neste artigo, RDP (porta 3389) é exposto à Internet para a VM myAsgMgmtServers . Em ambientes de produção, em vez de expor a porta 3389 à Internet, recomenda-se que ligue aos recursos do Azure que quer gerir com uma VPN ou da ligação de rede privada.

Criar um grupo de segurança de rede

Crie um grupo de segurança de rede com New-AzNetworkSecurityGroup. O exemplo seguinte cria um grupo de segurança de rede com o nome myNsg:

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myNsg `
  -SecurityRules $webRule,$mgmtRule

Criar uma rede virtual

Crie uma rede virtual com New-AzVirtualNetwork. O exemplo seguinte cria uma rede virtual com o nome myVirtualNetwork:

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Crie uma configuração de sub-rede com New-AzVirtualNetworkSubnetConfig e, em seguida, escreva a configuração de sub-rede na rede virtual com Set-AzVirtualNetwork. O exemplo seguinte adiciona uma sub-rede com o nome mySubnet à rede virtual e associa o grupo de segurança de rede myNsg à mesma:

Add-AzVirtualNetworkSubnetConfig `
  -Name mySubnet `
  -VirtualNetwork $virtualNetwork `
  -AddressPrefix "10.0.2.0/24" `
  -NetworkSecurityGroup $nsg
$virtualNetwork | Set-AzVirtualNetwork

Criar máquinas virtuais

Antes de criar as VMs, recupere o objeto de rede virtual com a sub-rede com Get-AzVirtualNetwork:

$virtualNetwork = Get-AzVirtualNetwork `
 -Name myVirtualNetwork `
 -Resourcegroupname myResourceGroup

Crie um endereço IP público para cada VM com New-AzPublicIpAddress:

$publicIpWeb = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmWeb

$publicIpMgmt = New-AzPublicIpAddress `
  -AllocationMethod Dynamic `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -Name myVmMgmt

Crie duas interfaces de rede com New-AzNetworkInterface e atribua um endereço IP público à interface de rede. O exemplo seguinte cria uma interface de rede, associa o endereço IP público de myVmWeb à mesma e torna-a membro do grupo de segurança de rede myAsgWebServers:

$webNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $webAsg.Id `
  -PublicIpAddressId $publicIpWeb.Id

O exemplo seguinte cria uma interface de rede, associa o endereço IP público de myVmMgmt à mesma e torna-a membro do grupo de segurança de aplicações myAsgMgmtServers:

$mgmtNic = New-AzNetworkInterface `
  -Location eastus `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  -SubnetId $virtualNetwork.Subnets[0].Id `
  -ApplicationSecurityGroupId $mgmtAsg.Id `
  -PublicIpAddressId $publicIpMgmt.Id

Crie duas VMs na rede virtual, para que possa confirmar a filtragem de tráfego num passo posterior.

Crie uma configuração de VM com New-AzVMConfig e, em seguida, crie a VM com New-AzVM. O exemplo seguinte cria uma VM que vai funcionar como servidor Web. A opção -AsJob cria a VM em segundo plano, para que possa prosseguir para o passo seguinte:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

$webVmConfig = New-AzVMConfig `
  -VMName myVmWeb `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmWeb `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $webNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $webVmConfig `
  -AsJob

Crie uma VM que vai funcionar como servidor de gestão:

# Create user object
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."

# Create the web server virtual machine configuration and virtual machine.
$mgmtVmConfig = New-AzVMConfig `
  -VMName myVmMgmt `
  -VMSize Standard_DS1_V2 | `
Set-AzVMOperatingSystem -Windows `
  -ComputerName myVmMgmt `
  -Credential $cred | `
Set-AzVMSourceImage `
  -PublisherName MicrosoftWindowsServer `
  -Offer WindowsServer `
  -Skus 2016-Datacenter `
  -Version latest | `
Add-AzVMNetworkInterface `
  -Id $mgmtNic.Id
New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location eastus `
  -VM $mgmtVmConfig

A criação da máquina virtual demora alguns minutos. Não continue para o passo seguinte enquanto o Azure não concluir a criação da VM.

Testar os filtros de tráfego

Use Get-AzPublicIpAddress para retornar o endereço IP público de uma VM. O exemplo seguinte devolve o endereço IP público da VM myVmMgmt:

Get-AzPublicIpAddress `
  -Name myVmMgmt `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Utilize o seguinte comando para criar uma sessão de ambiente de trabalho remoto com a VM myVmMgmt a partir do computador local. Substitua <publicIpAddress> pelo endereço IP devolvido no comando anterior.

mstsc /v:<publicIpAddress>

Abra o ficheiro RDP transferido. Se lhe for pedido, selecione Ligar.

Introduza o nome de utilizador e a palavra-passe que especificou ao criar a VM (poderá ter de selecionar Mais opções e Utilizar uma conta diferente para especificar as credenciais que introduziu quando criou a VM) e, em seguida, selecione OK. Poderá receber um aviso de certificado durante o processo de início de sessão. Selecione Sim para continuar a ligação.

A ligação é bem-sucedida, porque a porta 3389 pode receber tráfego de entrada da Internet para o grupo de segurança de aplicações myAsgMgmtServers no qual a interface de rede ligada à VM myVmMgmt se encontra.

Utilize o seguinte comando para criar uma ligação de ambiente de trabalho remoto para a VM myVmWeb a partir da VM myVmMgmt, com o seguinte comando do PowerShell:

mstsc /v:myvmWeb

A ligação é bem-sucedida, porque uma regra de segurança predefinida em cada grupo de segurança de rede permite o tráfego em todas as portas entre todos os endereços IP dentro de uma rede virtual. Não pode criar uma ligação de ambiente de trabalho remoto para a VM myVmWeb a partir da Internet porque a regra de segurança para myAsgWebServers não permite a porta 3389 de entrada da Internet.

Utilize o seguinte comando para instalar o Microsoft IIS na VM myVmWeb a partir do PowerShell:

Install-WindowsFeature -name Web-Server -IncludeManagementTools

Depois de concluída a instalação do IIS, desligue da VM myVmWeb, permanecendo na ligação de ambiente de trabalho remoto da VM myVmMgmt. Para exibir a tela de boas-vindas do IIS, abra um navegador da Internet e navegue até http://myVmWeb.

Desligue da VM myVmMgmt.

No computador, introduza o seguinte comando do PowerShell para obter o endereço IP público do servidor myVmWeb:

Get-AzPublicIpAddress `
  -Name myVmWeb `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Para confirmar se consegue aceder ao servidor Web myVmWeb a partir de fora do Azure, abra um browser no computador e navegue para http://<public-ip-address-from-previous-step>. A ligação é bem-sucedida, porque a porta 80 pode receber tráfego de entrada da Internet para o grupo de segurança de aplicações myAsgWebServers no qual a interface de rede ligada à VM myVmWeb se encontra.

Clean up resources (Limpar recursos)

Quando não for mais necessário, você pode usar Remove-AzResourceGroup para remover o grupo de recursos e todos os recursos que ele contém:

Remove-AzResourceGroup -Name myResourceGroup -Force

Próximos passos

Neste artigo, você criou um grupo de segurança de rede e o associou a uma sub-rede de rede virtual. Para saber mais sobre os grupos de segurança de rede, veja Descrição geral dos grupos de segurança de rede e Manage a network security group (Gerir um grupo de segurança de rede).

O Azure encaminha o tráfego entre sub-redes por predefinição. Em alternativa, pode optar por encaminhar o tráfego entre sub-redes através de uma VM que funcione, por exemplo, como uma firewall. Para saber como, consulte Criar uma tabela de rotas.