Redes Azure Seguras com NSGs: Tutorial Passo a Passo

Grupos de Segurança de Rede do Azure ou Azure NSGs 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ê vai aprender o propósito do Azure NSG e como configurá-los com a linguagem de script PowerShell.

Pré-requisitos

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

Compreendendo 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 rulesets. Firewalls geralmente vêm com rulesets 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 similar.

Ao contrário dos firewalls tradicionais, os NSGs do Azure também possuem um conceito em nuvem chamado tags de serviço. As tags de serviço são a forma como o Azure abstrai intervalos de endereços para torná-los mais fáceis de gerenciar.

Vamos abordar brevemente cada um desses tópicos importantes.

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

Em serviços em nuvem, endereços IP e intervalos podem mudar com frequência. Isso pode tornar difícil manter conjuntos de regras de intervalo de IP do Azure definidos manualmente. Felizmente, o Azure define muitas diferentes tags de serviço que sua regra NSG pode direcionar.

Tags de serviço são um conceito que sempre utilizará a lista de endereços mais atualizada. As tags de serviço são uma forma de atribuir espaços reservados a conjuntos de intervalos de endereços para facilitar o gerenciamento.

Azure service tags in the Azure portal

Esteja Ciente dos Conjuntos de Regras Padrão

Ao criar e aplicar um NSG do Azure, você primeiro precisa conhecer as regras que esses NSGs aplicamautomaticamente. 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 NSG do Azure tem 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

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 – Esta regra de entrada contém todas as faixas de endereços IP definidas para a rede virtual e todas as redes de endereços conectadas localmente. Além disso, esta regra contém redes virtuais pareadas, 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. Esta regra é configurada com prioridade 65000.
  • AllowAzureLoadBalancerInBound – A marca de serviço AzureLoadBalancer se traduz no endereço IP virtual do host, 168.63.129.16, de onde se origina a sonda de saúde do Azure. O tráfego real não passa por aqui, e se você não usar o Balanceamento de Carga do Azure, esta 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. Esta regra é configurada com prioridade 65001.
  • DenyAllInbound – Configurada como a última regra, usando a prioridade 65500, esta regra nega todo o tráfego de entrada não explicitamente permitido.

Regras de Saída

  • AllowVNetOutBound – Este contém todos os intervalos de endereços IP definidos para a rede virtual, todos os espaços de endereços conectados no local, redes virtuais conectadas por pares, 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. Esta regra é definida com uma prioridade de 65000.
  • AllowInternetOutBound – Espaço de endereço IP que está fora da rede virtual e acessível pela internet pública. Inclui o intervalo de endereços do espaço de endereço IP público de propriedade do Azure. Esta regra é definida com uma prioridade de 65001.
  • DenyAllOutBound – Assim como no conjunto de regras de entrada, esta regra é definida como a última regra, usando a prioridade 65500. Esta regra de saída negará todo o tráfego não explicitamente permitido.

Construindo NSGs do Azure com PowerShell

Chega de conversa, vamos sujar as mãos 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: Seu Portal para o Azure com PowerShell

Para criar um NSG do Azure com 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 abaixo 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 NSG do Azure com 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.

Para adicionar uma nova regra de entrada a um NSG existente, são necessários três passos:

  1. Execute o comando Get-AzNetworkSecurityGroup para recuperar o NSG existente.
  2. Execute o Add-AzNetworkSecurityRuleConfig para criar a regra.
  3. Execute 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 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 Prioridade determina quando a regra é avaliada, o valor de 200 está perto do topo, já que 4096 é a regra de prioridade mais baixa.

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, é possível encontrar algumas recomendações especializadas de filtragem de saída do Instituto SANS, uma organização amplamente confiável para padrões de segurança da informação.

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

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

O código abaixo recupera uma regra NSG existente usando o cmdlet Get-AzNetworkSecurityGroup. Uma regra de saída é definida usando o Add-AzNetworkSecurityRuleConfig e aplicada através do 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, você precisará personalizar esta lista dependendo do que seu aplicativo requer, que geralmente são fornecidos pelo fornecedor ou usando uma ferramenta para encontrar portas abertas como netstat.

Relacionado: Encontrando Portas com Netstat e PowerShell

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

Talvez você tenha segmentado seu espaço de rede virtual por meio de sub-redes. Para obter mais granularidade, você pode aplicar NSGs apenas a uma sub-rede específica, controlando assim o tráfego de forma granular nessa sub-rede.

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

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

# Selecionar 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
}

# Aplicar a configuração atualizada à configuração da sub-rede e, em seguida, aplicar a mudança à 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 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ê possui várias interfaces de rede por máquina virtual, pode fazer sentido aplicar conjuntos diferentes de regras às NICs individuais conforme necessário.

Similar à limitação da sub-rede, você pode aplicar regras a uma NIC específica. Neste caso, você está usando o cmdlet Get-AzNetworkInterface para recuperar uma NIC específica na VM fornecida. Isso terá o conjunto NSG previamente criado atribuído à 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 do tráfego por meio de um NSG? Continue lendo para saber mais sobre os logs de fluxo do NSG e como você pode usá-los!

Debugando e Resolvendo Problemas com Logs de Fluxo do 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 Fluxos de Logs são um recurso do Azure Network Watcher que registra informações sobre o tráfego IP passando por um NSG.

Assim 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 logs de fluxo do Azure NSG para analisar essa conta de armazenamento do Azure e depurar e solucionar problemas com mais eficácia.

Relacionado: Como Baixar e Instalar a Ferramenta AzCopy

A ativação dos logs de fluxo do NSG consiste em três etapas aproximadas 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 Logs de Fluxo NSG do Azure, o código PowerShell abaixo simplificará as diferentes etapas necessárias. Notavelmente, este código cria um Operational Insights Workspace e associa uma configuração de Log de Fluxo com a assinatura correta, espaço de trabalho 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 data e hora. Os logs das versões 1 e 2 têm uma grande diferença, pois a versão 2 possui o conceito de estado de fluxo. Isso marca a continuação e término de um fluxo junto com informações de 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 maneira eficaz, você pode proteger 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 definir regras conforme necessário e verificar se todo o tráfego está conforme o esperado.

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