Fala Pessoall! Td bem?

Continuando a série #Scriptando, falando um pouco mais sobre os scripts que eu uso no meu dia a dia.

De uma maneira geral, tenho criado muitos scripts rápidos mas que no dia a dia, me ajuda e muito a não ter que utilizar o Portal. (Não que seja ruim, mas às vezes eu preciso ser rápido e prático).

Bom, a dica de hoje é: Como criar uma NSG, e associá-la a uma VNET, usando o Powershell!

Mas e aí? O QUE É NETWORK SECURITY GROUP?

NSG | NETWORK SECURITY GROUP (ou GRUPOS DE SEGURANÇA DE REDE)

Falando abertamente e sem rodeios, podemos comparar uma NSG a um Firewall.

Basicamente uma NSG é um Firewall (lógico) de rede, sua função é filtrar todo o tráfego direcionado a um recurso recurso, e tomar as devidas ações. Uma NSG, contém regras de Entrada (Inbound) e Saída (Outbound) onde elas filtrarão o tráfego de rede direcionado ao seu recurso/vnet.

As NSG’s podem ser associadas a uma VNET ou a uma NIC (Placa de Rede de uma VM), porém é altamente recomendado associar uma NSG a uma VNET e somente em casos específicos ela deve ser associada a apenas um recurso isolado.

Quando uma NSG está associada a uma sub-rede, as regras se aplicam a TODOS os recursos conectados à sub-rede.
Por isso, recomenda-se utilizar uma NSG associada diretamente a uma VNET.

Uma NSG é composta pela sequinte estrutura:

Nome | Nome da NSG e deve ser único em uma regição. Não podemos ter 2 NSG’s com o nome igual na mesma região.

Protocolo | O Azure hoje trabalha com: UDP ou TCP. (O caractere * pode ser utilizado, fazendo menção à TODOS os protocolos)

Portas de Origem | Intervalo de portas de origem: 1-65555.

Portas de Destino | Intervalo de portas de destino: 1-65555. (Portas do recurso Azure)

Endereço de Origem | Endereço ou Range de IP de Origem.

Endereço de Destino | Endereço ou Range de IP de Destino.

Direção | Inbound (Entrada) ou Outbound (Saída)

Prioridade | Um número de 100 à 4096. (Sendo que o número 100 é a regra prioritária [a primeira que será executada], e o número 4096 é a regra com menos prioridade)

Access | Allow (Permitir) ou Deny (Negar)

Uma NSG, já carrega por padrão (default) em sua criação, algumas regras padrão que são definidas pela própria Microsoft, como boas práticas do próprio ambiente.

As regras padrão permitem e restringem o tráfego da seguinte maneira:

Rede virtual: Todo o tráfego que se origina e se destina a uma rede virtual, é PERMITIDO nas direções de ENTRADA e SAÍDA.(Ou seja: Todo o tráfego entre VNETS dentro do Azure é permitido IRRESTRITAMENTE)

Internet: Todo o tráfego de saída é permitido, porém o tráfego de entrada é bloqueado.(Ou seja: Caso seja necessário direcionar algum tráfego de entrada/saída para a internet em uma porta específica, a regra deverá ser criada. Pois por default, TODO O TRÁFEGO PARA A INTERNET É BLOQUEADO)

Balanceador de carga (Load Balancer): Todo o tráfego de entrada é permitido. [O balanceador de carga do Azure permite investigar a integridade de suas VMs e instâncias]. (Sugestão: Exclua essa regra, caso não venha a utilizar)(Ou seja: Todo o tráfego direcionado a um LoadBalancer dentro do Azure é permitido IRRESTRITAMENTE)

 

Curiosidades da NSG

Limites:
Até hoje (27/10/2017) o limite de NSG’s por assinatura é de: (Veja mais sobre outros limites nesse LINK)

Bloqueio de ICMP (ping):

As atuais regras do NSG permitem apenas os protocolos TCP ou UDP. Não há uma tag específica para o ICMP. No entanto, o tráfego ICMP é permitido em uma rede virtual pela regra padrão AllowVNetInBound, que permite o tráfego entre VNets.
O ICMP não é permitido de fora (internet) para dentro (Azure). Uma regra específica deve ser configurada.

Pois beeeemmm!! Vamos colocar a mão na massa?

Criando seu primeiro NSG | Network Security Group (Grupo de Segurança de Rede)

[1] Faça o Login em Sua Assinatura Azure (Powershell)

[sourcecode language=”powershell”]Login-AzureRmAccount[/sourcecode] [2] Criação de alguma variáveis, que serão utilizadas:

[sourcecode language=”powershell”] $rg = ‘nome_do_grupo_de_recursos’
$loc = ‘nome_da_location’
$nsgname = ‘nome_da_nsg’
$vnet = "nome_da_vnet"
[/sourcecode] [3] Criação de uma variável, que irá receber uma regra específica: <Essa regra irá liberar todo o tráfego de Internet>

[sourcecode language=”powershell”] $nsgrule1 = New-AzureRmNetworkSecurityRuleConfig -Name ‘WEB’ -Direction Inbound -Priority 100 -Access Allow -SourceAddressPrefix ‘INTERNET’ -SourcePortRange ‘*’ -DestinationAddressPrefix ‘*’ -DestinationPortRange ‘443’ -Protocol TCP
[/sourcecode] [4] Criação da NSG, inclusive especificando a regra que criamos anteriormente:

[sourcecode language=”powershell”] New-AzureRmNetworkSecurityGroup -Name $nsgname -Location $loc -ResourceGroupName $rg -SecurityRules $nsgrule1
[/sourcecode] [5] Para vincularmos à uma VNEt (Virtual Network), precisaremos guardar em uma variável, as informações da NSG que acabamos de criar:

[sourcecode language=”powershell”] $nsgconfig = Get-AzureRmNetworkSecurityGroup -Name $nsgname -ResourceGroupName $rg
[/sourcecode] [6] Devemos também, armazenar as informações da VNET que irá receber o vínculo com a NSG:

[sourcecode language=”powershell”] $vnetconfig=Get-AzureRmVirtualNetwork -Name $vnet -ResourceGroupName $rg
[/sourcecode] [7] Iremos armazenar na variável $subnetconfig, o nome da Subnet (pertencente à VNET) que iremos vincular à NSG:

[sourcecode language=”powershell”] $subnetconfig = $vnetconfig.Subnets.Name
[/sourcecode] [8] Agora, armazenaremos o prefizo de rede dessa subnet:

[sourcecode language=”powershell”] $vnetconfig.Subnets.AddressPrefix
[/sourcecode] [9] Definiremos então, as configurações da Subnet:

[sourcecode language=”powershell”] Set-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnetconfig -Name $subnetconfig -AddressPrefix $vnetconfig.Subnets.AddressPrefix -NetworkSecurityGroup $nsgconfig
[/sourcecode] [10] E por final, iremos definir as configurações da VNET:

[sourcecode language=”powershell”] Set-AzureRmVirtualNetwork -VirtualNetwork $vnetconfig
[/sourcecode] [11] Para visualizarmos a regra criada, podemos usar o comando abaixo: <Usamos o parêmetro Out-GridView, para trazer uma visualização mais amígavel>

[sourcecode language=”powershell”] (Get-AzureRmNetworkSecurityGroup -Name $nsgname -ResourceGroupName $rg).SecurityRules | Select-Object * | Out-GridView
[/sourcecode] [12] Se quiser visualizar as regras “default”, é só utilizar o comando abaixo:

[sourcecode language=”powershell”] (Get-AzureRmNetworkSecurityGroup -Name $nsgname -ResourceGroupName $rg).DefaultSecurityRules | Select-Object * | Out-GridView
[/sourcecode]

E pronto! Nosso NSG já foi criado, e já está disponível no Azure para utilização.

Simples? Fácil? Rápido? (Deixe seu feedback!)

Nos próximos artigos (#Scriptando), irei falar mais sobre criação de recursos no Azure, usando o Powershell, e como estou fazendo para automatizar minha vida, e ganhar tempo!

Um bjo no coração de vocês!

Um Forte Abraço!

Gustavo Magella

#borapranuvem #cloud4all