DEV Community

Cover image for Implantando uma VPN Site-to-Client com PritUNL na AWS via CloudFormation
Alfredo Castro
Alfredo Castro

Posted on

Implantando uma VPN Site-to-Client com PritUNL na AWS via CloudFormation

O acesso seguro a recursos internos de uma infraestrutura de TI tornou-se uma prioridade para empresas e profissionais de tecnologia. Ambientes críticos, como servidores de aplicação, bancos de dados e painéis administrativos, costumam ter suas portas e serviços mais sensíveis isolados da internet pública por questões de segurança. Essa prática é essencial para reduzir a exposição a ataques, mas também cria um desafio: como acessar esses recursos remotamente de forma segura e controlada?

É aí que entra o papel das VPNs (Virtual Private Network). Elas possibilitam a criação de uma conexão criptografada entre o usuário e a rede corporativa, permitindo acesso a recursos internos como se estivesse conectado diretamente na rede interna. Isso não apenas fortalece a segurança, mas também aumenta a flexibilidade e a produtividade das equipes.

Neste tutorial, vamos demonstrar como implantar rapidamente uma VPN Site-to-Client utilizando PritUNL (uma solução open-source robusta e fácil de gerenciar) utilizaremos o AWS CloudFormation para automatizar o provisionamento da infraestrutura.

Pré-requisitos:

É necessário possuir uma conta na AWS com uma VPC previamente configurada, incluindo ao menos uma subnet pública disponível.
Também é necessário acessar o repositório no GitHub e fazer o download dos arquivos PritUNL-EC2.yaml e PritUNL-SSM.yaml, iremos utilizar eles para provisionar o ambiente com o CloudFormation.

📁 Pasta PritUNL no GitHub: https://github.com/alfredotavio/aws/tree/main/PritUNL

Etapa 01 - Parametrização do Ambiente

Nesta etapa, vamos preparar as informações necessárias para subir a infraestrutura, como:

  • Identificar o ID da AMI que será usada (Ubuntu 24.04 ARM).
  • Identificar o range da VPC.

Acesse a console AWS e procure pelo serviço "EC2".

Clique em "Launch instance".
Image description

Em "Quick Start" altere para "Ubuntu", em "Architecture" altere para "64-bit (Arm)".
Image description

Confirme as mudanças clicando em "Confirm changes".
Image description

Copie o ID da AMI no campo "AMI ID" e deixe anotado em um bloco de notas, iremos utilizar está AMI para subir a nossa EC2 (no meu exemplo o ID é ami-07041441b708acbd6).
Image description

Agora vamos anotar o range da VPC, procure pelo serviço "VPC". Em seguida clique em "Your VPCs".
Image description

Em "IPv4 CIDR", anote o range em um bloco de notas, iremos utilizar este range para configurar a rota dentro do PritUNL (no meu exemplo o range é 10.0.0.0/21).
Image description

Etapa 02 - Provisionamento da Instância EC2 via CloudFormation

Aqui vamos criar a stack que irá provisionar a instância EC2 (utilizando o arquivo PritUNL-EC2.yaml).

Acesse a console AWS e procure pelo serviço "CloudFormation".

Clique em "Create stack".
Image description

Selecione "Choose an existing template" e em seguida selecione "Upload a template file". Clique em "Choose file" e selecione o arquivo PritUNL-EC2.yaml baixado do repositório do GitHub. Em seguida clique em "Next".
Image description

Nesta etapa, defina as seguintes configurações:

Em "Stack name", defina o nome da Stack.

Em "ID da AMI", digite o ID da AMI que anotamos na etapa anterior.

Em "VPC", selecione a VPC que iremos utilizar.

Em "Sub-rede", selecione a subnet pública que iremos utilizar.

Em "Par de Chaves (Key Pair)", selecione a chave de sua preferencia.

Em seguida clique em "Next".
Image description

Nesta etapa, apenas marque o checkbox "I acknowledge that AWS CloudFormation might create IAM resources with custom names." e em seguida clique em "Next".
Image description

Confirme as informações e clique em "Submit".
Image description

O CloudFormation irá começar a provisionar a EC2.
Image description

Aguarde até que o CloudFormation finalize a criação dos recursos para seguir com a próxima etapa.
Image description

A Stack irá mostrar "CREATE_COMPLETE" quando finalizar.

Etapa 03 - Implantação da PritUNL na EC2 via CloudFormation e AWS Systems Manager (SSM)

Aqui vamos criar a stack que irá implantar a VPN PritUNL na EC2 (utilizando o arquivo PritUNL-SSM.yaml).

Acesse a console AWS e procure pelo serviço "CloudFormation".

Clique em "Create stack" e em seguida "With new resources (standard)".
Image description

Selecione "Choose an existing template" e em seguida selecione "Upload a template file". Clique em "Choose file" e selecione o arquivo PritUNL-SSM.yaml baixado do repositório do GitHub. Em seguida clique em "Next".
Image description

Em "Stack name", defina o nome da Stack.

Em "EC2InstanceId", selecione a EC2 que provisionamos na etapa anterior.

Em seguida clique em "Next".
Image description

Clique em "Next".
Image description

Confirme as informações e clique em "Submit".
Image description

O CloudFormation irá começar a executar o SSM.
Image description

Aguarde até que o CloudFormation finalize.
Image description

A Stack irá mostrar "CREATE_COMPLETE" quando finalizar.

A execução da implantação pode demorar aproximadamente 5 minutos, para acompanhar o status, faça o seguinte:

Procure pelo serviço "Systems Manager".

No menu lateral a esquerda, clique em "Run Command".
Image description

Aqui você pode verificar o status da execução como "In Progress", clique no ID do "Command ID" para mais informações.
Image description

Nesta tela podemos verificar o ID da instância que está sendo implantada a nossa VPN PritUNL e o status da execução.
Image description
Image description

Assim que finalizar a execução, o status irá mudar para "Success".

Etapa 04 - Criando o registro DNS

Vamos definir e criar a URL que iremos utilizar para acessar o dashboard da VPN PritUNL.

Irei utilizar o domínio alfredocastro.com.br, defini a URL vpn.alfredocastro.com.br para o dashboard da VPN.

Acesse o seu gerenciador de registros DNS do seu domínio e crie o registro abaixo de acordo com o seu cenário:

Tipo Registro Valor Observação
A VPN 34.XX.XXX.247 Elastic IP atribuído à EC2

Vamos obter o endereço IP da EC2 provisionada, acesse a console AWS e procure pelo serviço "EC2".

No menu lateral a esquerda, clique em "Instances".
Image description

Selecione a EC2 "VPN-PritUNL" e em seguida copie o IP Publico no campo "Public IPv4 address".
Image description

Veja um exemplo:
Image description

Para consultar a propagação do registro criado, consulte o site: WhatsMyDNS
Image description

Etapa 05 - Obtendo o usuário e senha padrão da VPN PritUNL

Acesse a console AWS e procure pelo serviço "EC2".

No menu lateral a esquerda, clique em "Instances".
Image description

Selecione a EC2 "VPN-PritUNL" e em seguida clique no botão "Connect".
Image description

Altere o tipo para "Session Manager" e clique no botão "Connect".
Image description

Execute o comando abaixo para obter o usuário e a senha padrão:

cat /opt/pritunl/default_password.txt
Enter fullscreen mode Exit fullscreen mode

Image description

Agora podemos acessar e realizar a configuração da nossa VPN.

Etapa 06 - Configuração inicial da VPN PritUNL

Acesse o dashboard da VPN PritUNL digitando o endereço IP Público em seu navegador.

Digite o Username e Password encontrado na etapa anterior e clique em "Sign in".
Image description

Ao realizar o primeiro acesso será solicitado a configuração inicial, faça as alterações conforme o seu ambiente, neste exemplo, alterei o username do usuário administrador e a sua senha, desativei o acesso por IPv6 e configurei o domínio de acesso para o DNS que criamos na etapa 04 (vpn.alfredocastro.com.br). Após realizar a configuração conforme o seu ambiente, clique em "Save".
Image description

A VPN irá solicitar um certificado Let's Encrypt para o DNS configurado, se tudo ocorrer conforme o planejado será exibida a seguinte mensagem "Successfully saved settings".
Image description

Acesse novamente o dashboard da VPN PritUNL, porém agora acesse utilizando o DNS configurado na etapa anterior, veja que agora exibe um certificado válido gerado pela Let's Encrypt.
Image description

Etapa 07 - Configurando a VPN PritUNL

Acesse o dashboard da VPN PritUNL utilizando o DNS configurado na etapa anterior, digite o Username e Password configurado por você na etapa anterior e clique em "Sign in".
Image description

Altere para a aba "Users".
Image description

Clique em "Add Organization".
Image description

Defina um nome para a sua organização e clique em "Add".
Image description

Será exibida a seguinte mensagem "Successfully added organization", agora clique em "Add User".
Image description

Digite as informações (Nome e email) do usuário que deseja adicionar em sua VPN, selecione a organização que criamos na etapa anterior e defina um código PIN para o usuário (código numérico com pelo menos 6 dígitos). Em seguida clique em "Add".
Image description

Será exibida a seguinte mensagem "Successfully added user", agora clique na aba "Servers".
Image description

Clique em "Add Server".
Image description

Defina um nome para o server da VPN.

No campo "Port" defina uma porta entre 5050 e 5060 está configuração é importante, pois em nosso Security Group da instância está liberado este range de portas.

Caso você queira autenticação MFA (recomendo habilitar para maior segurança), marque o checkbox "Enable Google Authenticator".

Em seguida, clique em "Add".
Image description

Será exibida a seguinte mensagem "Successfully added server", agora clique em "Attach Organization".
Image description

Selecione a organização e o server que você deseja vincular, em seguida clique em "Attach".
Image description

Será exibida a seguinte mensagem "Successfully attached organization", agora clique em "Remove Route" para removermos a rota padrão "0.0.0.0/0".

Se deixarmos a rota padrão, todo o nosso tráfego irá passar pela VPN, nosso objetivo é apenas o tráfego da rede interna (VPC) passe pela VPN.
Image description

Confirme a remoção clicando em "Remove".
Image description

Clique em "Add Route".
Image description

Digite o range de IP da sua VPC, anotamos ele na etapa 01, selecione qual o server deseja vincular o range e clique em "Attach".
Image description

Será exibida a seguinte mensagem "Successfully added route", agora clique em "Start Server".
Image description

Pronto, servidor configurado e pronto para ser utilizado.
Image description

Agora você pode importar o usuário para o client.

Etapa 08 - Importando o usuário para o Client PritUNL

Volte para a aba "Users", em seguida clique no botão parecido com uma corrente "Get temporary profile links" ele fica ao lado do botão parecido com um QR Code.
Image description

Será gerado 4 links temporários que expirão em 24h, iremos utilizar o terceiro link, copie e acesse pelo navegador.
Image description

Primeiro vamos realizar a alteração do código PIN, clique em "Configure Pin".
Image description

Digite o código PIN definido na etapa de criação do usuário e em seguida digite o novo código PIN (código numérico com pelo menos 6 dígitos). Em seguida clique em "Change Pin".
Image description

Será exibida a seguinte mensagem "Pin successfully changed", agora você deve escanear o QR Code em seu Google Authenticator ou similar. Em seguida anote o "Profile URI Link:" iremos utilizar ele no Client PritUNL para importar. Clique no "Download Client" para ser redirecionado para o site da PritUNL para baixar o client.
Image description

Baixe e instale o cliente PritUNL de acordo com a arquitetura do seu sistema operacional (Linux/Windows/MacOS).
Image description

Após instalar o client, abra e clique no botão "Import".
Image description

Cole o Profile URI copiado na etapa anterior e clique em "Import".
Image description

Pronto, usuário importado.

Etapa 09 - Testando a VPN

Com o client aberto, clique no botão "Connect".
Image description

Em "Pin", digite o seu código PIN.

Em "Authenticator Passcode", digite o código aleatório que é gerado no Google Authenticator.

Em seguida clique em "Connect".
Image description

Se as informações estiverem corretas, será exibido o IP do servidor VPN com o tempo de conexão.
Image description

Dentro do dashboard da VPN PritUNL você consegue verificar o status do usuário.
Image description

Agora vamos testar a comunicação com a rede interna (VPC), acesse a console AWS e em seguida acesse o serviço "EC2". Selecione a EC2 da VPN e copie o endereço IP privado.
Image description

Abra um terminal na sua máquina e utilize o comando "telnet" para verificar se você possui acesso a uma porta específica, no meu caso utilizei a porta HTTP 80.

telnet 10.0.0.11 80
Enter fullscreen mode Exit fullscreen mode

Image description

Porta acessada com sucesso nossa VPN está funcionando. Agora podemos liberar o endereço IP privado da nossa instância no SG das demais instâncias EC2 para realizarmos o acesso via VPN.

Espero tê-lo ajudado! Se houver alguma dúvida, não hesite em entrar em contato.

https://alfredocastro.com.br/posts/implantando-uma-vpn-site-to-client-com-pritunl-na-aws-via-cloudformation/

Top comments (0)