Proteja Redes Azure com NSGs: Tutorial Passo a Passo

Grupos de Segurança de Rede do Azure ou NSGs do Azure permitem que você filtre o tráfego de rede tanto de entrada quanto de saída, de um ou mais recursos do Azure. Se você já precisou impedir o acesso a um recurso do Azure, é necessário entender como os NSGs funcionam.

Neste artigo, você aprenderá o propósito do NSG do Azure e como configurá-los usando a linguagem de script PowerShell.

Pré-requisitos

  • Um recurso do Azure como alvo. Este tutorial usará uma assinatura paga conforme o uso e uma máquina virtual do Azure com o Windows Server 2019.
  • PowerShell 7+. Versões anteriores do PowerShell podem funcionar, mas este tutorial está usando o PowerShell 7.0.1 para a configuração.
  • O módulo Azure Az do PowerShell

Entendendo os NSGs do Azure

Pense em um NSG do Azure como um firewall. Um firewall consiste em regras que definem ações a serem tomadas no tráfego de entrada e saída, chamadas de conjuntos de regras. Firewalls geralmente vêm com conjuntos de regras padrão que são regras que ditam o que pode e o que não pode atravessar o firewall; os NSGs do Azure têm algo semelhante.

Diferentemente dos firewalls tradicionais, os NSGs do Azure também possuem um conceito na nuvem chamado etiquetas de serviço. As etiquetas de serviço são a forma como a Azure abstrai intervalos de endereços para facilitar sua gestão.

Vamos abordar brevemente cada um desses tópicos importantes.

Usando Etiquetas de Serviço para Simplificar a Configuração de Regras

Em serviços na nuvem, os endereços IP e intervalos podem mudar com frequência. Isso pode tornar a manutenção de conjuntos de regras de intervalo IP da Azure definidas manualmente difícil. Felizmente, a Azure define muitas etiquetas de serviço diferentes que sua regra NSG pode direcionar.

As etiquetas de serviço são um conceito que sempre usará a lista de endereços mais atualizada. Elas são uma maneira de atribuir espaços reservados a conjuntos de intervalos de endereços para facilitar a gestão.

Azure service tags in the Azure portal

Fique Atento aos Conjuntos de Regras Padrão

Ao criar e aplicar um NSG do Azure, você precisa primeiro conhecer as regras que esses NSGs automaticamente aplicam. Essas regras padrão são imutáveis e são criadas tanto para tráfego de entrada quanto de saída.

Cada regra em um conjunto de regras do NSG do Azure possui uma prioridade. A prioridade dita a ordem de operação ou quais regras substituem outras. Se, por exemplo, existir uma regra com prioridade 65000 que bloqueia todo o tráfego de entrada e você criar uma regra com prioridade 64999 que permite a porta 80, o NSG do Azure bloqueará todo o tráfego, exceto a porta 80.

Default Azure NSG rule priorities

As regras padrão não podem ser alteradas, mas você pode substituí-las usando uma regra de prioridade mais alta, conforme mostrado acima. Cada uma dessas regras se aplica a todos os protocolos, como TCP, UDP e ICMP.

Certifique-se de que suas regras usem um número menor que 65500 para substituir as regras padrão!

Ao criar um NSG do Azure, você verá várias regras padrão:

Regras de entrada

  • AllowVNetInBound – Essa regra de entrada contém todos os intervalos de endereços IP definidos para a rede virtual e todos os espaços de endereço conectados no local. Além disso, essa regra contém redes virtuais conectadas, redes virtuais conectadas a um gateway de rede virtual, endereço IP virtual do host e quaisquer prefixos de endereço usados em rotas definidas pelo usuário. Essa regra é definida com prioridade 65000.
  • AllowAzureLoadBalancerInBound – A marca de serviço AzureLoadBalancer se traduz para o endereço IP virtual do host, 168.63.129.16, onde a sonda de saúde do Azure se origina. O tráfego real não passa por aqui e, se você não usar o Balanceamento de Carga do Azure, essa regra pode ser substituída. O endereço IP virtual do host existe em todas as regiões especificamente para fornecer serviços essenciais de infraestrutura, como DHCP, DNS, IMDS e monitoramento de saúde. Essa regra é definida com prioridade 65001.
  • DenyAllInbound – Configurada como a última regra, usando a prioridade 65500, essa regra nega todo o tráfego de entrada não explicitamente permitido.

Regras de saída

  • AllowVNetOutBound – Isso contém todas as faixas de endereços IP definidas para a rede virtual, todas as espaços de endereços conectados localmente, redes virtuais conectadas, redes virtuais conectadas a um gateway de rede virtual, endereço IP virtual do host e quaisquer prefixos de endereço usados em rotas definidas pelo usuário. Essa regra é configurada com uma prioridade de 65000.
  • AllowInternetOutBound – Espaço de endereço IP fora da rede virtual e alcançável pela internet pública. Inclui o intervalo de endereços do espaço de endereço IP público de propriedade do Azure. Essa regra é configurada com uma prioridade de 65001.
  • DenyAllOutBound – Assim como no conjunto de regras de entrada, essa regra é definida como a última regra, usando a prioridade 65500. Essa regra de saída negará todo o tráfego não explicitamente permitido.

Construindo NSGs do Azure com PowerShell

Chega de conversa, vamos colocar a mão na massa e começar a construir alguns NSGs do Azure com PowerShell! Supondo que você esteja no seu console do PowerShell e autenticado, continue lendo.

Relacionado: Connect-AzAccount: Sua Porta de Entrada para o Azure com PowerShell

Para criar um NSG do Azure com o PowerShell, você precisa de um comando; New-AzNetworkSecurityGroup. Para criar um NSG com este comando, forneça o nome, o nome do grupo de recursos para criar o NSG e a localização.

O exemplo de código abaixo está utilizando o cmdlet New-AzNetworkSecurityGroup para criar um NSG chamado NSG-MyVM no grupo de recursos Articles, localizado no datacenter Azure eastus.

$Params = @{
  'Name'              = 'NSG-MyVM'
  'ResourceGroupName' = 'Articles' 
  'Location'          = 'centralus'
}

$NSG = New-AzNetworkSecurityGroup @Params

Criando Regras do NSG do Azure com o PowerShell

Depois de ter o NSG, o conjunto padrão de regras provavelmente não é suficiente. Você precisará criar suas próprias regras.

Configurando uma Regra de Entrada para o Protocolo de Área de Trabalho Remota

A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.

Adicionar uma nova regra de entrada a um NSG existente requer três etapas:

  1. Executar o comando Get-AzNetworkSecurityGroup para recuperar o NSG existente.
  2. Executar o comando Add-AzNetworkSecurityRuleConfig para criar a regra.
  3. Executar o comando Set-AzNetworkSecurityGroup para aplicar essa regra ao NSG.

O exemplo de código abaixo está utilizando o Get-AzNetworkSecurityGroup para recuperar um NSG existente. Em seguida, uma regra é definida usando o Add-AzNetworkSecurityRuleConfig, que é então aplicada ao NSG existente usando o cmdlet Set-AzNetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

$Params = @{
  'Name'                     = 'allowRDP'
  'NetworkSecurityGroup'     = $NSG
  'Protocol'                 = 'TCP'
  'Direction'                = 'Inbound'
  'Priority'                 = 200
  'SourceAddressPrefix'      = 'my.ip.address'
  'SourcePortRange'          = '*'
  'DestinationAddressPrefix' = '*'
  'DestinationPortRange'     = 3389
  'Access'                   = 'Allow'
}

Add-AzNetworkSecurityRuleConfig @Params | Set-AzNetworkSecurityGroup

O parâmetro de Prioridade determina quando a regra é avaliada, o valor de 200 está próximo ao topo, já que 4096 é a regra de menor prioridade.

Frequentemente, o tráfego de saída não é bloqueado, pois pode ser desafiador conhecer todas as portas possíveis que uma aplicação pode precisar usar. Felizmente, você pode encontrar algumas recomendações especializadas de filtragem de saída do Instituto SANS, uma organização amplamente confiável em padrões de segurança da informação.

Para implementar as recomendações da SANS, podemos seguir os mesmos três passos fornecidos acima, mas desta vez criar uma regra com várias portas e com uma Direção de Saída, em vez de Entrada.

  • MS RPC – TCP e UDP porta 135
  • NetBIOS/IP – TCP e UDP portas 137-139
  • SMB/IP – TCP porta 445
  • Protocolo de Transferência de Arquivos Triviais (TFTP) – UDP porta 69
  • Syslog – UDP porta 514
  • Protocolo Simples de Gerenciamento de Rede (SNMP) – UDP portas 161-162

O código abaixo recupera uma regra existente do NSG usando o cmdlet Get-AzNetworkSecurityGroup. Uma regra de saída é definida usando o Add-AzNetworkSecurityRuleConfig e aplicada via cmdlet Set-AzNetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

$Params = @{
  'Name'                     = 'DenySANSOutBound'
  'NetworkSecurityGroup'     = $NSG
  'Protocol'                 = '*'
  'Direction'                = 'Outbound'
  'Priority'                 = 4000
  'SourceAddressPrefix'      = '*'
  'SourcePortRange'          = '*'
  'DestinationAddressPrefix' = 'Internet'
  'DestinationPortRange'     = @('135', '137','139','445','69','514','161','162')
  'Access'                   = 'Deny'
}

Add-AzNetworkSecurityRuleConfig @Params | Set-AzNetworkSecurityGroup

Claro, alguns dessas portas são valiosas e necessárias, dependendo dos serviços que você está fornecendo. Provavelmente, será necessário personalizar esta lista, dependendo do que sua aplicação requer, o que geralmente é fornecido pelo fornecedor ou usando uma ferramenta como o \texttt{netstat} para encontrar portas abertas, como netstat.

Relacionado: Encontrando Portas com Netstat e PowerShell

Configurando um NSG do Azure para uma Sub-rede Específica

Talvez você tenha segmentado seu espaço de rede virtual através de sub-redes. Para obter mais granularidade, você pode aplicar NSGs a uma sub-rede específica, controlando assim o tráfego de forma mais detalhada dentro dessa sub-rede.

O trecho de código abaixo está encontrando um prefixo de endereço inteiro e aplicando um NSG a ele.


# Recupere uma Rede Virtual existente
$VNet = Get-AzVirtualNetwork -Name 'Articles-vnet' -ResourceGroupName 'Articles'
# Recupere um NSG existente
$NSG  = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName 'Articles'

# Selecione a primeira sub-rede usando a notação de array e o primeiro registro localizado no índice 0
$Params = @{
    'VirtualNetwork'       = $VNet
    'Name'                 = ($VNet.Subnets[0]).Name
    'AddressPrefix'        = ($VNet.Subnets[0]).AddressPrefix
    'NetworkSecurityGroup' = $NSG
}

# Aplique a configuração atualizada à configuração da sub-rede e, em seguida, aplique a alteração à VNet
Set-AzVirtualNetworkSubnetConfig @Params
Set-AzVirtualNetwork -VirtualNetwork $VNet

Em seguida, aprenda a usar interfaces de rede para segmentar ainda mais e limitar NSGs apenas ao que pode ser necessário, como uma interface de rede.

Aplicando um NSG do Azure a uma Interface de Rede

Similar ao funcionamento das sub-redes, você pode aplicar regras NSG diretamente a uma interface de rede. Esse nível de granularidade geralmente é desnecessário, mas quando você tem várias interfaces de rede por máquina virtual, pode fazer sentido aplicar conjuntos de regras diferentes aos NICs individuais conforme necessário.

Similar à definição de limitação de sub-rede, você pode aplicar regras a um NIC individual. Nesse caso, você está utilizando o cmdlet Get-AzNetworkInterface para recuperar um NIC específico na VM fornecida. Isso terá o NSG previamente criado definido na propriedade NetworkSecurityGroup.

$NSG = Get-AzNetworkSecurityGroup -Name "MyVM-nsg" -ResourceGroupName "Articles"
$NIC = Get-AzNetworkInterface -name "MyVM-vm-nic"
 
$NIC.NetworkSecurityGroup = $NSG
$NIC | Set-AzNetworkInterface

E quanto ao diagnóstico e análise de tráfego por meio de um NSG? Continue lendo para aprender sobre os registros de fluxo do NSG e como você pode utilizá-los!

Depuração e solução de problemas com Registros de Fluxo NSG

Ao longo da criação e uso do NSG, você pode descobrir que precisa de mais depuração para solucionar uma regra quebrada ou analisar o tráfego. Os registros de fluxo são um recurso do Azure Network Watcher que registra informações sobre o tráfego IP que passa por um NSG.

Uma vez que o Azure Network Watcher captura o tráfego de rede, ele armazena esses dados em uma Conta de Armazenamento do Azure. Usando o PowerShell, você pode configurar os registros de fluxo NSG do Azure para analisar essa conta de armazenamento do Azure e depurar e solucionar problemas de forma mais eficaz.

Relacionado: Como Baixar e Instalar a Ferramenta AzCopy

Habilitar registros de fluxo NSG consiste em três etapas básicas no PowerShell:

  1. Registre o provedor Microsoft.Insights.
  2. Crie um Operational Insights Workspace para armazenar os dados.
  3. Habilite o log de fluxo NSG com o comando Set-AzNetworkWatcherConfigFlowLog.

Para facilitar a configuração dos Azure NSG Flow Logs, o código PowerShell abaixo simplificará as etapas necessárias. Notavelmente, este código cria um Operational Insights Workspace e associa uma configuração de Flog Log à assinatura correta, workspace e NSG.

$resourceGroupName = '<some resource group name>'
$NetworkWatcher = Get-AzNetworkWatcher -Name '<some name>' -ResourceGroupName $resourceGroupName
$NSG            = Get-AzNetworkSecurityGroup -Name 'NSG-MyVM' -ResourceGroupName $resourceGroupName
$StorageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name '<storage account name>'
$Subscription   = Get-AzSubscription -SubscriptionName '<your subscription name>'

$Workspace = New-AzOperationalInsightsWorkspace -Location 'centralus' -Name "DefaultWorkspace-$($NSG.Name)-Articles" -Sku 'Standard' -ResourceGroupName $resourceGroupName

$Params = @{
  'NetworkWatcher'         = $NetworkWatcher
  'TargetResourceId'       = $NSG.Id
  'StorageAccountId'       = $StorageAccount.Id
  'EnableFlowLog'          = $True
  'FormatType'             = 'JSON'
  'FormatVersion'          = 2
  'EnableTrafficAnalytics' = $True
  'WorkspaceResourceId'    = $Workspace.ResourceId
  'WorkspaceGUID'          = $Workspace.CustomerId
  'WorkspaceLocation'      = 'centralus'
}

Set-AzNetworkWatcherConfigFlowLog @Params

Os logs de fluxo contêm muitas propriedades diferentes, como é típico em logs de firewall. Isso inclui propriedades como IP de origem e destino, portas, protocolos e carimbos de hora. Os logs das versões 1 e 2 têm uma grande diferença, sendo que a versão 2 possui o conceito de estado de fluxo. Isso marca a continuação e a terminação de um fluxo junto com informações sobre a largura de banda do tráfego.

Próximos Passos

Os NSGs do Azure são ferramentas poderosas para limitar e auditar o tráfego para um recurso. Usados de forma eficaz, você pode garantir adequadamente seus recursos e infraestrutura. Com capacidades de auditoria por meio dos logs de fluxo NSG e a capacidade de limitar os NSGs a sub-redes ou adaptadores de rede, você tem a flexibilidade necessária para delimitar as regras conforme necessário e verificar se todo o tráfego está conforme o esperado.

Source:
https://adamtheautomator.com/azure-nsg/