Azure

DNS Server Personal Multi cloud em Infraestrutura Híbrida

Neste artigo venha trazer um modelo de DNS Personal multi cloud em infraestrutura Híbrida, não estou certo nem errado para promover essa infraestrutura de DNS, quero apenas mostrar como uma infraestrutura de DNS Personal em alta disponibilidade Multi Cloud pode ser altamente recomendada em ambientes Híbrido Multi Cloud.

Bom chegar de falar e vamos lá.

Primeiramente vamos separar aqui os papeis, DNS é DNS e AD é AD, certo disso, então vamos a mão na massa. (Não vou entrar muito em detalhes de topologia e configurações, aqui será mais uma visão macro da infraestrutura de DNS Personal)

Vamos ao nosso ambiente On Premises.

Temos em nosso em ambiente local as seguintes configurações:

Site SP Paulista

Rede: 10.128.0.0/22
Servidores AD: 02
Servidores DNS: 04

Active Directory

Domain AD: glbx.corp
IP: 10.128.0.1 (BRSPPTAAD01)
IP: 10.128.0.2 (BRSPPTAAD02)
Reverse Zone: Secundary 10.128.1.2 (Zone Primary)
Foward Zone DNS: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox

DNS Server
IP: 10.128.1.1 (BRSPPTADNS01)
IP: 10.128.1.2 (BRSPPTADNS02)
IP: 10.128.1.3 (BRSPPTADNS03)
IP: 10.128.1.4 (BRSPPTADNS04)
Domínios DNS Personal: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox
Reverse Zone: 10.128
Foward Zone DNS: azure.net, windows.net, azure.com à 168.63.129.16
Foward Zone DNS: glbx.corp  10.128.0.1/10.128.0.2
DHCP Server
10.128.0.65 (BRSPPTADHCP01)
10.128.0.66 (BRSPPTADHCP01)
Scope
Vlan100 10.128.3.0/26
Vlan101 10.128.3.64/26
Vlan102 10.128.3.128/26
Vlan103 10.128.3.192/26
DNS1: 10.128.3.254
DNS2: 10.128.3.253

Topologia On Premises

Estrutura Azure

Site Azure BR SAO
Rede: 10.128.4.0/22
Servidores AD: 02
Servidores DNS: 04

Active Directory
Domain AD: glbx.corp
IP: 10.128.4.68 (BRSAOAZUAD01)
IP: 10.128.4.69 (BRSAOAZUAD02)
Reverse Zone: Secundary 10.128.1.2 (Zone Primary)
Foward Zone DNS: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox

DNS Server
IP: 10.128.4.135 (BRSAOAZUDNS01)
IP: 10.128.4.136 (BRSAOAZUDNS02)
IP: 10.128.4.137 (BRSAOAZUDNS03)
IP: 10.128.4.138 (BRSAOAZUDNS04)
Domínios DNS Personal: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox
Reverse Zone: 10.128
Foward Zone DNS: azure.net, windows.net, azure.com à 168.63.129.16
Foward Zone DNS: glbx.corp  10.128.4.68/10.128.4.69

Internel Load Balance
VIP1: 10.128.4.254
VIP2: 10.128.4.253

DNS Personal Vnet
DNS1: 10.128.4.254
DNS2: 10.128.4.253

Estrutura AWS

Site AWS BR SAO
Rede: 10.128.8.0/22
Servidores AD: 02
Servidores DNS: 04

Active Directory
Domain AD: glbx.corp
IP: 10.128.8.68 (BRSAOAWSAD01)
IP: 10.128.8.69 (BRSAOAWSAD02)
Reverse Zone: Secundary 10.128.1.2 (Zone Primary)
Foward Zone DNS: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox

DNS Server
IP: 10.128.8.135 (BRSAOAWSDNS01)
IP: 10.128.8.136 (BRSAOAWSDNS02)
IP: 10.128.8.137 (BRSAOAWSDNS03)
IP: 10.128.8.138 (BRSAOAWSDNS04)
Domínios DNS Personal: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox
Reverse Zone: 10.128
Foward Zone DNS: azure.net, windows.net, azure.com –> 168.63.129.16
Foward Zone DNS: glbx.corp  10.128.4.68/10.128.4.69

Internel Load Balance
VIP1: 10.128.8.254
VIP2: 10.128.8.253

DNS Personal Vnet
DNS1: 10.128.8.254
DNS2: 10.128.8.253

Topologia DNS AWS

E por fim chegamos em nossa infraestrutura DNS com Alta disponibilidade em ambiente multi Cloud Híbrido.

Temos em nossos servidores de DNS as seguintes zonas Domínios DNS Personal: intranet, intracorp, dc, corp, infra, homolg, dev, pp, uat, qa, prod, sandbox
Reverse Zone: 10.128
Foward Zone DNS: glbx.corp (cada servidor DNS faz o Foward para seu respectivo AD Local)
Exemplo Azure faz  Forward para BRSAOAZUAD01 e BRSAOAZUAD01
Exemplo AWS faz Forward para BRSAOAWSAD01 e BRSAOAWSAD01
Exemplo On Premises faz Forward para BRSAOPTAAD01 e BRSAOPTAAD01

Veja nossa infra completa

Criando Virtual Machine CentOS Azure CLI (bash) com acesso via chave publica/privada

Neste artigo iremos criar uma Maquina Virtual com CentOS Linux utilizando uma Vnet existente e fixando IP (rede interna), criaremos também um NSG para esta VM, um storage account para diagnostico de boot e conjunto de disponibilidade e com acesso via chave publica/privada sem a necessidade de utilizar senha.

#!/bin/bash

##Declarando variáveis

##Declarando variáveis (Obrigatório)

export Subscription_Name=”Azure Subscription”
export RG_Name=”Nome do Resource Group”
export Location=”Azure Region”
export Object_Name=”Nome do Objeto”

##Storage Accout

export Storage=”Nome do Storage Account” ##Exemplo storagevmdiag##
export SKU_Storage=”SKU do Storage Account” ##Exemplo Standard_LRS##

##Conjunto de Disponibiliade Availability Set

export Name_AV_SET=”AV-SET”-“Nome do Conjunto de Disponibilidade”
export Fault_Domain=”3″
export Update_Domain=”20″

##Network Security Group NSG

export NSG_Name=”Nome do NSG” ##Exemplo NSG-VM-Frontend##

##Vnet Existente (Variáveis para utilizar Vnet Existente)

export RG_Vnet=”Nome do Resurce Goup onde encontra-se a Vnet existente”
export Subnet_Name=”Nome da subnet existente”
export Vnet_Name=”Nome da Vnet existente”

##Variáveis de Rede (Obrigatório)

export NIC_Name=”Nome da interface de rede”
export Accelerated=”False ou true”

##Variavel para criacao da VM (Obrigatório)

export Image_SO=”CentOS”
export VM_Name=”Nome do servidor”
export User_Name=”azroot”
export key_PUB=”Local da chave publica” ##Exemplo /script/key/chave_publica.pub## caminho absoluto
export Size=”Tier da VM”
export SKU_STG=”Sku do Disco” ## Disco ## Exemplo Standard_LRS###

##Variaveis TAGs (Não Obrigatório)

export Costacenter=”Centro de Custos”
export Value_Costcenter=”Numero do centos de custo”
export Environment=”Environment”
export Environment_Value=”Ambiente” ##’Desenvolvimento’-‘Homologação’-‘Produção’##
export Depto=”Departamento” ##Squad-Team-Time##
export Depto_Value=”Nome do Departamento” ##infra-cartões-telecom

###Execução do Script

###Selecionar subscription

az account set –subscription “${Subscription_Name}”

###Criando Resource Group

az group create -n “${RG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Storage Accout

az storage account create -g “${RG_Name}” -n “${Storage}” -l “${Location}” –sku “${SKU_Storage}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Network Security Group NSG

az network nsg create -g “${RG_Name}” -n “${NSG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criar Grupo de Disponibilidade

az vm availability-set create -g “${RG_Name}” -n “${Name_AV_SET}” –platform-fault-domain-count “${Fault_Domain}” –platform-update-domain-count “${Update_Domain}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declarando variável para utilizar Vnet existente (Obrigatório)

SUBNET_ID001=$(az network vnet subnet show –name “${Subnet_Name}” –vnet-name “${Vnet_Name}” -g “${RG_Vnet}” –query id –output tsv)
export IPConfig_Name=”ipconfig1″

###Criando NIC (Interface de rede)

az network nic create –name “${NIC_Name}” -g “${RG_Name}” –subnet $SUBNET_ID001 –accelerated-networking “${Accelerated}” –network-security-group “${NSG_Name}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declaranado Variaveis para Fixar IP

NIC_ID001=$(az network nic show –name “${NIC_Name}” -g “${RG_Name}” –query id –output tsv)

###Declarando varivel para utilizar IP Fixo existente (Obrigatório)

IP_ID001=$(az network nic ip-config show -g “${RG_Name}” -n “${IPConfig_Name}” –nic-name “${NIC_Name}” –query privateIpAddress –output tsv)

###Fixando IP na interface de rede#Fixando IP

az network nic ip-config update -g “${RG_Name}” –nic-name “${NIC_Name}” -n “${IPConfig_Name}” –private-ip-address $IP_ID001

###Criando Virtual Machine CentOS

az vm create –name “${VM_Name}” -g “${RG_Name}” -l “${Location}” –availability-set “${Name_AV_SET}” –boot-diagnostics-storage “${Storage}” –image “${Image_SO}” –nics $NIC_ID001 –admin-username “${User_Name}” –ssh-key-values “${key_PUB}” –size “${Size}” –storage-sku “${SKU_STG}”

Links de referencia

https://docs.microsoft.com/en-us/cli/azure/vm/image?view=azure-cli-latest
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/cli-ps-findimage
https://docs.microsoft.com/pt-br/cli/azure/
https://docs.microsoft.com/en-us/cli/azure/vm?view=azure-cli-latest#az_vm_create
https://docs.microsoft.com/en-us/rest/api/compute/virtual-machines/create-or-update#osprofile
https://docs.microsoft.com/pt-br/azure/virtual-machines/availability-set-overview
https://docs.microsoft.com/pt-br/azure/virtual-network/network-security-groups-overview

Link para geração da chave
https://charlessantana.com.br/2021/10/20/criando-chave-publica-e-private-com-puttygen/

Criando Chave Publica e Private com PuttyGen

Vou ensinar a criar uma chave publica e privada utilizando Putty Gen para acesso a VMs linux no Azure.

1-) Baixar e instalar o putty gen
https://www.puttygen.com/download-putty#PuTTY_for_windows

2-) Gerar a chave Publica

Abra o Putty Gen e clique em “generate”

Agora fique mexendo o mouse até gerar a chave

Isso mesmo, mexendo o mouse se deixar o mouse parado ele não criar a chave

3-) Teremos esse resultado

4-) Agora vamos salvar e guardar em algum lugar seguro a chave publica, clique em “File” depois ‘Save Public Key”

Escolha o nome da chave e clique em “save”

5-) Agora vamos salvar a chave privada

Clique em “File” depois “Save Private Key”

Ele irá perguntar se vai salvar sem senha a chave (isso senha para poder acessar a chave), clique em “yes” para deixar como esta mesmo.

Escolha um local seguro para guardar a chave privada, a chave será salva no formato .ppk

Pronto agora temos uma chave publica para acessar a VMs no Azure, no proximo artigo iré ensinar a criar uma VM Linux com acesso via chave publica.

Criando Virtual Machine (CentOS – Linux) Azure CLI (Bash)

Neste artigo iremos criar uma Maquina Virtual com CentOS Linux utilizando uma Vnet existente e fixando IP (rede interna), criaremos também um NSG para esta VM, um storage account para diagnostico de boot e conjunto de disponibilidade.

Vamos ao script

#!/bin/bash
#|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#|||Script Charles Aureliano Santana|||
#|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

##Declarando variaveis
export Subscription_Name=”Azure Subscription”
export RG_Name=”Nome do Resource Group”
export Location=”Azure Region”
export Object_Name=”Nome do Objeto”

##Storage Accout
export Storage=”Nome do Storage Account” ##Exemplo storagevmdiag##
export SKU_Storage=”SKU do Storage Account” ##Exemplo Standard_LRS##

##Conjunto de Disponibiliade Availability Set
export Name_AV_SET=”AV-SET”-“Nome do Conjunto de Disponibilidade”
export Fault_Domain=”3″
export Update_Domain=”20″

##Network Security Group NSG
export NSG_Name=”Nome do NSG” ##Exemplo NSG-VM-Frontend##

###Vnet Existente (Variaveis para utilizar Vnet Existente)
export RG_Vnet=”Nome do Resurce Goup onde encontra-se a Vnet existente”
export Subnet_Name=”Nome da subnet existente”
export Vnet_Name=”Nome da Vnet existente”

##Variaveis de Rede (Obrigatório)
export NIC_Name=”Nome da interface de rede”
export Accelerated=”False ou true”

##Variavel para criacao da VM (Obrigatório)
export Image_SO=”SKU Image Azure” ##Exemplo ‘CentOS’
export VM_Name=”Nome do Servidor” “”15 caracteres
export User_Name=”Usuário do SO”
export PWD=”Senha do usuário do SO”
export Size=”Standard_D2S_v3″ ## Tier da VM
export SKU_STG=”Standard_LRS” ## Disco ##

##Variaveis TAGs (Não Obrigatório)
export Costacenter=”Centro de Custos”
export Value_Costcenter=”Numero do centos de custo”
export Environment=”Environment”
export Environment_Value=”Ambiente” ##’Desenvolvimento’-‘Homologação’-‘Produção’##
export Depto=”Departamento” ##Squad-Team-Time##
export Depto_Value=”Nome do Departamento” ##infra-cartões-telecom

##Execução do Script
###Selecionar subscription
az account set –subscription “${Subscription_Name}”

###Criando Resource Group
az group create -n “${RG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Storage Accout
az storage account create -g “${RG_Name}” -n “${Storage}” -l “${Location}” –sku “${SKU_Storage}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Network Security Group NSG
az network nsg create -g “${RG_Name}” -n “${NSG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criar Grupo de Disponibilidade
az vm availability-set create -g “${RG_Name}” -n “${Name_AV_SET}” –platform-fault-domain-count “${Fault_Domain}” –platform-update-domain-count “${Update_Domain}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declarando varivel para utilizar Vnet existente (Obrigatório)
SUBNET_ID001=$(az network vnet subnet show –name “${Subnet_Name}” –vnet-name “${Vnet_Name}” -g “${RG_Vnet}” –query id –output tsv)
export IPConfig_Name=”ipconfig1″

###Criando NIC (Interface de rede)
az network nic create –name “${NIC_Name}” -g “${RG_Name}” –subnet $SUBNET_ID001 –accelerated-networking “${Accelerated}” –network-security-group “${NSG_Name}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declaranado Variaveis para Fixar IP
NIC_ID001=$(az network nic show –name “${NIC_Name}” -g “${RG_Name}” –query id –output tsv)

###Declarando varivel para utilizar IP Fixo existente (Obrigatório)
IP_ID001=$(az network nic ip-config show -g “${RG_Name}” -n “${IPConfig_Name}” –nic-name “${NIC_Name}” –query privateIpAddress –output tsv)

###Fixando IP na interface de rede#Fixando IP
az network nic ip-config update -g “${RG_Name}” –nic-name “${NIC_Name}” -n “${IPConfig_Name}” –private-ip-address $IP_ID001

###Criando Virtual Machine CentOS Linux
az vm create –name “${VM_Name}” -g “${RG_Name}” -l “${Location}” –availability-set “${Name_AV_SET}” –boot-diagnostics-storage “${Storage}” –image “${Image_SO}” –nics $NIC_ID001 –admin-username “${User_Name}” –admin-password “${PWD}” –size “${Size}” –storage-sku “${SKU_STG}”

Links de referencia

https://docs.microsoft.com/en-us/cli/azure/vm/image?view=azure-cli-latest
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/cli-ps-findimage
https://docs.microsoft.com/pt-br/cli/azure/
https://docs.microsoft.com/en-us/cli/azure/vm?view=azure-cli-latest#az_vm_create
https://docs.microsoft.com/en-us/rest/api/compute/virtual-machines/create-or-update#osprofile
https://docs.microsoft.com/pt-br/azure/virtual-machines/availability-set-overview
https://docs.microsoft.com/pt-br/azure/virtual-network/network-security-groups-overvie






Criando Virtual Machine Azure (Windows Server) CLI (bash)

Neste artigo iremos criar uma Maquina Virtual com Windows utilizando uma Vnet existente e fixando IP (rede interna), criaremos também um NSG para esta VM, um storage account para diagnostico de boot e conjunto de disponibilidade.

Vamos ao script

#!/bin/bash

##Declarando variaveis
export Subscription_Name=”Subscription Azure”
export RG_Name=”Nome do Resource Group”
export Location=”Azure Region”
export Object_Name=”Nome do Objeto”

##Storage Accout

##Conjunto de Disponibiliade Availability Set
export Name_AV_SET=”Nome do Grupo de Disponibilidade”

##Network Security Group NSG
export NSG_Name=”Nome do NSG##Exemplo NSG-VM-Frontend##
export Fault_Domain=”3″
export Update_Domain=”20″

##Vnet Existente (Variaveis para utilizar Vnet Existente)
export RG_Vnet=”Resource Grupo Vnet existente”
export Subnet_Name=”subnet-existente”
export Vnet_Name=”Vnet existente”

##Variaveis de Rede (Obrigatório)
export NIC_Name=”NIC”-“${Object_Name}”
export Accelerated=”False”

##Variavel para criacao da VM (Obrigatório)
export Image_SO=”Win2019Datacenter”
export VM_Name=”SRVWEBSERVER01″
export User_Name=”azroot”
export PWD=”@edRc%2010T$3U”
export Size=”Standard_D2S_v3″
export SKU_STG=”Standard_LRS” ## Disco ##

##Variaveis TAGs (Não Obrigatório)
export Costacenter=”Centro de Custos”
export Value_Costcenter=”111245″
export Environment=”Environment”
export Environment_Value=”Produção”
export Depto=”Departamento”
export Depto_Value=”Recursos Humanos”

###Execução do Script

###Selecionar subscription
az account set –subscription “${Subscription_Name}”

###Criando Resource Group
az group create -n “${RG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Storage Accout
az storage account create -g “${RG_Name}” -n “${Storage}” -l “${Location}” –sku “${SKU_Storage}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criando Network Security Group NSG
az network nsg create -g “${RG_Name}” -n “${NSG_Name}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Criar Grupo de Disponibilidade
az vm availability-set create -g “${RG_Name}” -n “${Name_AV_SET}” –platform-fault-domain-count “${Fault_Domain}” –platform-update-domain-count “${Update_Domain}” -l “${Location}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declarando varivel para utilizar Vnet existente (Obrigatório)
SUBNET_ID001=$(az network vnet subnet show –name “${Subnet_Name}” –vnet-name “${Vnet_Name}” -g “${RG_Vnet}” –query id –output tsv)
export IPConfig_Name=”ipconfig1″

###Criando NIC (Interface de rede)
az network nic create –name “${NIC_Name}” -g “${RG_Name}” –subnet $SUBNET_ID001 –accelerated-networking “${Accelerated}” –network-security-group “${NSG_Name}” –tags “${Costacenter}”=”${Value_Costcenter}” “${Environment}”=”${Environment_Value}” “${Depto}”=”${Depto_Value}”

###Declaranado Variaveis para Fixar IP
NIC_ID001=$(az network nic show –name “${NIC_Name}” -g “${RG_Name}” –query id –output tsv)

###Declarando varivel para utilizar IP Fixo existente (Obrigatório)
IP_ID001=$(az network nic ip-config show -g “${RG_Name}” -n “${IPConfig_Name}” –nic-name “${NIC_Name}” –query privateIpAddress –output tsv)

###Fixando IP na interface de rede
###Fixando IP
az network nic ip-config update -g “${RG_Name}” –nic-name “${NIC_Name}” -n “${IPConfig_Name}” –private-ip-address $IP_ID001

###Criando Virtual Machine Windows Server 2019
az vm create –name “${VM_Name}” -g “${RG_Name}” -l “${Location}” –availability-set “${Name_AV_SET}” –boot-diagnostics-storage “${Storage}” –image “${Image_SO}” –nics $NIC_ID001 –admin-username “${User_Name}” –admin-password “${PWD}” –size “${Size}” –storage-sku “${SKU_STG}”

Links de referencia

https://docs.microsoft.com/pt-br/cli/azure/

https://docs.microsoft.com/pt-br/azure/virtual-machines/availability-set-overview

https://docs.microsoft.com/pt-br/azure/virtual-network/network-security-groups-overview

Infraestrutura de rede (Vnet) com Azure Firewall na Borda.

Neste artigo venho apresentar uma topologia utilizando Cloud Azure, com 7 Vnets ligadas por peering, gateway de VPN com BGP e Azure Firewall.

Nesta topologia todas as subnets estão com route table 0.0.0.0/0 para o IP da interface do nosso Azure Firewall

0.0.0.0/0 –> 10.128.0.68

Desta maneira temos total segregação da rede (Azure Vnet), onde cada projeto/departamento tem sua propria vnet.
Desta forma a vnet por exemplo do RH não fala com a Vnet de Marketing (Somente se for criada regras de Firewall) e o porque de utilizar desta forma.

Na minha visão tem que ser “cada um no seu quadrado”, não porque estamos em cloud que esse pensamento deve mudar, desta maneira tornamos nosso ambiente mais seguro, protegemos nossas cargas de trabalhos, deixamos cada ambiente totalmente isolado, segredado e seguro.

Na borda nos temos Azure Firewall com default route, onde ele controla tudo que entra e sai da nossa rede.

Topologia Azure Firewall

Exemplos de regras na pratica

Temos nesta topologia dois servidores de DNS (Windows Server 2019):

AZUEASTDNS01 e AZUEASTDNS02 (dentro do dominio glbx.corp)

AZUEASTDNS01.glbx.corp (10.128.8.4)
AZUEASTDNS02.glbx.corp (10.128.9.4)

Esses servidores são os DNS Server padrão de todas as nossas vnets

Veja como ficaria a regra de Azure Firewall para que toda “Resolução de Nomes” seja liberada: (Neste exemplo não estamos utilizando Firewall Manager)

Foi criada a seguinte regra

Name: dns vnet resoler
Protocol: TCP/UDP
Source: 10.128.0.0/16 (Estou utilizando este CIDR neste exemplo)
Destination Address: 10.128.8.4,10.128.9.4 (Nossos servidores DNS)
Destination Port: 53

Firewall Rule DNS Vnet

Conforme regra criada acima, todas as vnet que estão fazendo peering, e com route default 0.0.0.0/0 para o IP no nosso Azure Firewall, iram conseguir resolver nomes utilizando nossos servidores DNSs.

Vamos a outro exemplo pratico.

Em nosso ambiente temos dois servidores web (Windows Server 2019 com IIS) que hospeda a intranet da empresa, na frente deste servidores temos um load balance fazendo o balanceamento da carga, que possui o IP 10.128.11.196

Para os colaboradores acessarem a infraestrutura da empresa, existe uma VPN IPSec com BGP comunicando o ambiente OnPremises e o ambiente do Azure

A regra para liberar o acesso dos colaboradores ao nosso ambiente “intranet” seria assim:

Name: acesso rede interna – intranet
Protocol: TCP
Source: 10.127.0.0/22 (Este CIDR é da rede OnPremises)
Destination Address: 10.128.11.196 (IP do Load Balance)
Destinaton Port: 80/443

Nossos colaboradores seguiram este caminho

Notebook –> Firewall OnPremises –> Rota BGP –> Gateway Azure –> Route Default Azure –> Azure Firewall –> IP do Load Balance

Nossa intranet utiliza banco de dados Azure Database SQL (PaaS), para este modelo criamos um Azure Database SQL (PaaS) com private link e bloqueamos totalmente o acesso externo (Internet) ele só é acessivel via rede interna.

Link para utilização de private link com DNS Personal (Neste exemplo utilizamos desta forma)

https://docs.microsoft.com/pt-br/azure/private-link/private-endpoint-dns

Regra de Firewall

Name: acesso rede interna – intranet
Protocol: TCP
Source: 10.128.10.4,10.128.11.4
Destination Address: 10.128.4.10 (IP do Private Link que criamos)
Destinaton Port: 1433

Com esta regra nossa aplicação “intranet” conseguirá acessar o banco de dados PaaS via rede interna.

Outro exemplo pratico, neste cenário iremos expor uma aplicação para internet

Iremos expor nosso Site Institucional para a internet, temos este ambiente

Frontend: Application Gateway com IP Privado, peering com nossa vnet master, porém na subnet onde esta hospedado nossa application gateway não possui route default 0.0.0.0/0 para nosso AzureFirewall

Iremos utilizar o recurso de NAT para expor nosso site com destino um Appplication Gateway (não irei ensinar neste exemplo com criar/configurar um application gatewaY)

Name: acesso site institucional
Protocol: TCP
Source: * (qualquer lugar da internet)
Destination Address: 20.72.175.158 (IP previamente criado a atachado ao azure firewall)
Destinaton Port: 443
Translate Adress: 10.128.4.10 (IP privado do Application Gateway)
Translate Port: 443

Com a regra de firewall criada acima nosso site institucional ficará exposto para a internet com proteção de anti-DDoS do Azure que esta em nossa borda e por Application Gateway (WAF) na frente da aplicação.

Essa topologia não esta certa nem errada, eu acredito que é possivel deixar seu ambiente totalmente segredado, seguro, com um ponto unico de acesso e ainda conseguir utilizar todos os recurso do Azure de forma segura.

Bom é isso pessoal, fiquem a vontade para criticar/sugestionar

Outra coisa importante que se deve levar em conta, se no seu ambiente se faz necessário estabelecer comunicação com outras empresas, parceiros cliente etc….pense em utilizar a o proprio gateway de VPN BGP, porém pense que seu cliente da VPN IPSec não poderá utilizar a mesma rede que seu ambiente, neste exemplo o CIDR 10.128.0.0/16 e nem 10.127.0.0/22, para resolver essa questão você pode estabelecer a VPN IPSec em seu ambiente OnPremises e fazer o roteamento dos pacotes para seu ambiente no Azure (recomendo somente se não for critico, pois se seu ambiente OnPremises ficar indisponivel a VPN ficará também), outra solução seria criar um nova Vnet (Para deixar o ambiente segredado) e criar um Virtual Appliance como por exemplo “Fortigate” (Pode ser Palo Alto, SonicWall, PFSense), com a Vnet criada, faça o peering com a vnet master para propagação BGP, e NÃO deixe como rota default as subnets do fortigate para o AzureFirewall, depois disso bastas estabelecer o tunnel IPSec com seu parceiro e criar as devidas rotas na tabela de roteamento e as regras no Azure Firewall.

Adicionando Vnet a infraestrutura existente com Peering e propagação BGP, via CLI (Bash) Azure

Como vimos em nossa seria de artigos de criação de vnet, peering, bgp e VPN IPSec com BGP, vamos criar mais uma vnet em nossa infraestrutura já existente. Veja nossos artigos nas sequencia:

Criando Vnet com Tags via CLI (Bash) Azure
Criando Virtual Network Gateway (VPN com BGP) Azure via CLI (Bash)
Criando Virtual Network com Peering via CLI (Bash) Azure
Criando Peering Virtual Network (Azure) via CLI (Bash) com Gateway de propagação.
Criando Local Network Gateway com BGP – VPN IPSec Fortigate.

Vamos ao script

#!/bin/bash
#Declarando variaveis
##Selecionar subscription

export Subscription_01=’Santana-Corp’

##região
export Location=brazilsouth

##Environmont
export Environment_01=’backend-Prodution’

##Resouce Group
export RG_Name01=”${Environment_01}”-Network

##Vnet Name
export Vnet_01=vnet-“${Environment_01}”

##Nome do Objeto
export NameObject_01=”${Vnet_01}”

##Projeto
export Projecto_01=’Backend’
export ID_Object=’678654789′

##Centro de Custo
export Costcenter_Team=’Team Backend’
export Costcenter_Number=’78954′

##Suporte Acionamento
export Support_Team=’[email protected]
export Support_Number=’+55 11 3000-XXXX’

##CIDR Network (Prefixo da Rede)
export CIDR_01=’172.29.226.0/24′

##Nome subnet
export Subnet_01=sub01-“${NameObject_01}”
export Subnet_02=sub02-“${NameObject_01}”
export Subnet_03=sub03-“${NameObject_01}”
export Subnet_04=sub04-“${NameObject_01}”

##CIDR Subnet
export prefix_01=’172.29.226.0/26′
export prefix_02=’172.29.226.64/26′
export prefix_03=’172.29.226.128/26′
export prefix_04=’172.29.226.192/26′

##Tags
export Tag01_Key=”${Environment_01}”
export Tag02_Key=”${Projecto_01}”
export Tag03_Key=”${ID_Object}”
export Tag04_Key=”${Costcenter_Team}”
export Tag05_Key=”${Costcenter_Number}”
export Tag06_Key=”${Support_Team}”
export Tag07_Key=”${Support_Number}”
export Name_Value_01=’Environment’
export Name_Value_02=’Projeto’
export Name_Value_03=’ID Projeto’
export Name_Value_04=’Centro de Custo Team’
export Name_Value_05=’Centro de Custo Number’
export Name_Value_06=’Time de Suporte’
export Name_Value_07=’Telefone do Suporte’

#Seleciona Subscription
az account set –subscription “$Subscription_01”

#Criando Resource Groups
az group create –name “${RG_Name01}” –location $Location –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}”

#Criando Virtual Network (Vnet)
az network vnet create -g “${RG_Name01}” -n “${NameObject_01}” –address-prefix $CIDR_01 –location $Location –tags “${Name_Value_01}”=”${Tag01_Key}” “${Name_Value_02}”=”${Tag02_Key}” “${Name_Value_03}”=”${Tag03_Key}” “${Name_Value_04}”=”${Tag04_Key}” “${Name_Value_05}”=”${Tag05_Key}” “${Name_Value_06}”=”${Tag06_Key}” “${Name_Value_07}”=”${Tag07_Key}” 

#Criando Subnet
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_01 –address-prefixes $prefix_01
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_02 –address-prefixes $prefix_02
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_03 –address-prefixes $prefix_03
az network vnet subnet create -g “${RG_Name01}” –vnet-name “${NameObject_01}” -n $Subnet_04 –address-prefixes $prefix_04

##Variaveis para criação do Peering

#Subscriptions
export Subscription_01=’Santana-COrp’

#Resouce Group
export RG_Name01=”Shared-Prodution-Network”export RG_Name02=”backend-Prodution-Network”

#Name Object
export NameObject_01=”${Vnet_01}”-“${Subscription_01}”-“${Environment_01}”

#Peering
export Vnet_Name_01=”vnet-Shared-Prodution”
export Vnet_Name_02=”vnet-backend-Prodution”
export Peering_01=”Peering-vnet-Shared-Prodution2″
export Peering_02=”Peering-backend-Prodution-Network”

#export Vnet_Remote=$(az network vnet show –resource-group Shared-Prodution-Network -n vnet-Shared-Prodution –query id –output tsv)

#Vnet Remote
export Vnet_Remote_01=”/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/backend-Prodution-Network/providers/Microsoft.Network/virtualNetworks/vnet-backend-Prodution”
export Vnet_Remote_02=”/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/Shared-Prodution-Network/providers/Microsoft.Network/virtualNetworks/vnet-Shared-Prodution”

#Selecionar subscription
az account set –subscription “${Subscription_01}”

#Criando Peering
## Vnet Shared Prodution

az network vnet peering create -g “${RG_Name01}” -n “${Peering_01}” –vnet-name “${Vnet_Name_01}” –remote-vnet “${Vnet_Remote_01}” –allow-vnet-access –allow-forwarded-traffic –allow-gateway-transit –allow-vnet-access

## Vnet Backend Prodution
az network vnet peering create -g “${RG_Name02}” -n “${Peering_02}” –vnet-name “${Vnet_Name_02}” –remote-vnet “${Vnet_Remote_02}” –allow-vnet-access –allow-forwarded-traffic –allow-vnet-access –use-remote-gateways

Veja o resultado

Em nosso fortigate

Com isso concluimos nossa seria de Vnet com peering e propagação BGP, a cada vnet nova criada com peering (utilizando as configuração aqui exibidas) não é necessário fazer mais nada em nosso fortigate ou Gateway de VPN, um lembrete muito importante as redes não podem se sobscrever (Over lapping).

Criando entradas Azure DNS via CLI (bash)

Muitas vezes precisamos criar varios entradas em nosso DNS, utilizando o portal do Azure é bem simples, agora imagina ter que repitir a mesma ação por 20 vezes por exemplo para poder criar 20 entras diferentes? Com isso criei este post para ajudar no dia a dia da administração do Azure DNS, isso será feito via CLI, veja como instalar o azure cli aqui.

Primeiramente iremos nos conectar (usarei neste exemplo ubuntu linux como subsystem windows 10)

#Conectar no Azure
az login (enter)

#Selecionando a subscription (supondo que tenha mais de uma)
az account set –subscription “Santana Corp”

az network dns record-set a add-record –resource-group dns \
–zone-name charlessantana.com –record-set-name hello \
–ttl 300 –ipv4-address 192.0.78.24

Resultado

Agora vamos verificar se funcionou, com um simples nslookup

nslookup hello.charlessantana.com


Agora vamos criar uma entrada do tipo CNAME

az network dns record-set cname set-record –resource-group dns \
–zone-name charlessantana.com –record-set-name ww2 –cname ‘www.charlessantana.com.br

Script simples em bash

#!/bin/bash

#Seleciona Subscription

az account set –subscription “Santana Corp”

#Criando entrada DNS do Tipo A

az network dns record-set a add-record –resource-group dns \
–zone-name charlessantana.com –record-set-name hello –ttl 300 –ipv4-address 192.0.78.24

#Criando entrada DNS do Tipo CNAME

az network dns record-set cname set-record –resource-group dns \
–zone-name charlessantana.com –record-set-name ww2 –cname ‘www.charlessantana.com.br’

Configurar uma conexão VNet com VNet

Uma rede VNet nada mais é do que uma comunicação entre os datacenters do Windows Azure, um bom exemplo seria criar maquinas virtuais no no Sul do Brasil e um na Asia e depois interligalos.

http://msdn.microsoft.com/pt-br/library/azure/dn690122.aspx

VNet

VPN Site-To-Site Windows Azure

Passo a passo para configurar um VPN Site-To-Site com Windows Azure, com isso você consegue ter a comunicação entre sua rede local e a rede do Windows Azure

http://msdn.microsoft.com/pt-br/library/azure/dn133795.aspx

image