Filtrar o tráfego de rede com um grupo de segurança de rede usando a CLI do Azure

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 do Azure antes de começar.

Pré-requisitos

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

  • Este artigo requer a versão 2.0.28 ou posterior da CLI do Azure. Se estiver usando o Azure Cloud Shell, a versão mais recente já está instalada.

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 az group create. O exemplo seguinte cria um grupo de recursos na localização eastus:

az group create \
  --name myResourceGroup \
  --location eastus

Crie um grupo de segurança de aplicativo com az network asg create. 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.

az network asg create \
  --resource-group myResourceGroup \
  --name myAsgWebServers \
  --location eastus

az network asg create \
  --resource-group myResourceGroup \
  --name myAsgMgmtServers \
  --location eastus

Criar um grupo de segurança de rede

Crie um grupo de segurança de rede com az network nsg create. O exemplo seguinte cria um grupo de segurança de rede com o nome myNsg:

# Create a network security group
az network nsg create \
  --resource-group myResourceGroup \
  --name myNsg

Criar regras de segurança

Crie uma regra de segurança com az network nsg rule create. 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:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsg \
  --name Allow-Web-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 100 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "myAsgWebServers" \
  --destination-port-range 80 443

O exemplo a seguir cria uma regra que permite a entrada de tráfego da Internet para o grupo de segurança do aplicativo myMgmtServers pela porta 22:

az network nsg rule create \
  --resource-group myResourceGroup \
  --nsg-name myNsg \
  --name Allow-SSH-All \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 110 \
  --source-address-prefix Internet \
  --source-port-range "*" \
  --destination-asgs "myAsgMgmtServers" \
  --destination-port-range 22

Neste artigo, SSH (porta 22) é exposto à Internet para a VM myAsgMgmtServers . Para ambientes de produção, em vez de expor a porta 22 à Internet, é recomendável que você se conecte aos recursos do Azure que deseja gerenciar usando uma VPN ou conexão de rede privada.

Criar uma rede virtual

Crie uma rede virtual com az network vnet create. O exemplo seguinte cria uma rede virtual com o nome myVirtualNetwork:

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefixes 10.0.0.0/16

Adicione uma sub-rede a uma rede virtual com az network vnet subnet create. O exemplo seguinte adiciona uma sub-rede com o nome mySubnet à rede virtual e associa o grupo de segurança de rede myNsg à mesma:

az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name mySubnet \
  --address-prefix 10.0.0.0/24 \
  --network-security-group myNsg

Criar máquinas virtuais

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

Crie uma VM com az vm create. O exemplo seguinte cria uma VM que vai funcionar como servidor Web. A --asgs myAsgWebServers opção faz com que o Azure torne a interface de rede que cria para a VM um membro do grupo de segurança do aplicativo myAsgWebServers .

A --nsg "" opção é especificada para impedir que o Azure crie um grupo de segurança de rede padrão para a interface de rede que o Azure cria quando cria a VM. Para simplificar este artigo, uma senha é usada. As chaves são normalmente usadas em implantações de produção. Se você usar chaves, também deverá configurar o encaminhamento do agente SSH para as etapas restantes. Para obter mais informações, consulte a documentação do seu cliente SSH. Substitua <replace-with-your-password> no comando a seguir por uma senha de sua escolha.

adminPassword="<replace-with-your-password>"

az vm create \
  --resource-group myResourceGroup \
  --name myVmWeb \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet mySubnet \
  --nsg "" \
  --asgs myAsgWebServers \
  --admin-username azureuser \
  --admin-password $adminPassword

A criação da VM demora alguns minutos. Depois que a VM é criada, a saída semelhante ao exemplo a seguir é retornada:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmWeb",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.0.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

Anote o publicIpAddress. Esse endereço é usado para acessar a VM da Internet em uma etapa posterior. Crie uma VM que vai funcionar como servidor de gestão:

az vm create \
  --resource-group myResourceGroup \
  --name myVmMgmt \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet mySubnet \
  --nsg "" \
  --asgs myAsgMgmtServers \
  --admin-username azureuser \
  --admin-password $adminPassword

A criação da VM demora alguns minutos. Depois que a VM for criada, observe o publicIpAddress na saída retornada. Esse endereço é usado para acessar a VM na próxima etapa. 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 o comando a seguir para criar uma sessão SSH com a VM myVmMgmt . Substitua <publicIpAddress> pelo endereço IP público da sua VM. No exemplo acima, o endereço IP é 13.90.242.231.

ssh azureuser@<publicIpAddress>

Quando for solicitada uma senha, digite a senha inserida em Criar VMs.

A conexão é bem-sucedida, porque a porta 22 é permitida a entrada da Internet para o grupo de segurança do aplicativo myAsgMgmtServers no qual a interface de rede conectada à VM myVmMgmt está.

Use o seguinte comando para SSH para a VM myVmWeb da VM myVmMgmt :

ssh azureuser@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. Você não pode SSH para a VM myVmWeb da Internet porque a regra de segurança para o myAsgWebServers não permite a entrada da porta 22 da Internet.

Use os seguintes comandos para instalar o servidor web nginx na VM myVmWeb :

# Update package source
sudo apt-get -y update

# Install NGINX
sudo apt-get -y install nginx

A VM myVmWeb tem permissão de saída para a Internet para recuperar nginx porque uma regra de segurança padrão permite todo o tráfego de saída para a Internet. Saia da sessão myVmWeb SSH, que o deixa no username@myVmMgmt:~$ prompt da VM myVmMgmt. Para recuperar a tela de boas-vindas nginx da VM myVmWeb , digite o seguinte comando:

curl myVmWeb

Faça logout da VM myVmMgmt . Para confirmar que pode aceder ao servidor Web myVmWeb a partir de fora do Azure, entre a curl <publicIpAddress> partir do seu próprio computador. A conexão é bem-sucedida, porque a porta 80 é permitida a entrada da Internet para o grupo de segurança do aplicativo myAsgWebServers em que a interface de rede conectada à VM myVmWeb está.

Clean up resources (Limpar recursos)

Quando não for mais necessário, use az group delete para remover o grupo de recursos e todos os recursos que ele contém.

az group delete --name myResourceGroup --yes

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.