Uma rede virtual privada, ou VPN, permite que você criptografe com segurança o tráfego enquanto ele viaja através de redes não confiáveis, como aquelas em uma cafeteria, uma sala de conferências ou um aeroporto.
O IKEv2, ou Internet Key Exchange v2, é um protocolo que permite o tunelamento direto IPSec entre o servidor e o cliente. Em implementações de VPNs com IKEv2, o IPSec fornece criptografia para o tráfego de rede. O IKEv2 é nativamente suportado em algumas plataformas (OS X 10.11+, iOS 9.1+ e Windows 10) sem a necessidade de aplicativos adicionais, ele lida muito bem com falhas no cliente.
Neste tutorial, você irá configurar um servidor em VPN com IKEv2 utilizando o StrongSwan em um servidor Ubuntu 18.04, e se conectar a ele a partir de clientes em Windows, Ubuntu, iOS e Android.
Para completar este tutorial, você precisará de:
sudo
não-raiz e um firewall.Primeiramente, vamos instalar o StrongSwan, um daemon IPSec de código aberto que vamos configurar como nosso servidor VPN. Também vamos instalar o componente de infraestrutura de chave pública para que possamos criar uma autoridade de certificação para fornecer credenciais para nossa infraestrutura.
Atualize o cache do pacote local e instale o software digitando:
- sudo apt update
- sudo apt install strongswan strongswan-pki
Agora que tudo está instalado, vamos seguir em frente para criar nossos certificados.
Um servidor com IKEv2 exige que um certificado se identifique para os clientes. Para nos ajudar a criar o certificado exigido, o pacote strongswan-pki
vem com um utilitário para gerar uma autoridade de certificação e certificados de servidor. Para começar, vamos criar alguns diretórios para armazenar todos os ativos em que iremos trabalhar. A estrutura do diretório corresponde a alguns dos diretórios em /etc/ipsec.d
, para onde vamos mover todos os itens que eventualmente criarmos. Vamos bloquear as permissões para que nossos arquivos privados não possam ser vistos por outros usuários:
- mkdir -p ~/pki/{cacerts,certs,private}
- chmod 700 ~/pki
Agora que temos uma estrutura de diretório para armazenar tudo, podemos gerar uma chave raiz. Esta é uma chave RSA 4096-bit que será usada para assinar nossa autoridade de certificação raiz.
Execute estes comandos para gerar a chave:
- ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
Agora que temos uma chave, podemos seguir em frente para criar nossa autoridade de certificação raiz, usando a chave para assinar o certificado raiz:
- ipsec pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
- --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
É possível alterar os valores distinguished name (DN) para outra coisa se você preferir. O common name aqui é apenas o indicador, de modo que ele não precisa corresponder a nada em sua infraestrutura.
Agora que temos nossa autoridade de certificação raiz em funcionamento, podemos criar um certificado que o servidor VPN usará.
Agora vamos criar um certificado e chave para o servidor VPN. Este certificado permitirá que o cliente verifique a autenticidade do servidor utilizando o certificado CA que acabamos de gerar.
Primeiramente, crie uma chave privada para o servidor VPN com o seguinte comando:
- ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
Agora, crie e assine o certificado do servidor VPN com a chave de autoridade de certificação que você criou no passo anterior. Execute o comando a seguir, mas altere o campo Common Name (CN) e o campo Subject Alternate Name (SAN) para o nome DNS do seu servidor VPN ou endereço IP:
- ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa \
- | ipsec pki --issue --lifetime 1825 \
- --cacert ~/pki/cacerts/ca-cert.pem \
- --cakey ~/pki/private/ca-key.pem \
- --dn "CN=server_domain_or_IP" --san "server_domain_or_IP" \
- --flag serverAuth --flag ikeIntermediate --outform pem \
- > ~/pki/certs/server-cert.pem
Agora que geramos todos os arquivos TLS/SSL que o StrongSwan necessita, podemos mover os arquivos para seus lugares no diretório /etc/ipsec.d
digitando:
- sudo cp -r ~/pki/* /etc/ipsec.d/
Neste passo, criamos um par de certificados que seriam usado para proteger as comunicações entre o cliente e o servidor. Também assinamos os certificados com a chave CA, para que o cliente possa verificar a autenticidade do servidor VPN utilizando o certificado CA. Agora que temos todos os certificados prontos, vamos seguir em frente para configurar o software.
O StrongSwan tem um arquivo de configuração padrão com alguns exemplos, mas a maior parte da configuração terá que ser feita por nossa conta. Vamos fazer um backup do arquivo para referência antes de começar do zero:
- sudo mv /etc/ipsec.conf{,.original}
Crie e abra um novo arquivo de configuração em branco digitando:
- sudo nano /etc/ipsec.conf
Primeiramente, vamos dizer ao StrongSwan para registrar os status do daemon para correção de erros e permitir conexões duplicadas. Adicione estas linhas ao arquivo:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Depois, vamos criar uma seção de configuração para nossa VPN. Também vamos dizer ao StrongSwan para criar os Túneis da VPN com IKEv2 e para carregar automaticamente essa seção de configuração quando for iniciado. Adicione as linhas a seguir ao arquivo:
. . .
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
Também vamos configurar a detecção de ponto morto para limpar conexões pendentes, caso o cliente se desconecte de maneira inesperada. Adicione estas linhas:
. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no
Na sequência, vamos configurar os parâmetros IPSec do lado (esquerdo) do servidor. Adicione isto ao arquivo:
. . .
conn ikev2-vpn
. . .
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
Nota: quando configurar o ID do servidor (leftid
), inclua apenas o caractere @
se seu servidor de VPN for identificado por um nome de domínio:
leftid=@vpn.example.com
Se o servidor for identificado pelo seu endereço IP, apenas coloque o endereço IP em:
leftid=203.0.113.7
Em seguida, podemos configurar os parâmetros IPSec do lado (direito) do cliente, como os intervalos de endereços IP privados e os servidores DNS para usar:
. . .
conn ikev2-vpn
. . .
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
Finalmente, vamos dizer ao StrongSwan para pedir ao cliente as credenciais de usuários ao se conectarem:
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
O arquivo de configuração deve se parecer com este:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
Salve e feche o arquivo assim que tiver verificado se você configurou tudo como mostrado.
Agora que configuramos os parâmetros VPN, vamos seguir em frente para criar uma conta que permita que nossos usuários se conectem ao servidor.
Nosso servidor VPN agora está configurado para aceitar conexões de clientes, mas ainda não temos nenhuma credencial configurada. Vamos ter que configurar algumas coisas em um arquivo de configuração especial chamado ipsec.secrets
:
Vamos abrir o arquivo secrets para edição:
- sudo nano /etc/ipsec.secrets
Primeiramente, vamos dizer ao StrongSwan onde encontrar nossa chave privada:
: RSA "server-key.pem"
Então, vamos definir as credenciais do usuário. Você pode inventar qualquer nome de usuário ou senha que você queira:
your_username : EAP "your_password"
Salve e feche o arquivo. Agora que terminamos de trabalhar com os parâmetros da VPN, vamos reiniciar o serviço da VPN para que nossas configurações sejam aplicadas:
- sudo systemctl restart strongswan
Agora que o servidor da VPN foi configurado completamente com as opções de servidor e credenciais de usuário, é hora de seguir em frente para configurar a parte mais importante: o firewall.
Com a configuração StrongSwan completa, precisamos configurar o firewall para encaminhar e permitir o tráfego da VPN.
Se seguiu o tutorial de pré-requisitos, você deverá ter um firewall UFW muito básico já habilitado. Se ainda não tiver o UFW configurado, você pode criar uma configuração básica e habilitá-lo digitando:
- sudo ufw allow OpenSSH
- sudo ufw enable
Agora, adicione uma regra para permitir o tráfego UDP nas portas padrão do IPSec, 500 e 4500:
- sudo ufw allow 500,4500/udp
Em seguida, vamos abrir um dos arquivos de configuração do UFW para adicionar algumas políticas de baixo nível para roteamento e encaminhamento de pacotes IPSec. Antes, precisamos descobrir qual interface de rede do nosso servidor é usada para o acesso à internet. Podemos descobrir isso buscando pela interface associada à rota padrão:
- ip route | grep default
Sua interface pública deve vir após a palavra “dev”. Por exemplo, este resultado mostra a interface chamada eth0
, que está destacada abaixo:
Outputdefault via 203.0.113.7 dev eth0 proto static
Quando tiver sua interface de rede pública, abra o arquivo /etc/ufw/before.rules
no seu editor de texto:
- sudo nano /etc/ufw/before.rules
Perto do topo do arquivo (antes da linha *filter
), adicione o seguinte bloco de configuração:
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .
Altere cada instância de eth0
na configuração acima para corresponder ao nome de interface que você encontrou com ip route
. As linhas *nat
criam regras para que o firewall possa rotear e manipular corretamente o tráfego entre os clientes VPN e a internet. A linha *mangle
ajusta o tamanho máximo do segmento de pacotes para evitar possíveis problemas com certos clientes VPN.
Em seguida, após as linhas de definição *filter
e de cadeia, adicione mais um bloco de configuração:
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
Essas linhas dizem ao firewall para encaminhar o tráfego ESP (Encapsulating Security Payload) para que os clientes VPN possam se conectar. O ESP proporciona segurança adicional para nossos pacotes VPN, enquanto eles estiverem passando por redes não confiáveis.
Quando você terminar, salve e feche o arquivo.
Antes de reiniciarmos o firewall, vamos alterar alguns parâmetros do kernel da rede para permitir o roteamento de uma interface para outra. Abra o arquivo de configuração de parâmetros do kernel do UFW:
- sudo nano /etc/ufw/sysctl.conf
Vamos precisar configurar algumas coisas por aqui:
As alterações que você precisa fazer no arquivo estão destacadas no seguinte código:
. . .
# Enable forwarding
# Uncomment the following line
net/ipv4/ip_forward=1
. . .
# Do not accept ICMP redirects (prevent MITM attacks)
# Ensure the following line is set
net/ipv4/conf/all/accept_redirects=0
# Do not send ICMP redirects (we are not a router)
# Add the following lines
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
Salve o arquivo quando terminar. O UFW aplicará essas mudanças na próxima vez que for iniciado.
Agora, podemos habilitar todas as nossas mudanças, desabilitando e reabilitando o firewall:
- sudo ufw disable
- sudo ufw enable
Será solicitado que você confirme o processo. Digite Y
para habilitar o UFW novamente com as novas configurações.
Agora que você tem tudo configurado, é hora do teste. Primeiro, você precisará copiar o certificado CA que você criou e instalá-lo no(s) seu(s) dispositivo(s) cliente que serão conectados à VPN. A maneira mais simples de fazer isso é fazendo login no seu servidor e gerando o conteúdo do arquivo de certificação:
- cat /etc/ipsec.d/cacerts/ca-cert.pem
Você verá um resultado similar a este:
Output-----BEGIN CERTIFICATE-----
MIIFQjCCAyqgAwIBAgIIFkQGvkH4ej0wDQYJKoZIhvcNAQEMBQAwPzELMAkGA1UE
. . .
EwbVLOXcNduWK2TPbk/+82GRMtjftran6hKbpKGghBVDPVFGFT6Z0OfubpkQ9RsQ
BayqOb/Q
-----END CERTIFICATE-----
Copie este resultado para o seu computador, incluindo as linhas -----BEGIN CERTIFICATE-----
e -----END CERTIFICATE-----
e salve-o em um arquivo com um nome reconhecível, como ca-cert.pem
. Certifique-se de que o arquivo que você criar tenha a extensão .pem
.
De forma alternativa, utilize o SFTP para transferir o arquivo para seu computador.
Assim que tiver o arquivo ca-cert.pem
baixado no seu computador, você pode configurar a conexão com a VPN.
Primeiramente, importe o certificado raiz, seguindo estes passos:
Pressione WINDOWS+R
para trazer a janela Executar e digite mmc.exe
para iniciar o Console de Gerenciamento do Windows.
Do menu Arquivo, navegue até Adicionar ou Remover Snap-in, selecione Certificados da lista de snap-ins disponíveis, e clique em** Adiciona**r.
Queremos que a VPN funcione com qualquer usuário, logo selecione Conta de Computador e clique em Avançar.
Estamos configurando coisas no computador local, então selecione Computador Local e, depois, clique em Concluir.
Sob o nó Raiz do Console, expanda a entrada Certificados (Computador Local), expanda Autoridades de Certificação de Raíz Confiáveis e, em seguida, selecione a entrada Certificados:
A partir do menu Ação, selecione Todas as Tarefas e clique Importar para exibir o Assistente de Importação de Certificados. Clique em Avançar para passar da introdução.
Na tela Arquivo para Importar, pressione o botão Pesquisar e selecione o arquivo do certificado que você salvou. Então, clique em** Avançar**.
Certifique-se de que Armazenagem de Certificados foi configurada em Autoridades Confiáveis para Certificação Raiz, e clique em Avançar.
Clique em Concluir para importar o certificado.
Então, configure a VPN com estes passos:
Sua nova conexão VPN estará visível abaixo da lista de redes. Selecione a VPN e clique em Conectar. Você será solicitado a colocar seu nome de usuário e senha. Digite-os, clique em OK e você estará conectado.
Siga estes passos para importar o certificado:
Agora que o certificado é importante e confiável, configure a conexão VPN com estes passos:
Por fim, clique em Conectar para se conectar à VPN. Agora, você deve estar conectado à VPN.
Para se conectar a partir de uma máquina com Ubuntu, você pode configurar e gerenciar o StrongSwan como um serviço ou usar um comando único cada vez que desejar se conectar. São fornecidas instruções para ambos.
sudo apt update
sudo apt install strongswan libcharon-extra-plugins
/etc/ipsec.d/cacerts
: sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
sudo systemctl disable --now strongswan
etc/ipsec.secrets:
your_username: EAP "your_password"<^>
/etc/ipsec.conf
para definir sua configuração.config setup
conn ikev2-rw
right=server_domain_or_IP
# This should match the `leftid` value on your server's configuration
rightid=server_domain_or_IP
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftid=username
leftauth=eap-mschapv2
eap_identity=%identity
auto=start
Para se conectar à VPN, digite:
- sudo systemctl start strongswan
Para se desconectar novamente, digite:
- sudo systemctl stop strongswan
sudo apt update
charon-cmd
e software relacionados sudo apt install charon-cmd libcharon-extra-plugins
cd <^>/path/to/ca-cert.pem
charon-cmd
utilizando o certificado CA do servidor, o endereço IP do servidor VPN e o nome de usuário que você configurou: sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
Agora, você deve estar conectado à VPN. Para se desconectar, pressione CTRL+C
e aguarde que a conexão feche.
Para configurar a conexão VPN em um dispositivo iOS, siga estes passos:
Siga estes passos para importar o certificado:
Agora que o certificado foi importado para aplicativo StrongSwan, você pode configurar a conexão VPN com estes passos:
Quando você quiser se conectar à VPN, clique no perfil que você acabou de criar no aplicativo StrongSwan.
Se você não conseguir importar o certificado, certifique-se de que o arquivo tenha a extensão .pem
, e não .pem.txt
.
Se você não conseguir conectar-se à VPN, verifique o nome do servidor ou endereço IP que você usou. O nome de domínio ou endereço IP do servidor deve corresponder ao que você havia configurado como o nome comum (CN) ao criar o certificado. Se eles não corresponderem, a conexão VPN não funcionará. Se configurar um certificado com o CN do vpn.example.com
, você *deve usar *vpn.example.com
quando você digitar os detalhes do servidor VPN. Verifique novamente o comando que você usou para gerar o certificado e os valores que você usou ao criar sua conexão VPN.
Por fim, verifique novamente a configuração da VPN para garantir que o valor leftid
tenha sido configurado com o símbolo @
se você estiver usando um nome de domínio:
leftid=@vpn.example.com
E, se você estiver usando um endereço IP, certifique-se de que o símbolo @
seja omitido.
Neste tutorial, você construiu um servidor VPN que usa o protocolo IKEv2. Agora, você pode ter certeza de que suas atividades online permanecerão seguras onde quer que você vá!
Para adicionar ou remover usuários, basta olhar o Passo 5 novamente. Cada linha é para um usuário, então adicionar ou remover usuários é tão simples quanto editar o arquivo.
A partir daqui, você pode querer examinar como configurar um analisador de arquivos de registro, uma vez que o StrongSwan despeja seus registros no syslog. O tutorial Como Instalar e Usar o Analisador e Relator de Registros Logwatch em um VPS tem mais informações sobre como configurar isso.
Você também pode estar interessado neste guia do EFF sobre privacidade online.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!