Tutorial

Como configurar um servidor VPN IKEv2 com o StrongSwan no Ubuntu 20.04

UbuntuSecurityVPNUbuntu 20.04

Uma versão anterior deste tutorial foi escrita por Justin Ellingwood e Namo

Introdução

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 Internet Key Exchange v2, ou IKEv2, é um protocolo que permite o tunelamento IPSec direto 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, e ele cuida de engasgos de clientes muito bem.

Neste tutorial, você irá configurar um servidor VPN IKEv2 usando o StrongSwan em um servidor Ubuntu 20.04. Em seguida, você irá aprender como se conectar a ele com os clientes do Windows, macOS, Ubuntu, iOS e Android.

Pré-requisitos

Para completar este tutorial, você precisará de:

Passo 1 — Instalando o StrongSwan

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 (PKI) para que possamos criar uma autoridade de certificação (CA) para fornecer credenciais para nossa infraestrutura.

Comece atualizando o cache de pacotes local:

  • sudo apt update

Em seguida, instale o software digitando:

  • sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

O pacote libcharon-extauth-plugins adicional é usado para garantir que vários clientes possam se autenticar em seu servidor usando um nome de usuário e uma frase secreta compartilhados.

Agora que tudo está instalado, vamos seguir em frente para criar nossos certificados.

Passo 2 — Criando uma Autoridade de Certificação

Um servidor com IKEv2 exige que um certificado se identifique para os clientes. Para ajudar a criar o certificado exigido, o pacote strongswan-pki vem com um utilitário chamado pki 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:

  • mkdir -p ~/pki/{cacerts,certs,private}

Em seguida, vamos bloquear as permissões para que nossos arquivos privados não possam ser vistos por outros usuários:

  • 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:

  • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Depois disso, podemos seguir em frente para criar nossa autoridade de certificação root usando a chave que acabamos de gerar para assinar o certificado root:

  • 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

O sinalizador --lifetime 3650 é usado para garantir que o certificado root da autoridade de certificação seja válido por 10 anos. O certificado root para uma autoridade não muda de maneira típica, uma vez que ele teria que ser redistribuído para todos os servidores e clientes que dependem dele. Sendo assim, 10 anos é um valor de validade padrão seguro.

É possível alterar o valor de nome diferenciado (DN) para outra coisa se você preferir. O nome comum (campo CN) aqui é apenas o indicador, então ele não precisa corresponder a nada em sua infraestrutura.

Agora que temos nossa autoridade de certificação root em funcionamento, podemos criar um certificado que o servidor VPN usará.

Passo 3 — Gerando um certificado para o Servidor VPN

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:

  • 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:

  • pki --pub --in ~/pki/private/server-key.pem --type rsa \
  • | 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

Nota: se 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 diferenciado (--dn ...) precisará ser modificada com a entrada extra, assim como na seguinte linha extraída:

--dn "CN=IP address --san @IP_address --san IP_address \

A razão pela qual essa entrada extra --san @IP_address é necessária é que alguns clientes irão verificar 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 a autenticação de servidor, antes de o túnel criptografado ser estabelecido. A opção --flag ikeIntermediate é usada para dar suporte a clientes macOS mais antigos.

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 será 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. Com todos esses certificados prontos, vamos seguir para a configuração do software.

Passo 4 — Configurando o StrongSwan

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 usando seu editor de texto preferido. Aqui, usaremos o nano:

  • sudo nano /etc/ipsec.conf

Nota: conforme for trabalhando nessa seção para configurar a porção do servidor da sua VPN, você encontrará configurações que se referem a lados left (esquerdo) e right (direito) de uma conexão. Quando se trabalha com VPNs IPSec, o lado esquerdo por convenção refere-se ao sistema local que você está configurando, neste caso o servidor. As diretivas laterais direita nessas configurações se referirão a clientes remotos, como telefones e outros computadores.

Quando você for configurar clientes mais adiante neste tutorial, os arquivos de configuração do cliente se referirão a si mesmos usando várias diretivas left, e o servidor será referido usando a terminologia right.

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:

/etc/ipsec.conf
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:

/etc/ipsec.conf
. . .
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:

/etc/ipsec.conf
. . .
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 seguintes parâmetros garante que o servidor esteja configurado para aceitar conexões de clientes e se identificar corretamente. Você irá adicionar cada uma dessas configurações ao arquivo /etc/ipsec.conf assim que estiver familiarizado com o que eles são e por que são usados:

  • left=%any O valor %any garante que o servidor usará a interface de rede onde ele recebe conexões de entrada para posterior comunicação com clientes. Por exemplo, se você estiver conectando um cliente por uma rede privada, o servidor usará o endereço IP privado onde ele recebe tráfego para o resto da conexão.
  • leftid=@server_domain_or_IP Essa opção controla o nome que o servidor apresenta aos clientes. Quando combinada com a próxima opção leftcert, a opção leftid garante que o nome configurado do servidor e o nome diferenciado (DN) que está contido no certificado público correspondam.
  • leftcert=server-cert.pem Essa opção indica o caminho para o certificado público do servidor que você configurou no Passo 3. Sem ele, o servidor não será capaz de autenticar-se com clientes ou terminar de negociar a configuração do IKEv2.
  • leftsendcert=always O valor always (sempre) garante que qualquer cliente que se conecte ao servidor receba sempre uma cópia do certificado público do servidor como parte da configuração de conexão inicial.
  • leftsubnet=0.0.0.0/0 A última opção do lado “esquerdo” que você adicionará informa aos clientes sobre as sub-redes que são alcançáveis por trás do servidor. Neste caso, 0.0.0.0/0 é usado para representar todo o conjunto de endereços IPv4, o que significa que o servidor irá pedir 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 “esquerdo”, adicione todas elas ao arquivo desta forma:

/etc/ipsec.conf
. . .
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 o seu servidor de VPN for identificado por um nome de domínio:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Se o servidor for identificado pelo seu endereço IP, apenas coloque o endereço IP em:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Em seguida, podemos configurar os parâmetros IPSec do lado “direito” do cliente. Cada um dos parâmetros a seguir informa ao servidor como aceitar conexões de clientes, como os clientes devem se autenticar no servidor e os intervalos de endereços IP privados e servidores DNS que os clientes usarão. Adicione cada uma dessas configurações ao arquivo /etc/ipsec.conf assim que estiver familiarizado com o que elas são e por que são usadas:

  • right=%any A opção %any para o lado right da conexão instrui o servidor a aceitar conexões recebidas de qualquer cliente remoto.
  • rightid=%any Essa opção garante que o servidor não irá rejeitar conexões de clientes que fornecem uma identidade antes que o túnel criptografado seja estabelecido.
  • rightauth=eap-mschapv2 Essa opção configura o método de autenticação que os clientes usarão para se autenticar no servidor. O eap-mschapv2 é usado aqui para garantir ampla compatibilidade para suportar clientes como Windows, macOS e dispositivos Android.
  • rightsourceip=10.10.10.0/24 Essa opção instrui o servidor a atribuir endereços IP privados aos clientes a partir da pool de IPs 10.10.10.0/24 especificada.
  • rightdns=8.8.8.8,8.8.4.4 Esses endereços IP são resolvedores de DNS públicos do Google. Eles podem ser alterados para outros resolvedores públicos, resolvedores do servidor VPN ou qualquer outro resolvedor que os clientes consigam acessar.
  • rightsendcert=never Essa opção instrui o servidor que os clientes não precisam enviar por conta própria um certificado para se autenticar.

Agora que você está familiarizado com as opções do lado “direito” necessárias para a VPN, adicione as seguintes linhas ao /etc/ipsec.conf:

/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 pedir ao cliente as credenciais de usuário ao se conectarem:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Por fim, adicione as seguintes linhas para dar suporte a clientes Linux, Windows, macOS, iOS e Android. Estas linhas especificam os vários algoritmos de intercâmbio de chave, hash, autenticação e criptografia (comumente conhecidos como Pacotes de codificação) que o StrongSwan permitirá que diferentes clientes usem:

/etc/ipsec.conf
. . .
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 pacote de codificação suportado é separado dos outros por uma vírgula. Por exemplo, chacha20poly1305-sha512-curve25519-prfsha512 é um pacote, e aes256gcm16-sha384-prfsha384-ecp384 é outro. Os pacotes de codificação listados aqui são selecionados para garantir a mais ampla compatibilidade entre os clientes Windows, macOS, iOS, Android e Linux.

O arquivo de configuração completo deve se parecer com este:

/etc/ipsec.conf
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 assim que verificar se adicionou cada linha corretamente. Se usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

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.

Passo 5 — Configurando a autenticação da VPN

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:

  • Precisamos dizer ao StrongSwan onde encontrar a chave privada do certificado do nosso servidor, de modo que o servidor consiga autenticar os clientes.
  • Também precisamos configurar uma lista de usuários que serão autorizados a se conectar à VPN.

Vamos abrir o arquivo secrets para edição:

  • sudo nano /etc/ipsec.secrets

Primeiramente, vamos dizer ao StrongSwan onde encontrar nossa chave privada:

/etc/ipsec.secrets
: 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:

/etc/ipsec.secrets
your_username : EAP "your_password"

Salve e feche o arquivo. Agora que terminamos de trabalhar com os parâmetros VPN, vamos reiniciar o serviço VPN para que nossas configurações seja aplicada:

  • sudo systemctl restart strongswan-starter

Agora que o servidor VPN foi configurado completamente com ambas as opções de servidor e credenciais de usuário, é hora de seguir em frente para configurar a parte mais importante: o firewall.

Passo 6 — Configurando o encaminhamento de IP do Firewall e do Kernel

Com a configuração do StrongSwan concluída, precisamos configurar o firewall para permitir o tráfego VPN e encaminhá-lo.

Se você seguiu o tutorial pré-requisito de configuração inicial do servidor, deve ter um firewall UFW habilitado. Se ainda não tiver o UFW configurado, comece adicionando uma regra para permitir conexões SSH através do firewall. Isso é feito para que sua sessão atual não feche quando o UFW for habilitado:

  • sudo ufw allow OpenSSH

Em seguida, habilite o firewall digitando:

  • sudo ufw enable

Após isso, adicione uma regra para permitir o tráfego UDP nas portas IPSec padrão, 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. No entanto, antes que possamos fazer isso, precisamos encontrar qual interface de rede em nosso servidor é usada para o acesso à internet. Encontre essa interface consultando o dispositivo associado à rota padrão:

  • ip route show default

Sua interface pública deve vir após a palavra “dev”. Por exemplo, este resultado mostra a interface chamada eth0, que está destacada no exemplo a seguir:

Output
default via your_server_ip dev eth0 proto static

Quando tiver sua interface de rede pública, abra o arquivo /etc/ufw/before.rules no seu editor de texto. As regras nesse arquivo são adicionadas ao firewall antes do resto das regras habituais de entrada e saída. Elas são usadas para configurar a conversão de endereços de rede (NAT) para que o servidor possa encaminhar corretamente as conexões de entrada e saída para clientes e a internet.

  • sudo nano /etc/ufw/before.rules

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 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:

/etc/ufw/before.rules
*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 *filter e de cadeia, adicione mais um bloco de configuração:

/etc/ufw/before.rules
. . .
*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 tiver terminado, salve e feche o arquivo após ter verificado se adicionou cada linha corretamente. Se usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

Antes de reiniciarmos o firewall, vamos 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. Precisaremos configurar algumas coisas no arquivo.

Primeiro, o encaminhamento de pacotes IPv4 precisa ser ligado para que o tráfego possa se mover entre a VPN e as interfaces de rede voltadas ao público no servidor. Em seguida, vamos desabilitar a Path MTU Discovery (PMTUD), ou Descoberta da unidade máxima de transmissão do caminho, para evitar problemas de fragmentação de pacotes. Por fim, não vamos aceitar redirecionamentos ICMP nem enviar redirecionamentos ICMP para evitar ataques man-in-the-middle.

Abra o arquivo de configuração do kernel do UFW usando o nano ou seu editor de texto preferido:

  • sudo nano /etc/ufw/sysctl.conf

Agora, adicione a definição net/ipv4/ip_forward=1 no final do arquivo para habilitar o encaminhamento de pacotes entre interfaces:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Depois disso, bloqueie o envio e recebimento de pacotes de redirecionamento ICMP adicionando as seguintes linhas no final do arquivo:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Por fim, desative a descoberta MTU do caminho adicionando esta linha no fim do arquivo:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Salve o arquivo quando terminar. Agora, podemos habilitar todas as nossas alterações desativando e reativando o firewall, já que o UFW aplica essas configurações sempre que ele é reiniciado:

  • 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.

Passo 7 — Testando a conexão VPN no Windows, macOS, Ubuntu, iOS e Android

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----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

Copie este resultado para o seu computador, incluindo as linhas -----BEGIN CERTIFICATE----- e -----ENDCERTIFICATE----- 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.

Conectando-se com o Windows

Existem várias maneiras de importar o certificado root e configurar o Windows para se conectar a uma VPN. O primeiro método usa ferramentas gráficas para cada passo. O segundo método usa comandos do PowerShell, que podem ser controlados e modificados para se adequar à configuração de sua VPN.

Nota: essas instruções foram testadas em instalações do Windows 10 executando as versões 1903 e 1909.

Configurando o Windows com ferramentas gráficas

Primeiramente, importe o certificado raiz, seguindo estes passos:

  1. Pressione WINDOWS+R para trazer a janela Executar e digite mmc.exe“**** para iniciar o Console de Gerenciamento do Windows.
  2. Do menu Arquivo, navegue até Adicionar ou Remover Snap-in, selecione Certificados da lista de snap-ins disponíveis, e clique em Adicionar.
  3. Queremos que a VPN funcione com qualquer usuário, logo selecione Conta de Computador e clique em Avançar.
  4. Estamos configurando coisas no computador local, então selecione Computador Local e, depois, clique em Concluir.
  5. 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: de Certificados Exibição
  6. 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.
  7. Na tela Arquivo a ser importado, pressione o botão Pesquisar. Certifique-se de alterar o tipo de arquivo de “X.509 Certificate (.cer;.crt)” para “Todos os arquivos (. )”, e selecione o arquivo ca-cert.pem que você salvou. Então, clique em Avançar.
  8. Certifique-se de que Armazenagem de Certificados foi configurada em Autoridades Confiáveis para Certificação Raiz, e clique em Avançar.
  9. Clique em Concluir para importar o certificado.

Então, configure a VPN com estes passos:

  1. Abra o Painel de Controle, navegue até o Centro de Redes e Compartilhamento.
  2. Clique em Configurar uma nova conexão ou rede, depois selecione Conectar a um local de trabalho.
  3. Selecione Usar minha conexão com a Internet (VPN).
  4. Digite os detalhes do servidor VPN. Digite o nome de domínio ou endereço IP do servidor no campo Endereço de internet, depois, preencha o Nome do destino com algo que descreva sua conexão VPN. Então,clique em Feito.

Configurando o Windows usando o PowerShell

Para importar o certificado de CA root usando o PowerShell, abra primeiro um prompt PowerShell com privilégios de administrador. Para fazer isso, clique com o botão direito no ícone do menu Start e selecione o 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 Import-Certificate do PowerShell. No comando a seguir, o primeiro argumento -CertStoreLocation irá garantir que o certificado seja importado no armazenamento Autoridades de Certificação Raiz Confiáveis de modo que todos os programas e usuários consigam verificar o certificado do servidor VPN. O argumento -FilePath deve apontar para a localização 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 que corresponda à localização que você usou.

  • Import-Certificate `
  • -CertStoreLocation cert:\LocalMachine\Root\ `
  • -FilePath C:\users\sammy\Documents\ca-cert.pem

O comando gerará algo parecido com 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 comando a seguir. Coloque o nome DNS ou endereço IP do seu servidor na linha -ServerAddress. Os diversos sinalizadores 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.

  • Add-VpnConnection -Name "VPN Connection" `
  • -ServerAddress "server_domain_or_IP" `
  • -TunnelType "IKEv2" `
  • -AuthenticationMethod "EAP" `
  • -EncryptionLevel "Maximum" `
  • -RememberCredential `

Se o comando for bem sucedido, não haverá nenhum resultado. Para confirmar que a VPN está configurada corretamente, use o cmdlet Get-VPNConnection:

  • Get-VpnConnection -Name "VPN Connection"

Você receberá um resultado como o seguinte:

Output
Name : 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 do IKEv2 e para criptografar pacotes:

  • Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  • -AuthenticationTransformConstants GCMAES256 `
  • -CipherTransformConstants GCMAES256 `
  • -DHGroup ECP384 `
  • -IntegrityCheckMethod SHA384 `
  • -PfsGroup ECP384 `
  • -EncryptionMethod GCMAES256

Nota: se você quiser excluir a conexão VPN e reconfigurá-la com opções diferentes, pode executar o cmdlet Remove-VpnConnection.

  • Remove-VpnConnection -Name "VPN Connection" -Force

O sinalizador -Force irá ignorar o prompt que pediria que você confirmasse a remoção. Você deve estar desconectado da VPN se for tentar removê-la usando esse comando.

Conectando-se à VPN

Depois de ter importado o certificado e configurado a VPN usando qualquer um dos dois 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 colocar seu nome de usuário e senha. Digite-os, clique em OK e você estará conectado.

Conectando-se com o macOS

Siga estes passos para importar o certificado:

  1. Clique duas vezes no arquivo de certificados. Acesso ao Chaveiro irá aparecer com uma janela que diz "Acesso ao Chaveiro está tentando modificar o chaveiro do sistema. Digite sua senha para permitir.”
  2. Digite sua senha, então clique em Modificar o Chaveiro
  3. Clique duas vezes no certificado VPN recém-importado. Isso traz uma pequena janela de propriedades onde você pode especificar os níveis de confiança. Defina Segurança IP (IPSec) para Sempre Confiar e você será solicitado a inserir sua senha novamente. Esta configuração é salva automaticamente após colocar a senha.

Agora que o certificado foi importado e é confiável, configure a conexão VPN com estes passos:

  1. Vá até as Preferências do Sistema e escolha Rede.
  2. Clique no pequeno botão “mais” no canto inferior esquerdo da lista de redes.
  3. Na notificação que aparece, Defina a Interface como VPN, defina o Tipo** de VPN** como IKEv2 e nomeie a conexão.
  4. No campo Servidor e ID Remoto, digite o nome do domínio ou endereço IP do servidor. Deixe o ID Local em branco.
  5. Clique em Configurações de Autenticação, selecione Nome de usuário, e digite seu nome de usuário e senha que você configurou para seu usuário VPN. Então clique em OK.

Por fim, clique em Conectar para se conectar à VPN. Agora, você deve estar conectado à VPN.

Conectando-se com o Ubuntu

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.

Gerenciando o StrongSwan como um Serviço

Para gerenciar o StrongSwan como um serviço, você precisará executar os seguintes passos de configuração.

Primeiro, atualize seu cache de pacotes local usando o apt

  • sudo apt update

Em seguida, instale o StrongSwan e os plug-ins necessários para a autenticação:

  • sudo apt install strongswan libcharon-extra-plugins

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 comando a seguir para criar uma cópia do arquivo ca-cert.pem nesse local:

  • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Para garantir que a VPN seja executada apenas sob demanda, use o systemctl para impedir que o StrongSwan seja executado automaticamente:

  • sudo systemctl disable --now strongswan-starter

Em seguida, configure o nome de usuário e a senha que você usará para se autenticar no servidor VPN. Edite /etc/ipsec.secrets usando o nano ou seu editor preferido:

  • sudo nano /etc/ipsec.conf

Adicione a linha a seguir, editando os valores de nome de usuário e senha destacados para que correspondam àqueles que você configurou no servidor:

/etc/ipsec.conf
your_username : EAP "your_password"

Por fim, edite o arquivo /etc/ipsec.conf para configurar seu cliente de forma que corresponda à configuração do servidor:

/etc/ipsec.conf
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 ao VPN, digite:

  • sudo systemctl start strongswan-starter

Para se desconectar novamente, digite:

  • sudo systemctl stop strongswan-starter

Usando o cliente charon-cmd para conexões únicas

Para gerenciar o StrongSwan como um serviço, você precisará executar os seguintes passos de configuração.

Primeiro, atualize seu cache de pacotes local usando o apt

  • sudo apt update

Em seguida, instale o StrongSwan e os plug-ins necessários para a autenticação:

  • sudo apt install strongswan libcharon-extra-plugins

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 comando a seguir para criar uma cópia do arquivo ca-cert.pem nesse local:

  • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Neste ponto, você pode se conectar ao servidor VPN com o 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 comando a seguir sempre que quiser se conectar à VPN:

  • sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Quando solicitado, forneça a senha do usuário VPN e você será conectado à VPN. Para desconectar-se, pressione CTRL+C no terminal e espere que a conexão feche.

Conectando-se com o iOS

Para configurar a conexão VPN em um dispositivo iOS, siga estes passos:

  1. Envie para si mesmo um e-mail com o certificado root anexado.
  2. Abra o e-mail no seu dispositivo iOS e toque no arquivo do certificado anexado; depois, toque em Instalar e digite a sua senha. Assim que instalar, toque em Feito.
  3. Vá até Configurações, Geral, VPN e toque em Adicionar** Configuração de VPN. Isso irá trazer a tela de configuração de conexão VPN.
  4. Toque em Tipo e selecione IKEv2.
  5. No campo Descrição, escreva um nome curto para a conexão VPN. Isso pode ser o que você quiser.
  6. No campo Servidor e ID Remoto,**** digite o nome do domínio ou endereço IP do servidor. O campo ID Local pode ser deixado em branco.
  7. Digite seu nome de usuário e senha na seção Autenticação e, em seguida toque em**** Feito.
  8. Selecione a conexão VPN que você acabou de criar, toque no botão no alto da página e você estará conectado.

Conectando-se com o Android

Siga estes passos para importar o certificado:

  1. Envie um e-mail para si mesmo com o certificado CA anexado. Salve o certificado CA na sua pasta de downloads.
  2. Faça download do StrongSwan VPN client da Play Store.
  3. Abra o aplicativo. Toque no ícone “more” () no canto superior direito e selecione CA certificates.
  4. Toque no ícone “more”(), no canto superior direito novamente. Selecione Importar certificado.
  5. Navegue até o arquivo do certificado CA, em sua pasta de downloads e selecione-o para importá-lo para o aplicativo.

Agora que o certificado foi importado no aplicativo StrongSwan, você pode configurar a conexão VPN com esses passos:

  1. No aplicativo, clique em ADICIONAR PERFIL VPN, no topo.
  2. Preencha o Servidor com o nome de domínio ou endereço IP público do seu servidor VPN.
  3. Certifique-se de que IKEv2 EAP (Usuário/Senha) está selecionado como o Tipo VPN.
  4. Preencha o Nome de usuário e Senha com as credenciais que você definiu no servidor.
  5. Desmarque Selecionar automaticamente na seção certificado CA e clique em Selecionar o certificado CA.
  6. Toque na aba IMPORTADO, no alto da tela e escolha o CA que você importou (ele será chamado “VPN raiz CA” se você não tiver mudado o “DN” anteriormente).
  7. Se você quiser, preencha o Nome de perfil (opcional) com um nome mais descritivo.

Quando quiser se conectar à VPN, clique no perfil que você acabou de criar no aplicativo StrongSwan.

Solucionando problemas de conexão

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á. Por exemplo, se for configurar um certificado com o CN de vpn.example.com, você deve usar vpn.example.com ao 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:

/etc/ipsec.conf
    leftid=@vpn.example.com

E, caso esteja usando um endereço IP, certifique-se de que o símbolo @ seja omitido. Além disso, certifique-se de que ao gerar o arquivo server-cert.pem você tenha incluído ambas os sinalizadores --san @IP_address e --san IP_address.

Conclusão

Neste tutorial, você construiu um servidor VPN que usa o protocolo IKEv2. Você aprendeu sobre as diretrizes 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, volte para o Passo 5 novamente. Cada linha em /etc/ipsec.secrets é para um usuário. Dessa forma, adicionar,remover usuários ou alterar senhas depende apenas da edição do arquivo.

Agora, você pode ter certeza de que suas atividades online permanecerão seguras onde quer que você vá e com qualquer dispositivo que use para acessar a internet.

Creative Commons License