Introdução
A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.
Internet Key Exchange v2, ou IKEv2, é um protocolo que permite o túnel direto IPSec entre o servidor e o cliente. Nas implementações de VPN IKEv2, o IPSec fornece criptografia para o tráfego de rede. O IKEv2 é suportado nativamente em algumas plataformas (OS X 10.11+, iOS 9.1+ e Windows 10) sem a necessidade de aplicativos adicionais, e lida bastante bem com problemas de conexão do cliente.
Neste tutorial, você configurará um servidor VPN IKEv2 usando o StrongSwan em um servidor Ubuntu 22.04. Em seguida, aprenderá como se conectar a ele com clientes Windows, macOS, Ubuntu, iOS e Android.
Pré-requisitos
Para concluir este tutorial, você precisará de:
- Um servidor Ubuntu 22.04 configurado seguindo o guia de configuração inicial do servidor Ubuntu 22.04, incluindo um usuário não-root com sudo e um firewall.
Passo 1 — Instalando o StrongSwan
Primeiro, você vai instalar o StrongSwan, um daemon IPSec de código aberto que você vai configurar como seu servidor VPN. Você também vai instalar o componente de infraestrutura de chave pública (PKI) para que possa criar uma Autoridade de Certificação (CA) para fornecer credenciais para sua infraestrutura.
Comece atualizando o cache de pacotes local:
Em seguida, instale o software digitando:
O pacote adicional libcharon-extauth-plugins
é usado para garantir que vários clientes possam autenticar-se em seu servidor usando um nome de usuário e senha compartilhados. O pacote libstrongswan-extra-plugins
está incluído para que o StrongSwan suporte conjuntos de cifras de curvas elípticas que usem a suíte de criptografia Curve25519
.
Agora que tudo está instalado, avance para a criação de seus certificados.
Passo 2 — Criando uma Autoridade de Certificação
Um servidor IKEv2 requer um certificado para se identificar aos clientes. Para ajudar a criar o certificado necessário, o pacote strongswan-pki
vem com uma utilidade chamada pki
para gerar uma Autoridade de Certificação e certificados de servidor.
Para começar, crie alguns diretórios para armazenar todos os ativos com os quais você irá trabalhar. A estrutura de diretórios corresponde a alguns dos diretórios em /etc/ipsec.d
, onde eventualmente moverá todos os itens que criar:
Em seguida, restrinja as permissões para que nossos arquivos privados não possam ser vistos por outros usuários:
Agora que você tem uma estrutura de diretórios para armazenar tudo, pode gerar uma chave raiz. Esta será uma chave RSA de 4096 bits que será usada para assinar o certificado da Autoridade de Certificação raiz:
Execute esses comandos para gerar a chave:
Após isso, você pode prosseguir para criar sua Autoridade de Certificação raiz, usando a chave que acabou de gerar para assinar o certificado raiz:
A flag --lifetime 3650
é usada para garantir que o certificado raiz da autoridade seja válido por 10 anos. O certificado raiz de uma autoridade geralmente não muda, pois teria que ser redistribuído para todos os servidores e clientes que dependem dele, então 10 anos é um valor padrão seguro de expiração.
Você pode alterar o valor do nome distinto (DN) para algo diferente, se desejar. O nome comum (campo CN) aqui é apenas indicativo, então não precisa corresponder a nada em sua infraestrutura.
Agora que você tem sua Autoridade de Certificação raiz funcionando, pode criar um certificado que o servidor VPN utilizará.
Passo 3 — Gerando um Certificado para o Servidor VPN
Agora você criará um certificado e uma chave para o servidor VPN. Este certificado permitirá que o cliente verifique a autenticidade do servidor usando o certificado CA que acabamos de gerar.
Primeiro, crie uma chave privada para o servidor VPN com o seguinte comando:
Agora, crie e assine o certificado do servidor VPN com a chave da autoridade de certificação que você criou no passo anterior. Execute o seguinte comando, mas altere o Nome Comum (CN) e o campo de Nome Alternativo Sujeito (SAN) para o nome DNS ou endereço IP do seu servidor VPN:
Observação: Se você estiver usando um endereço IP em vez de um nome DNS, será necessário especificar várias entradas --san
. A linha no bloco de comando anterior onde você especifica o nome distinto (--dn ...
) precisará ser modificada com a entrada extra como a linha extraída a seguir:
--dn "CN=Endereço IP" --san @Endereço_IP --san Endereço_IP \
A razão para esta entrada extra --san @Endereço_IP
é que alguns clientes verificarão se o certificado TLS possui tanto uma entrada DNS quanto uma entrada de Endereço IP para um servidor ao verificar sua identidade.
A opção --flag serverAuth
é usada para indicar que o certificado será usado explicitamente para autenticação do servidor, antes que o túnel criptografado seja estabelecido. A opção --flag ikeIntermediate
é usada para dar suporte a clientes macOS mais antigos.
Agora que você gerou todos os arquivos TLS/SSL necessários para o StrongSwan, você pode mover os arquivos para o local adequado no diretório /etc/ipsec.d
digitando:
Neste passo, você criou um par de certificados que será usado para garantir a comunicação entre o cliente e o servidor. Você também assinou os certificados com a chave da CA, para que o cliente possa verificar a autenticidade do servidor VPN usando o certificado da CA. Com todos esses certificados prontos, você está pronto para avançar para a configuração do StrongSwan.
Passo 4 — Configurando o StrongSwan
O StrongSwan possui um arquivo de configuração padrão com alguns exemplos, mas teremos que fazer a maior parte da configuração por conta própria. Vamos fazer backup do arquivo para referência antes de começar do zero:
Crie e abra um novo arquivo de configuração em branco usando seu editor de texto preferido. Aqui, você usará o nano
:
Nota: Ao trabalhar nesta seção para configurar a parte do servidor da sua VPN, você encontrará configurações que se referem aos lados esquerdo e direito de uma conexão. Ao trabalhar com VPNs IPSec, o lado esquerdo por convenção refere-se ao sistema local que você está configurando, neste caso o servidor. As diretivas do lado direito nessas configurações se referirão a clientes remotos, como telefones e outros computadores.
Quando passar para a configuração dos clientes mais tarde neste tutorial, os arquivos de configuração do cliente se referirão a si mesmos usando várias diretivas esquerda, e o servidor será referido usando a terminologia do lado direito.
Primeiro, vamos dizer ao StrongSwan para registrar status de daemon para depuração e permitir conexões duplicadas. Adicione estas linhas ao arquivo:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Em seguida, vamos criar uma seção de configuração para a nossa VPN. Também diremos ao StrongSwan para criar Túneis VPN IKEv2 e carregar automaticamente esta seção de configuração quando iniciar. Acrescente as seguintes linhas 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 pares mortos para limpar quaisquer conexões “penduradas” caso o cliente desconecte inesperadamente. Adicione estas linhas:
. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no
Em seguida, vamos configurar os parâmetros IPSec do “lado esquerdo” do servidor. Cada um dos parâmetros a seguir garante que o servidor esteja configurado para aceitar conexões de clientes e para se identificar corretamente. Você adicionará cada uma dessas configurações ao arquivo /etc/ipsec.conf
assim que estiver familiarizado com o que são e por que são usadas:
left=%any
O valor%any
garante que o servidor usará a interface de rede onde recebe conexões de entrada para comunicação subsequente com os clientes. Por exemplo, se você estiver conectando um cliente por uma rede privada, o servidor usará o endereço IP privado onde recebe o tráfego para o restante da conexão.leftid=@server_domain_or_IP
Esta opção controla o nome que o servidor apresenta aos clientes. Quando combinada com a próxima opçãoleftcert
, a opçãoleftid
garante que o nome configurado do servidor e o Nome Distinto (DN) contido no certificado público correspondam.leftcert=server-cert.pem
Esta opção é o caminho para o certificado público do servidor que você configurou no Passo 3. Sem ele, o servidor não poderá se autenticar com os clientes ou concluir a negociação da configuração do IKEv2.leftsendcert=always
O valoralways
garante que qualquer cliente que se conecte ao servidor sempre receberá uma cópia do certificado público do servidor como parte da configuração inicial da conexão.leftsubnet=0.0.0.0/0
A última opção do lado “left” que você adicionará informa aos clientes sobre as sub-redes alcançáveis atrás do servidor. Neste caso,0.0.0.0/0
é usado para representar o conjunto inteiro de endereços IPv4, significando que o servidor dirá aos clientes para enviar todo o seu tráfego pela VPN por padrão.
Agora que você está familiarizado com cada uma das opções relevantes do lado “left”, adicione-as todas ao arquivo assim:
. . .
conn ikev2-vpn
. . .
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
Nota: Ao configurar o ID do servidor (leftid
), inclua o caractere @
apenas se o seu servidor VPN for identificado por um nome de domínio:
. . . leftid=@vpn.example.com
. . .
Se o servidor for identificado pelo seu endereço IP, coloque apenas o endereço IP:
. . .
leftid=your_server_ip
. . .
Em seguida, podemos configurar os parâmetros IPSec do lado “direito” do cliente. Cada um dos seguintes parâmetros informa ao servidor como aceitar conexões dos clientes, como os clientes devem se autenticar no servidor e as faixas de endereços IP privados e servidores DNS que os clientes usarão. Adicione cada uma dessas configurações ao arquivo /etc/ipsec.conf
uma vez que esteja familiarizado com o que são e por que são usadas:
right=%any
A opção%any
para o ladoright
da conexão instrui o servidor a aceitar conexões de entrada de qualquer cliente remoto.rightid=%any
Esta opção garante que o servidor não rejeitará conexões de clientes que forneçam uma identidade antes que o túnel criptografado seja estabelecido.rightauth=eap-mschapv2
Esta opção configura o método de autenticação que os clientes usarão para autenticar no servidor.eap-mschapv2
é usado aqui para ampla compatibilidade, a fim de suportar clientes como dispositivos Windows, macOS e Android.rightsourceip=10.10.10.0/24
Esta opção instrui o servidor a atribuir endereços IP privados aos clientes a partir da pool de IPs especificada10.10.10.0/24
.rightdns=8.8.8.8,8.8.4.4
Esses endereços IP são os resolvedores DNS públicos do Google. Eles podem ser alterados para usar outros resolvedores públicos, os resolvedores do servidor VPN ou qualquer outro resolvedor que os clientes possam acessar.rightsendcert=never
Esta opção instrui o servidor de que os clientes não precisam enviar um certificado para se autenticarem.
Agora que você está familiarizado com as opções necessárias do lado “right” para a VPN, adicione as seguintes linhas ao arquivo /etc/ipsec.conf
:
. . .
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
Agora vamos dizer ao StrongSwan para solicitar credenciais de usuário ao cliente quando eles se conectarem:
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
Por fim, adicione as seguintes linhas para dar suporte a clientes Linux, Windows, macOS, iOS e Android. Essas linhas especificam os vários algoritmos de troca de chaves, hash, autenticação e criptografia (comumente referidos como Suites de Cifras) que o StrongSwan permitirá que diferentes clientes usem:
. . .
conn ikev2-vpn
. . .
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
Cada suíte de cifras suportada é delimitada das outras por uma vírgula. Por exemplo, chacha20poly1305-sha512-curve25519-prfsha512
é uma suíte, e aes256gcm16-sha384-prfsha384-ecp384
é outra. As suítes de cifras listadas aqui são selecionadas para garantir a mais ampla gama de compatibilidade entre clientes Windows, macOS, iOS, Android e Linux.
O arquivo de configuração completo deve ficar assim:
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
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
Salve e feche o arquivo após verificar se adicionou cada linha corretamente. Se você estiver usando o nano
, faça isso pressionando CTRL + X
, Y
, e depois ENTER
.
Agora que você configurou os parâmetros da VPN, pode prosseguir para criar uma conta para que os usuários possam se conectar ao servidor.
Passo 5 — Configurando a Autenticação VPN
Seu servidor VPN está agora configurado para aceitar conexões de clientes, mas ainda não há credenciais configuradas. Você precisará configurar algumas coisas em um arquivo de configuração especial chamado ipsec.secrets
:
- Você precisa informar ao StrongSwan onde encontrar a chave privada para o certificado do nosso servidor, para que o servidor possa se autenticar aos clientes.
- Você também precisa configurar uma lista de usuários que serão permitidos a se conectar à VPN.
Vamos abrir o arquivo de segredos para edição:
Primeiro, informe ao StrongSwan onde encontrar a chave privada e como analisá-la.
: RSA "server-key.pem"
Verifique se a linha começa com o caractere :
e se há um espaço após ele, para que toda a linha fique como : RSA "server-key.pem"
.
Em seguida, você irá definir as credenciais do usuário. Você pode inventar qualquer combinação de nome de usuário e senha que desejar:
your_username : EAP "your_password"
Salve e feche o arquivo. Agora que você terminou de trabalhar com os parâmetros da VPN, reinicie o serviço VPN para que nossa configuração seja aplicada:
Agora que o servidor VPN foi totalmente configurado com ambas as opções do servidor e as credenciais do usuário, é hora de avançar para a configuração da parte mais importante: o firewall.
Passo 6 — Configurando o Firewall e Encaminhamento de IP do Kernel
Com a configuração do StrongSwan completa, você precisa configurar o firewall para permitir o tráfego VPN e encaminhá-lo.
Se você seguiu o tutorial de configuração inicial do servidor pré-requisito, você deve ter um firewall UFW habilitado. Se você ainda não configurou o UFW, deve começar adicionando uma regra para permitir conexões SSH através do firewall para que sua sessão atual não seja fechada quando você habilitar o UFW:
Em seguida, habilite o firewall digitando:
Depois, adicione uma regra para permitir tráfego UDP nas portas IPSec padrão, 500
e 4500
:
Em seguida, você abrirá um dos arquivos de configuração do UFW para adicionar algumas políticas de nível baixo para roteamento e encaminhamento de pacotes IPSec. No entanto, antes de fazer isso, você precisa encontrar qual interface de rede em nosso servidor é usada para acesso à internet. Encontre esta interface consultando o dispositivo associado à rota padrão:
Sua interface pública deve seguir a palavra “dev”. Por exemplo, este resultado mostra a interface chamada eth0
, que está destacada no seguinte exemplo:
Outputdefault via your_server_ip dev eth0 proto static
Quando tiver a interface de rede pública, abra o arquivo /etc/ufw/before.rules
no seu editor de texto. As regras neste arquivo são adicionadas ao firewall antes do restante das regras de entrada e saída usuais. Elas são usadas para configurar a tradução de endereços de rede (NAT) para que o servidor possa rotear corretamente as conexões de e para os clientes e a Internet.
Perto do topo do arquivo (antes da linha *filter
), adicione o seguinte bloco de configuração. Altere cada instância de eth0
na configuração acima para corresponder ao nome da interface que você encontrou com ip route
. As linhas *nat
criam regras para que o firewall possa rotear e manipular o tráfego entre os clientes da VPN e a Internet. A linha *mangle
ajusta o tamanho máximo do segmento do pacote para evitar problemas potenciais com determinados clientes de VPN:
*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]
. . .
Em seguida, após as linhas de definição de *filter
e 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 de ESP (Encapsulamento de Carga de Segurança) para que os clientes da VPN possam se conectar. O ESP fornece segurança adicional para nossos pacotes VPN enquanto estão atravessando redes não confiáveis.
Quando terminar, salve e feche o arquivo depois de verificar se você adicionou cada linha corretamente. Se você usou o nano
, faça isso pressionando CTRL + X
, Y
, depois ENTER
.
Antes de reiniciar o firewall, você também precisa alterar alguns parâmetros do kernel de rede para permitir o roteamento de uma interface para outra. O arquivo que controla essas configurações é chamado /etc/ufw/sysctl.conf
. Você precisará configurar algumas coisas no arquivo.
Primeiro, o encaminhamento de pacotes IPv4 precisa ser ativado para que o tráfego possa mover-se entre as interfaces de rede VPN e de frente para o público no servidor. Em seguida, você desativará a descoberta de MTU de caminho para evitar problemas de fragmentação de pacotes. Finalmente, não aceitaremos redirecionamentos ICMP nem enviaremos redirecionamentos ICMP para evitar ataques de homem-no-meio.
Abra o arquivo de configuração de parâmetros do kernel do UFW usando nano
ou seu editor de texto preferido:
Agora adicione a seguinte configuração net/ipv4/ip_forward=1
ao final do arquivo para ativar o encaminhamento de pacotes entre interfaces:
. . .
net/ipv4/ip_forward=1
Em seguida, bloqueie o envio e recebimento de pacotes de redirecionamento ICMP adicionando as seguintes linhas ao final do arquivo:
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
Por fim, desative a descoberta de MTU de caminho adicionando esta linha ao final do arquivo:
. . .
net/ipv4/ip_no_pmtu_disc=1
Salve o arquivo quando terminar. Agora você pode habilitar todas as suas alterações desabilitando e reabilitando o firewall, já que o UFW aplica essas configurações toda vez que é reiniciado:
Você será solicitado a confirmar o processo. Digite Y
para habilitar o UFW novamente com as novas configurações.
Passo 7 — Testando a Conexão VPN no Windows, macOS, Ubuntu, iOS e Android
Agora que tudo está configurado, é hora de testar. Primeiro, você precisará copiar o certificado CA que você criou e instalá-lo no(s) dispositivo(s) cliente que se conectará(ão) à VPN. A maneira mais fácil de fazer isso é fazer login no seu servidor e exibir o conteúdo do arquivo de certificado:
Você verá uma saída semelhante a esta:
Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----
Copie esta saída para o seu computador, incluindo as linhas -----BEGIN CERTIFICATE-----
e -----END CERTIFICATE-----
, e salve-a em um arquivo com um nome reconhecível, como ca-cert.pem
. Certifique-se de que o arquivo que você cria tenha a extensão .pem
.
Alternativamente, use SFTP para transferir o arquivo para o seu computador.
Depois de baixar o arquivo ca-cert.pem
para o seu computador, você pode configurar a conexão com a VPN.
Conectando do Windows
Existem várias maneiras de importar o certificado raiz e configurar o Windows para se conectar a uma VPN. O primeiro método utiliza ferramentas gráficas para cada etapa. O segundo método utiliza comandos PowerShell, que podem ser scriptados e modificados para se adequarem à sua configuração de VPN.
Nota: Estas instruções foram testadas em instalações do Windows 10 executando as versões 1903 e 1909.
Configurando o Windows com Ferramentas Gráficas
Primeiro, importe o certificado raiz seguindo estes passos:
-
Pressione
WINDOWS+R
para abrir o diálogo Executar, e insirammc.exe
para abrir o Console de Gerenciamento do Windows. -
No menu Arquivo, navegue até Adicionar ou Remover Snap-in, selecione Certificados na lista de snap-ins disponíveis e clique em Adicionar.
-
Queremos que a VPN funcione com qualquer usuário, então selecione Conta do Computador e clique em Avançar.
-
Estamos configurando coisas no computador local, então selecione Computador Local, depois clique em Concluir.
-
Sob o nó Console Root, expanda a entrada Certificados (Computador Local), expanda Autoridades de Certificação Raiz Confiáveis, e então selecione a entrada Certificados:
-
No menu Ação, selecione Todas as Tarefas e clique em Importar para exibir o Assistente de Importação de Certificados. Clique em Avançar para passar pela introdução.
-
Na tela Arquivo a Importar, pressione o botão Procurar, certifique-se de alterar o tipo de arquivo de “Certificado X.509 (.cer;.crt)” para “Todos os Arquivos (.)”, e selecione o arquivo
ca-cert.pem
que você salvou. Em seguida, clique em Avançar. -
Garanta que o Armazenamento de Certificados esteja definido como Autoridades de Certificação Raiz Confiáveis e clique em Avançar.
-
Clique em Concluir para importar o certificado.
Em seguida, configure a VPN com estes passos:
- Inicie o Painel de Controle, depois navegue até o Centro de Rede e Compartilhamento.
- Clique em Configurar uma nova conexão ou rede, depois selecione Conectar-se a um local de trabalho.
- Selecione Usar minha conexão de Internet (VPN).
- Insira os detalhes do servidor VPN. Insira o nome de domínio ou o endereço IP do servidor no campo Endereço de Internet, em seguida, preencha Nome do destino com algo que descreva sua conexão VPN. Em seguida, clique em Concluído.
Configurando o Windows usando o PowerShell
Para importar o certificado CA raiz usando o PowerShell, primeiro abra um prompt de PowerShell com privilégios de administrador. Para fazer isso, clique com o botão direito no ícone do menu Iniciar e selecione Windows PowerShell (Admin)
. Você também pode abrir um prompt de comando como administrador e digitar powershell
.
Em seguida, importaremos o certificado usando o cmdlet do PowerShell Import-Certificate
. No comando a seguir, o primeiro argumento -CertStoreLocation
garantirá que o certificado seja importado na loja Autoridades de Certificação Raiz Confiáveis do computador para que todos os programas e usuários possam verificar o certificado do servidor VPN. O argumento -FilePath
deve apontar para o local onde você copiou o certificado. No exemplo a seguir, o caminho é C:\Users\sammy\Documents\ca-cert.pem
. Certifique-se de editar o comando para corresponder ao local que você usou.
O comando retornará algo como o seguinte:
Output PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint Subject
---------- -------
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Agora, para configurar a VPN usando o PowerShell, execute o seguinte comando. Substitua o nome DNS ou o endereço IP do seu servidor na linha -ServerAddress
. As várias flags garantirão que o Windows seja configurado corretamente com os parâmetros de segurança apropriados que correspondam às opções que você definiu em /etc/ipsec.conf
.
Se o comando for bem-sucedido, não haverá nenhuma saída. Para confirmar se a VPN está configurada corretamente, use o cmdlet Get-VPNConnection
:
Você receberá uma saída como a seguinte:
OutputName : VPN Connection
ServerAddress : your_server_ip
AllUserConnection : False
Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E}
TunnelType : Ikev2
AuthenticationMethod : {Eap}
EncryptionLevel : Maximum
L2tpIPsecAuth :
UseWinlogonCredential : False
EapConfigXmlStream : #document
ConnectionStatus : Disconnected
RememberCredential : True
SplitTunneling : False
DnsSuffix :
IdleDisconnectSeconds : 0
Por padrão, o Windows escolhe algoritmos mais antigos e mais lentos. Execute o cmdlet Set-VpnConnectionIPsecConfiguration
para atualizar os parâmetros de criptografia que o Windows usará para a troca de chaves IKEv2 e para criptografar pacotes:
Nota: Se desejar excluir a conexão VPN e reconfigurá-la com opções diferentes, você pode executar o cmdlet Remove-VpnConnection
.
A flag -Force
irá ignorar a solicitação de confirmação para a remoção. Você deve estar desconectado da VPN se tentar removê-la usando este comando.
Conectando-se à VPN
Depois de importar o certificado e configurar a VPN usando um dos métodos, sua nova conexão VPN será visível na lista de redes. Selecione a VPN e clique em Conectar. Você será solicitado a inserir seu nome de usuário e senha. Digite-os, clique em OK, e você estará conectado.
Conexão a partir do macOS
Siga estas etapas para importar o certificado:
- Dê um duplo clique no arquivo do certificado. O Acesso às Chaves irá aparecer com uma caixa de diálogo que diz “O Acesso às Chaves está tentando modificar o chaveiro do sistema. Digite sua senha para permitir isso.”
- Digite sua senha e clique em Modificar Chaveiro
- Clique duas vezes no certificado VPN recém-importado. Isso abrirá uma pequena janela de propriedades onde você pode especificar os níveis de confiança. Defina o Segurança IP (IPSec) para Sempre Confiar e você será solicitado a inserir sua senha novamente. Essa configuração será salva automaticamente após inserir a senha.
Agora que o certificado está importado e confiável, configure a conexão VPN com estes passos:
- Vá para as Preferências do Sistema e escolha Rede.
- Clique no pequeno botão de adição no canto inferior esquerdo da lista de redes.
- No pop-up que aparece, defina o Interface para VPN, defina o Tipo de VPN para IKEv2 e dê um nome à conexão.
- Nos campos Servidor e ID Remoto, insira o nome de domínio ou endereço IP do servidor. Deixe o campo ID Local em branco.
- Clique em Configurações de Autenticação, selecione Nome de Usuário e insira seu nome de usuário e senha configurados para o usuário VPN. Em seguida, clique em OK.
Por fim, clique em Conectar para se conectar à VPN. Você deve estar conectado à VPN agora.
Conectando a partir do Ubuntu
Para conectar a partir de uma máquina Ubuntu, você pode configurar e gerenciar o StrongSwan como um serviço ou usar um comando único sempre que desejar se conectar. As instruções são fornecidas para ambos.
Gerenciando o StrongSwan como um Serviço
Para gerenciar o StrongSwan como um serviço, você precisará realizar as seguintes etapas de configuração.
Primeiro, atualize o cache de pacotes local usando apt
Em seguida, instale o StrongSwan e os plugins necessários para autenticação:
Agora você precisará de uma cópia do certificado CA no diretório /etc/ipsec.d/cacerts
para que seu cliente possa verificar a identidade do servidor. Execute o seguinte comando para copiar o arquivo ca-cert.pem
para o local correto:
Para garantir que a VPN seja executada apenas sob demanda, use systemctl
para desativar o StrongSwan de ser executado automaticamente:
Em seguida, configure o nome de usuário e senha que você usará para autenticar no servidor VPN. Edite o arquivo /etc/ipsec.secrets
usando o nano ou seu editor preferido:
Adicione a seguinte linha, editando os valores de nome de usuário e senha destacados para corresponder aos que você configurou no servidor:
your_username : EAP "your_password"
Por fim, edite o arquivo /etc/ipsec.conf
para configurar seu cliente para corresponder à configuração do servidor:
config setup
conn ikev2-rw
right=server_domain_or_IP
# Isso deve corresponder ao valor `leftid` na configuração do seu servidor
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:
Para desconectar novamente, digite:
Usando o Cliente charon-cmd
para Conexões Pontuais
Para gerenciar o StrongSwan como um serviço, você precisará seguir as seguintes etapas de configuração.
Primeiro, atualize o cache de pacotes local usando apt
Em seguida, instale o StrongSwan e os plugins necessários para autenticação:
Agora você precisará de uma cópia do certificado CA no diretório /etc/ipsec.d/cacerts
para que seu cliente possa verificar a identidade do servidor. Execute o seguinte comando para copiar o arquivo ca-cert.pem
para o local:
Neste ponto, você pode se conectar ao servidor VPN com charon-cmd
usando o certificado CA do servidor, o endereço IP do servidor VPN e o nome de usuário que você configurou.
Execute o seguinte comando sempre que quiser se conectar à VPN:
Quando solicitado, forneça a senha do usuário VPN e você estará conectado à VPN. Para desconectar, pressione CTRL+C
no terminal e aguarde a conexão fechar.
Conectando a partir do iOS
Para configurar a conexão VPN em um dispositivo iOS, siga estas etapas:
- Envie um email para si mesmo com o certificado raiz anexado.
- Abra o email em seu dispositivo iOS e toque no arquivo de certificado anexado, depois toque em Instalar e insira seu código de acesso. Depois de instalado, toque em Concluído.
- Vá para Configurações, Geral, VPN e toque em Adicionar Configuração de VPN. Isso abrirá a tela de configuração da conexão VPN.
- Toque em Tipo e selecione IKEv2.
- No campo Descrição, insira um nome curto para a conexão VPN. Pode ser qualquer coisa que você goste.
- Nos campos Servidor e ID Remoto, insira o nome de domínio ou o endereço IP do servidor. O campo ID Local pode ser deixado em branco.
- Insira seu nome de usuário e senha na seção de Autenticação, depois toque em Concluído.
- Selecione a conexão VPN que acabou de criar, toque no interruptor no topo da página e você estará conectado.
Conectando do Android
Siga estas etapas para importar o certificado:
- Envie um e-mail para si mesmo com o certificado CA anexado. Salve o certificado CA na sua pasta de downloads.
- Baixe o aplicativo Cliente VPN StrongSwan na Play Store.
- Abra o aplicativo. Toque no ícone “mais” (. . .) no canto superior direito e selecione Certificados CA.
- Toque no ícone “mais” (. . .) no canto superior direito novamente. Selecione Importar certificado.
- Procure o arquivo do certificado CA na sua pasta de downloads e selecione-o para importá-lo para o aplicativo.
Agora que o certificado foi importado para o aplicativo StrongSwan, você pode configurar a conexão VPN com estes passos:
- No aplicativo, toque em ADICIONAR PERFIL VPN no topo.
- Preencha o Servidor com o nome de domínio do seu servidor VPN ou endereço IP público.
- Verifique se IKEv2 EAP (Nome de usuário/Senha) está selecionado como o Tipo de VPN.
- Preencha o Nome de usuário e Senha com as credenciais que você definiu no servidor.
- Desmarque Selecionar automaticamente na seção de certificado CA e clique em Selecionar certificado CA.
- Toque na guia IMPORTADO no topo da tela e escolha o CA que você importou (ele será nomeado como “VPN root CA” se você não alterou o “DN” anteriormente).
- Se desejar, preencha Nome do perfil (opcional) com um nome mais descritivo.
Quando desejar conectar-se à VPN, clique no perfil que acabou de criar no aplicativo StrongSwan.
Solução de Problemas de Conexões
Se não conseguir importar o certificado, verifique se o arquivo tem a extensão .pem
, e não .pem.txt
.
Se não conseguir conectar-se à VPN, verifique o nome do servidor ou o endereço IP que você usou. O nome de domínio ou o endereço IP do servidor deve corresponder ao que você configurou como o nome comum (CN) ao criar o certificado. Se não corresponderem, a conexão VPN não funcionará. Por exemplo, se configurou um certificado com o CN vpn.example.com
, você deve usar vpn.example.com
ao inserir os detalhes do servidor VPN. Verifique novamente o comando que usou para gerar o certificado e os valores que usou ao criar a conexão VPN.
Por fim, verifique novamente a configuração da VPN para garantir que o valor leftid
esteja configurado com o símbolo @
se estiver usando um nome de domínio:
leftid=@vpn.example.com
Se estiver usando um endereço IP, certifique-se de que o símbolo @
seja omitido. Certifique-se também de que, ao gerar o arquivo server-cert.pem
, incluiu tanto as flags --san @endereço_IP
quanto --san endereço_IP
.
Conclusão
Neste tutorial, você construiu um servidor VPN que usa o protocolo IKEv2. Você aprendeu sobre as diretivas que controlam os lados left
e right
de uma conexão tanto no servidor quanto nos clientes. Você também configurou um cliente Windows, macOS, iOS, Android ou Linux para se conectar à VPN.
Para adicionar ou remover usuários, vá para o Passo 5 novamente. Cada linha em /etc/ipsec.secrets
é para um usuário, então adicionar ou remover usuários, ou alterar senhas apenas requer a edição do arquivo.
Agora você pode ter a certeza de que suas atividades online permanecerão seguras onde quer que vá e com qualquer dispositivo que você use para acessar a internet.