Faaaaaaalaa Pessoall! Tudo certim? Sussa? Tudo tranquilex?

Eu queria ter escrito esse post há algum tempo atrás (mas por um lado foi até bom eu não ter escrito, algumas coisas mudaram de uns meses pra cá, nesse recurso especificamente no Azure), porém eu acabei encontrando tempo agora então lá vai.

Bom, vamos falar um pouco nesse post sobre Infraestrutura em Cloud Computing. Mais específicamente sobre VPN (Virtual Private Network).

Vamos aprender a criar uma VPN S2S (Site-to-Site) no Azure, interligando nosso ambiente On Premises com a Cloud Computing de maneira segura e prática.

Mas antes de tudo, vamos aprender um pouquinho sobre VPN?

Você já tinha ouvido falar sobre VPN? Sabe o que significa? Como implementar? Não?

Sem problemas, vamos lá!

Imagine o seguinte cenário:

Você é o proprietário de uma empresa de Logística, responsável pela logística de enormes cliente do ramo de vendas. Seu escritório cresceu bastante, e surgiu a oportunidade de abrir novas filiais.

Porém, você lida com dados muito precisos e minuciosos (tipo segredo de negócio mesmo) e cada cliente possui um comportamento típico e próprio. Logo, a segurança da informação é obrigatória em sua organização.

Agora vem a pergunta: Como você vai fazer para uma filial se comunicar com a outra, ou até mesmo com a Matriz, utilizando alguma forma mais em conta financeiramente?

Pois se você optar por contratar um link dedicado, ficaria muito caro e em algumas vezes com baixíssima qualidade e velocidade. E se você resolver interligá-las através da internet, ficaria muito fácil ter o acesso indevido aos dados de seu cliente, uma vez que os dados de sua empresa iriam trafegar em links públicos de telefonia, onde diversos cyber-criminosos possuem acesso e inclusive fazem extração de dados pessoais e empresariais.

Complexo né?

E se eu te falar, que você pode utilizar a internet que você já possui, para fazer uma comunicação entre as 2 localidades, porém com um método totalmente SEGURO e PRÁTICO?

Sim Sim, não estou blefando! O nome disso é VPN (Virtual Private Network) ou Rede Privada Virtual.

VPN (Virtual Private Network) ou Rede Virtual Privada

Uma VPN é uma extensão de sua rede privada, utilizando como infraestrutura uma rede pública (internet). Com isso foi possível conectar unidades de negócio distintas (Matriz x Filial x Terceiros) substituindo a necessidade de ter um link dedicado para isso (custa caro viu? Rs). Além do mais possibilita a comunicação segura entre dois pontos, utilizando um meio totalmente não confiável para entregar as informações (internet).

Basicamente, cria-se um túnel de comunicação em um meio aberto/inseguro [internet] onde toda a informação que trafega dentro do túnel está criptografada e ilegível para quem não possui a chave.

Porém, temos alguns detalhes que devem ser temos alguns detalhes (ou pontos de atenção) que devem ser listados aqui:

1] Preciso de um hardware específico

Ou seja. Você vai precisar de um firewall ou equipamento que faça essa conexão. Uma vez que toda a mensagem que chega, é criptografada. Logo, tenho que descriptografar e entregar ao remetente correto e vice versa. (Toda mensagem que sai, tenho que criptografá-la).

2] VPN não garante as pontas

Como assim? Eu garanto o TRÁFEGO seguro de informações entre 2 pontas. Porém, eu não garanto que as 2 pontas não vão estar infectadas com vírus, spywares, trojans, etc. Ou seja, se eu tenho uma filial infectada, eu posso sim passar essa infecção para a outra filial, através da  VPN. Logo, não exclui a real necessidade de termos um software de Antivírus, IPS, IDS, etc nas bases.

3] “Complexa” implementação?

Depende. Uma implementação de VPN deve ser estudada antes de ser feita. Deve-se decidir qual protocolo será utilizado entre os equipamentos, IP de entrada, IP de saída, range de IP para comunicação, palavra passe, etc. Logo, é necessário que você tenha um pouco de expertise, ou pelo menos leia sobre o assunto e até mesmo sobre protocolo que você vai utilizar, formas de implementação e como a comunicação do seu negócio ficará após a implementação. Existem negócios que se tornaram extremamente dependentes de VPN, logo, estude também uma forma de garantir um “”FailOver” (ou seja, um Plano B)” , caso o túnel ou método principal pare de funcionar.

4] Gargalo de Rede

Quando falamos em redes de computadores, é impossível não pensarmos em tráfego, performance, gargalo e por aí vai. Logo muito cuidado ao implementar uma VPN por conta disso. Uma boa arquitetura de VPN (ao meu ver) é aquela que a implementa em um link secundário, sem concorrência de tráfego.

Como assim?

Para melhor performance, é ideal que você utilize um balanceador de carga (geralmente, alguns firewalls fazem isso com maestria, o FORTIGATE por exemplo é um deles) que irá dividir a carga de seus links de internet. Logo, o Youtube, Facebook, Linkedin, e-mail, podem passar por um link, enquanto a VPN pode passar por outro link separado. Ou seja, temos uma “banda livre” para nossa conexão VPN, o que resultará em uma boa performance e uma experiência melhor para os usuários. (Diminui a probabilidade de alguém ficar reclamando na sua cabeça por lentidão, ao acessar um arquivo na Matriz. Hahaha)

Mas se o seu caso é de trabalhar com o que tem, tente ao menos limitar a banda de rede para acessos comuns e deixar uma banda dedicada para a VPN. (É apenas uma dica ok? Sua forma de implementaçaõ é livre! Você pode usá-la da maneira que quiser. )

Existem outras particularidades, que não vou listar aqui para que o artigo não fique muito extenso, mas em suma esses pontos acima trazem uma boa cobertura nesse assunto. (Penso eu! Se pensou em algo a mais, fique à vontade para comentar sobre abaixo desse post, ok? 😉 )

Existem vários protocolos disponíveis para implantação de uma VPN, vou listar aqui os mais utilizados/conhecidos:

PPTP (Point-to-Point Tunneling Protocol)

Um dos protocolos de VPN mais antigos (existe desde o Windows 95), esse camarada utiliza a porta TCP 1723 para operar.  Por ser o protocolo mais comum e mais fácil de se configurar, ele tem um enorme comprometimento em sua segurança. Com isso, hackers conseguiram burlá-lo e consequentemente é possível ter acesso à dados (Ataque MITM – Man in The Middle) e inclusive a execução de comandos remotos, utilizando um ataque conhecido como PoPToP. (Dá um Google depois, e pesquise sobre esse ataque)

L2TP (Layer 2 Tunneling Protocol)

Esse protocolo foi definido pelo IETF e ele combina as características do PPTP e um protocolo proprietário da Cisco chamado L2F. A diferença é que ele combina as diretrizes do protocolo PPTP com criptografia, então é mais seguro utilizar ele em uma VPN se compararmos ao protocolo anterior.

IPSec

O IPSec é uma extensão de segurança do protocolo IP (isso mesmo, o protocolo IP que todo mundo já usa e conhece). Basicamente é uma suíte de protocolos que provê segurança no nível de camada IP, através da internet. Possui um mecanismo de troca de chaves de Diffie-Hellman (permite que duas partes não possuam conhecimento uma das outras, e mesmo assim compartilham uma chave secreta, através de um canal de comunicação inseguro [Ex.: INTERNET].), criptografia de chave pública para assinar as trocas de chave, garantindo assim a integridade dos dados e inviabilizando o famoso ataque MITM. Embora ele pareça ser uma MARAVILHA, ele tem a implementação mais complexa e sofre constantemente com problemas de interoperabilidade entre os diversos fabricantes.

SSL

O famoso e muito utilizado Secure Socket Layer, permite a comunicação Site-to-Site (um escritório com o outro escritório) ou Point-to-Site (um usuário com o seu escritório). Sem dúvidas é uma tecnologia que tem o maior crescimento ao longo dos últimos 5 anos, pois traz comodidade, flexibilidade e segurança. E de quebra, ele ainda traz uma mediana implementação, diferente do IPSec.

Lembrando que: Em vários casos, a escolha de qual protocolo ser utilizado não é uma opção, e sim uma recomendação do fabricante e muitas vezes inerente ao equipamento que você possui.

Mas e o Azure? Onde Entra? Agora! Hahaha

VPN on Azure

O Azure possui 2 modelos de implementação de VPN, S2S (Site-to-Site) e P2S (Point-to-Site).

S2S (Site-to-Site):  É um modelo de implantação utilizado para conectar sua rede local (inteira) à rede do Azure, utilizando um túnel com o protocolo IPSec (IKEv1 ou IKEv2).

P2S (Point-to-Site): É um outro modelo de implantação porém, é voltado para conexão de um único dispositivo (independente de onde você esteja) com o Azure. Utiliza o protocolo SSTP (Secure Socket Tunneling Protocol) baseado em SSL, porém tem suporte apenas em plataformas Windows.

Nesse artigo, vamos tratar a criação de uma VPN S2S.

Para isso precisaremos de :

[VNet + Subnet]: Basicamente, precisamos criar uma Rede Virtual (já falei sobre isso aqui no blog, dá uma conferida aqui) com uma Subnet chamada GatewaySubnet, que será utilizada pelo Gateway Virtual.

[Gateway Local]: Um objeto no Azure que carrega informações sobre a rede local, onde desejamos fechar a VPN, como por exemplo range de IP e IP Externo utilizado para fechar o túnel.

[IP Público]: Um IP Público no Azure, o qual será utilizado pelo Gateway Virtual, para trafegar as informações para dentro da assinatura.

[Gateway Virtual]: É um Gateway de Comunicação que envia o tráfego criptografado em uma conexão pública para a conexão local. Basicamente, é composto por duas ou mais máquinas virtuais que são implantadas em uma subnet específica (GatewaySubnet). Essas máquinas são transparentes à nível de usuário (ou seja, você não vê essas máquinas no portal). Elas contém as tabelas de roteamento e os serviços específicos desse gateway. Por isso o Gateway Virtual pode demorar até 45 minutos para ser criado, pois as VMs do Gateway são implementadas com configurações específicas, e inerentes ao ambiente a ser criado.

Os tipos de gateway são:

          Tipo          Máximo de Túneis Máximo de Conexões P2S Máximo da Tx de Transferência

VpnGw1                              30                                                           128                                                              650 Mbps

VpnGw2                              30                                                           128                                                                  1 GbpS

VpnGw3                              30                                                           128                                                             1,25 Gbps

Básico                                 10                                                           128                                                              100 Mbps

Obs.: Cada Gateway possui suas limitações e consequentemente, cobrança diferente. Logo, muito cuidado ao criar um Gateway no Azure.

[Conexão]: Responsável por juntar o Gateway Local e Virtual, e fechamento da conexão através de uma palavra chave (pass key).

Bom passada toda a explicação (sua cabeça deve estar fritando né? Hahaha) vamos para o Powershell, para criarmos nossa conexão VPN S2S:

[1]  Vamos Logar via Powershell, em nossa conta:

[sourcecode language=”powershell”]Login-AzureRmAccount[/sourcecode] [2] Vamos listar nossos grupos de recursos, para sabermos qual devemos utilizar. Caso seja necessário, crie um novo Grupo de Recursos para a VPN. (Lembrando que a VPN é orientada à localização. Ou seja, se você tem um Grupo de Recursos na localização “Brazil South”, somente seus recursos desse Grupo de Recursos estarão aptos a se comunicarem via VPN. (Se não sabe o que é um Grupo de Recursos, relaxa. Clica aqui que eu te explico)

[sourcecode language=”powershell”]Get-AzureRmResourceGroup | Select ResourceGroupName,Location[/sourcecode] [3] Com as informações obtidas com o comando anterior, vamos armazenar as informações nas variáveis:

[sourcecode language=”powershell”]$rg="nome-do-grupo-de-recursos"

$loc="nome-da-location" [/sourcecode] [4] Vamos listar agora as VNets disponíveis para uso nesse nosso grupo de recursos. Caso seja necessário, você pode criar uma VNet nova também. (Não sabe criar? Sem Stress. Clica aqui que te ajudo)

[sourcecode language=”powershell”]Get-AzureRmVirtualNetwork | select name [/sourcecode] [5] Com as informações obtidas com o comando anterior, vamos armazenar as informações nas variáveis:

[sourcecode language=”powershell”]$namevnet="nome-da-vnet"

$vnet = Get-AzureRmVirtualNetwork -Name $namevnet -ResourceGroupName $rg

#Obs.: Nesse comando acima, vamos armazenar a configuração da VNet que vamos utilizar.[/sourcecode] [6] Agora, vamos listar as subnets existentes na VNet que vamos utilizar.

Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $vnet | select Name, AddressPrefix

#Obs.: Caso a Subnet de Gateway (GatewaySubnet) não exista na VNet, ela deverá ser criada.

[7] Com as informações obtidas com o comando anterior, vamos armazenar as informações nas variáveis:

[sourcecode language=”powershell”]$subnetvpn="GatewaySubnet"

$ipsubnetvpn="range-ip-gateway-subnet"

$gwloc="nome-do-gateway-local"

$ippubloc="nome-ip-publico"

$netinter="range-ip-interno"[/sourcecode] [8] Agora, vamos criar o IP Público no Azure, que será utilizado pelo Gateway Virtual.

$azrpubipname=”nome-do-ip”

$azrpubip=New-AzureRmPublicIpAddress -Name $azrpubipname -ResourceGroupName $rg -Location $loc -AllocationMethod Dynamic

[9] E então, vamos criar o Gateway Local, que carregará as informações da rede local, inclusive o IP de saída.

New-AzureRmLocalNetworkGateway -Name $gwloc -ResourceGroupName $rg -Location $loc -GatewayIpAddress $ippubloc -AddressPrefix $netinter

[10] Criaremos o Gateway Virtual, que será utilizado para fecharmos a conexão:

[sourcecode language=”powershell”]$gwvirt="nome-do-gateway-virtual"

$subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name $subnetvpn -VirtualNetwork $vnet

#Obs.: No comando acima, armazenaremos na Variável, as configurações da Subnet de Gateway (GatewaySubnet).

$gwipconfig = New-AzureRmVirtualNetworkGatewayIpConfig -Name GWIPConfig -SubnetId $subnet.Id -PublicIpAddressId $azrpubip.Id

New-AzureRmVirtualNetworkGateway -Name $gwvirt -ResourceGroupName $rg -Location $loc -IpConfigurations $gwipconfig -GatewayType Vpn -VpnType RouteBased -GatewaySku Basic

#Obs.: No comando acima, criamos o Gateway Virtual "Básico" (pode demorar até 45 min). O tipo do Gateway não afeta na demora do processo, apenas no custo.[/sourcecode] [11] E por fim, não menos importante, criaremos a Conexão VPN

[sourcecode language=”powershell”]$vpncon="nome-da-conexão"

$vpnpass="palavra-chave-ip-sec"

$gateway1 = Get-AzureRmVirtualNetworkGateway -Name $gwvirt -ResourceGroupName $rg

$local = Get-AzureRmLocalNetworkGateway -Name $gwloc -ResourceGroupName $rg

New-AzureRmVirtualNetworkGatewayConnection -Name $vpncon -ResourceGroupName $rg -Location $loc -VirtualNetworkGateway1 $gateway1 -LocalNetworkGateway2 $local -ConnectionType IPsec -RoutingWeight 10 -SharedKey $vpnpass[/sourcecode]

E pronto! A conexão já foi criada, agora é só aguardar a configuração a ser feita do lado da empresa com as informações do Azure.

Agora, já podemos trocar dados com o Azure de maneira segura e rápida! ????

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

E por ter demorado um tico a ser escrito, este artigo ganhou um “#PAPODECLOUD” especial para isso, saca só:

 

 

Se gostou, compartilhe esse post! (E olha que esse post tem até vídeo. hahahahaha, Caprichei hein?)

Aguardo você para no próximo post! (Obrigado por sempre vir aqui, de vez em quando! hahaha #tamojunto)

Um Forte Abraço!

Gustavo Magella

#borapranuvem #cloud4all