Por Alessandro Mauro, Criado em 04/05/2020
O que é uma VPN?
Uma Virtual Private Network (Rede Privada Virtual) ou VPN consiste em uma rede de comunicação privada configurada sobre uma rede pública. Sendo uma forma de realizar a conexão de dois pontos distintos pela rede pública (internet por exemplo), ao invés de se utilizar uma infraestrutura de links dedicados ou rede de pacotes. Graças a essa solução é possível realizar transferência de informações/arquivos de forma criptografada, rápida e segura.
Conhecimento necessário
É recomendável, porém não necessário, um conhecimento prévio sobre os seguintes temas:
- Conexão remota com servidores Linux/Windows;
- Conceitos de DNS;
- Gerenciamento de Certificados via AWS ACM;
Pré-requisitos
Para realizar a criação de um AWS Client VPN você precisa:
- As permissões necessárias para trabalhar com endpoints do AWS ClientVPN;
- Uma VPC com pelo menos uma sub-rede, um gateway da Internet e uma rota para o gateway da Internet;
- Possuir uma versão do AWS CLI instalada na estação de trabalho;
- Possuir a ferramenta do OpenVPN instalada na estação de trabalho(Linux Ubuntu);
- Possuir a ferramenta AWS Client VPN (Windows e MAC);
- Possuir a ferramenta Putty (para realizar conexões com servidores Linux);
- Verificar se o AWS Client e suas dependências estão disponíveis para sua região de trabalho;
Passo 1: Chaves e Certificados
Para gerar os certificados é necessário criar um OpenSSL Easy-RSA. Em estações de trabalho Linux temos acesso a ele através do seguinte comando: git clone https://github.com/OpenVPN/easy-rsa.git
Em seguida abra a pasta dos arquivos baixados: cd easy-rsa/easyrsa3
Para estações de trabalho Windows é necessário uma versão superior à disponibilizada acima (3.0), nós para esse Passo-a-Passo utilizamos Easy-rsa 3.0.7. Após realizar o download do arquivo, descompacte ele e inicialize o “EasyRSA-Start.bat”;
Inicialize um novo ambiente PKI: ./easyrsa init-pki
Crie um certificado do domínio: ./easyrsa build-ca nopass Será questionado para inserir um valor, nele podemos inserir “vpn.dominio.do.cliente” por exemplo, para facilitar o reconhecimento posteriormente;
Comando para gerar o certificado e chave que será atrelado ao Servidor que queremos acessar: ./easyrsa build-server-full NomeDoServidor nopass
Comando para gerar certificado e chave para o cliente: ./easyrsa build-client-full Dominio.do.cliente nopass
NOTA: É de convenção, e considerado como boa prática, que seja criado chaves particulares para cada usuário, pois assim facilita o controle de acesso dos funcionários em caso de remanejamento ou desligamento do mesmo (exemplo: usuario.dominio.do.cliente).
Agora copie os arquivos para uma única pasta para um melhor controle: mkdir ~/novaPasta/ cp pki/ca.crt ~/novaPasta/ cp pki/issued/NomeDoServidor.crt ~/novaPasta/ cp pki/private/NomeDoServidor.key ~/novaPasta/ cp pki/issued/Dominio.do.cliente.crt ~/novaPasta/ cp pki/private/Dominio.do.cliente.key ~/novaPasta/
Verificar se todos os arquivos se encontram na pasta: cd ~/novaPasta/ ls
Passo 2: Importação dos certificados
Para realizar a importação do certificado do servidor para o Console de Gerenciamento AWS insira o seguinte comando: aws acm import-certificate --certificate file://NomeDoServidor.crt --private-key file://NomeDoServidor.key --certificate-chain file://ca.crt --region regiaoDesejada
Em seguida realize a importação do certificado do Client que foi gerado.
Nota: Caso exista a necessidade de se inserir em múltiplas regiões, será necessário inserir uma de cada vez.
É possível realizar a importação através do Console de Gerenciamento AWS
Nota: Caso os certificados de Client tenham sido emitidos por CAs diferentes é necessário que os mesmos sejam também sejam importados.
Passo 3: Criando um Endpoint
No Management Console, vá até Client VPN Endpoints, localizado dentro de VPC.
Selecione Create Client VPN Endpoint:
O primeiro bloco de informações é referente à identificação da rede de VPN published
Para preencher o campo Client IPv4 CIDR é necessário que a rede seja no mínimo /22 e no máximo /12. Caso tenha dúvidas você poderá calcular esse valor com uma calculadora de subnets.
NOTA: No campo Client IPv4 CIDR refere-se ao bloco de IPs no qual os usuários irão se conectar à rede, não coloque a mesma rede que sua VPC caso contrário poderá impactar em seu ambiente. Essa informação não pode ser alterada após a criação.
O segundo bloco é referente à autenticação do servidor
NOTA: No campo Server certificate ARN deve-se selecionar o certificado do servidor gerado no Passo 1. No campo Authentication Options será selecionado Use mutual authentication e em seguida deve-se selecionar o certificado do cliente também gerado no Passo 1.
O terceiro bloco é referente a criação de logs
NOTA: É altamente recomendável, e considerado como boa prática, que seja habilitada a configuração de logs, pois assim ficará registrado sempre que houver uma tentativa de autenticação para a rede.
O quarto bloco é referente as configurações adicionais
NOTA: Nesse bloco é possível configurar os servidores de DNS, para resolução de nome dentro da rede, escolher o protocolo de transferência (UDP sendo o selecionado por padrão), habilitar Split-tunnel (permitindo o uso da rede normal para aplicações e serviços que não tem como destino servidores dentro da VPC).
Após realizar todas as configurações basta selecionar o botão Create Client VPN Endpoint
Passo 4: Habilitando a conectividade de VPN para Clientes
Na página Client VPN Endpoints do Manegement Console selecione a opção Associatons e em seguida Associate, conforme a figura abaixo
Nesta tela é necessário realizar a associação com a VPC desejada e sua respectiva Subnet da rede desejada
Passo 5: Autorizando a conectividade com o cliente
Na página Client VPN Endpoints do Manegement Console selecione a opção Authorization e em seguida Authorize Ingress, conforme a figura abaixo
Nesta tela será configurado no campo Destination network to enable a rede, em notação CIDR, que será acessada pela VPN. Ao final da configuração basta clicar em Add authorization rule
Passo 6: Arquivo de Configuração do Endpoint
Para realizar o Download do arquivo de Configuração do cliente basta clicar na página Client VPN Endpoints do Manegement Console selecione a opção Download Client Configuration figura abaixo
Será realizado o download de um arquivo .ovpn com o seguinte conteúdo:
client dev tun proto udp remote cvpn-endpoint-…region.amazonaws.com 443 remote-random-hostname resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-GCM verb 3 <ca> -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- </ca> reneg-sec 0
Nesse arquivo será necessário inserir o Certificado do Servidor e a Chave do Cliente, isso pode ser adicionado de duas formas:
Tag
É possível inserir as duas chaves através das tags:
client dev tun proto udp remote cvpn-endpoint-…region.amazonaws.com 443 remote-random-hostname resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-GCM verb 3 <ca> -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- </ca> <cert> -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- </cert> <key> -----BEGIN KEY----- Base64–encoded certificate -----END KEY----- </key> reneg-sec 0
Referêcia
É possível inserir as duas chaves através de referência dos arquivos dentro do documento, conforme:
client dev tun proto udp remote cvpn-endpoint-…region.amazonaws.com 443 remote-random-hostname resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-GCM verb 3 cert NomeDoServidor.cert key NomeDoServidor.key <ca> -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- </ca> reneg-sec 0
NOTA: Quando realizar a configuração via referência, será necessário enviar o certificado e a chave junto com o arquivo de configuração para o cliente.
Passo 7: Distribuição do arquivo para os clientes
Com o arquivo de configuração finalizado basta distribuir para os clientes acessarem a VPN via AWS Client VPN. Para realizar a conexão com servidores Linux basta utilizar a ferramenta Putty. Para realizar a conexão com servidores Windows basta ferramenta de Conexão de Área de Trabalho Remota.
Passo 8: Revogando o Certificado de Client
Caso esteja utilizando Mutual Authentication e haja a necessidade de revogar um certificado. Abra o ambiente pki e digite:
./easyrsa revoke nome-do-certificado-do-cliente
Quando for questionado digite yes. Um arquivo crl.pem será criado em: /easy-rsa/EasyRSA-3.0.7/pkicrl.pem/crl.pem
Na aba de VPC do console de gerenciamento selecione seu Client VPN e clique Import Client Certificate CRL
Preencha o campo com o conteúdo do arquivo crl.pem e por fim Import CRL
A qualquer momento é possível exportar a lista com os certificados revogados.
Selecione seu Client VPN e clique Export Client Certificate CRL
Disponibilidade e Precificação
A precificação dessa ferramenta é realizada da seguinte forma (Baseado na região de Ohio):
- Realizar uma Associação de endpoints do AWS Client VPN gera uma cobrança de 0,10 USD por hora;
- Cada Conectividade do AWS Client VPN gera uma cobrança de 0,05 USD por hora.
Para mais informações sobre as regiões de disponibilidade e suas respectivas cobranças confira aqui.
Resumo
Nesse artigo nós realizamos uma configuração de uma rede de privada utilizando o AWS Client VPN, emitimos os certificados de autenticação e criamos um arquivo de configuração para realizar nossa conexão com nossos servidores.