One place for hosting & domains

      IKEv2

      How to Set Up an IKEv2 VPN Server with StrongSwan on Ubuntu 18.04


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

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

      Passo 2 — Criando uma utoridade de certificação

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

      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:

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

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

      /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
      

      Na sequência, vamos configurar os parâmetros IPSec do lado (esquerdo) do servidor. Adicione isto ao arquivo:

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

      /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
      

      Finalmente, vamos dizer ao StrongSwan para pedir ao cliente as credenciais de usuários ao se conectarem:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          eap_identity=%identity
      

      O arquivo de configuração 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
      

      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.

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

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

      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:

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

      Output

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

      /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]
      . . .
      

      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:

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

      • Primeiramente, vamos habilitar o encaminhamento de pacotes IPv4.
      • 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.
      • Também não vamos aceitar redirecionamentos do ICMP (ou Internet Control Message Protocol - Protocolo de mensagens para o controle do tráfego) para evitar ataques de man-in-the-middle.

      As alterações que você precisa fazer no arquivo estão destacadas no seguinte código:

      /etc/ufw/sysctl.conf

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

      Passo 7 — Testando a conexão VPN em Windows, iOS e macOS

      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.

      Conectando-se com o Windows

      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** Adiciona**r.
      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: Exibição de Certificados

      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 para Importar, pressione o botão Pesquisar e selecione o arquivo do certificado 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 trabalh**o.
      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.

      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.

      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 é importante 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

      1. Atualize seu cache de pacotes local: sudo apt update
      2. Instale o StrongSwan e os softwares relacionados sudo apt install strongswan libcharon-extra-plugins
      3. Copie o certificado CA para o diretório /etc/ipsec.d/cacerts: sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
      4. Desabilite o StrongSwan para que a VPN não seja iniciada automaticamente: sudo systemctl disable --now strongswan
      5. Configure seu nome de usuário e senha da VPN no arquivo /etc/ipsec.secrets: your_username: EAP "your_password"<^>
      6. Edite o arquivo /etc/ipsec.conf para definir sua configuração.

      /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 à VPN, digite:

      • sudo systemctl start strongswan

      Para se desconectar novamente, digite:

      • sudo systemctl stop strongswan

      Usando um Cliente Simples para Conexões Únicas

      1. Atualize seu cache de pacotes local: sudo apt update
      2. Instale o charon-cmd e software relacionados sudo apt install charon-cmd libcharon-extra-plugins
      3. Vá até o diretório onde você copiou o certificado CA: cd <^>/path/to/ca-cert.pem
      4. Conecte-se ao servidor VPN com o 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
      5. Quando solicitado, insira a senha do usuário VPN.

      Agora, você deve estar conectado à VPN. Para se desconectar, pressione CTRL+C e aguarde 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 um e-mail para si mesmo com o certificado raiz 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 “mais”,** no canto superior direito (o ícone dos três pontos) e selecione certificados CA.
      4. Toque no ícone “mais”, 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 para aplicativo StrongSwan, você pode configurar a conexão VPN com estes 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 você 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á. 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.

      Conclusão

      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.



      Source link

      Cómo configurar un servidor VPN IKEv2 con StrongSwan en Ubuntu 18.04


      Introducción

      Un red virtual privad,(VPN, por sus siglas en inglés) le permite cifrar de forma segura el tráfico mientras tiene lugar a través de redes no confiables, como las de una cafetería, una sala de conferencias o un aeropuerto.

      IKEv2, o Internet Key Exchange v2, es un protocolo que permite la implementación directa de túneles de IPSec entre el servidor y los clientes. En las implementaciones de VPN IKEv2, IPSec proporciona cifrado para el tráfico de red. IKEv2 es compatible de forma nativa con algunas plataformas (OS X 10.11+, iOS 9.1+ y Windows 10) sin necesidad de aplicaciones adicionales y maneja los picos de los clientes sin problemas.

      A través de este tutorial, configurará un servidor VPN IKEv2 con ayuda de StrongSwan en un servidor Ubuntu 18.04 y se conectará a este desde clientes de Windows, macOS, Ubuntu, iOS y Android.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Paso 1: Instalar StrongSwan

      Primero, instalaremos StrongSwan, un demonio IPSec de código abierto que configuraremos para que funcione como nuestro servidor VPN. De igual modo, instalaremos el componente de infraestructura de clave pública que nos permita crear una autoridad de certificación para proporcionar las credenciales destinadas a nuestra infraestructura.

      Actualice la caché del paquete local e instale el software escribiendo lo siguiente:

      • sudo apt update
      • sudo apt install strongswan strongswan-pki

      Ahora que se instaló todo, crearemos nuestros certificados.

      Paso 2: Crear una autoridad de certificación

      Un servidor IKEv2 requiere un certificado para identificarse ante los clientes. Para que podamos crear el certificado requerido, el paquete strongswan-pki incluye una utilidad para generar una autoridad de certificación y certificados de servidor. Para comenzar, crearemos algunos directorios para almacenar todos los activos en los que trabajaremos. La estructura de directorios coincide con algunos de los directorios de /etc/ipsec.d, a donde moveremos todos los elementos que creemos en algún momento. Bloquearemos los permisos para que otros usuarios no puedan ver nuestros archivos privados:

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

      Ahora que disponemos de una estructura de directorios para almacenar todo, podemos generar una clave de root. Será una clave RSA de 4096 bits que se usará para firmar nuestra autoridad de certificación de root.

      Ejecute estos comandos para generar la clave:

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

      Ahora que contamos con una clave, podemos crear nuestra autoridad de certificación de root usando la clave para firmar nuestro certificado de root:

      • 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

      Puede cambiar los valores de *nombre distinguido *(DN) por otra cosa si lo desea. El nombre común aquí es únicamente el indicador, de modo que no tiene que coincidir con nada en su infraestructura.

      Ahora que nuestra autoridad de certificación de root está lista, podemos crear un certificado que usará el servidor de VPN.

      Paso 3: Generar un certificado para el servidor de VPN

      Ahora, crearemos un certificado y la contraseña para el servidor de VPN. Esta certificación permitirá a los clientes verificar la autenticidad del servidor usando la certificación de CA que acabamos de generar.

      Primero, cree una clave privada para el servidor de VPN con el siguiente comando:

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

      Ahora, cree y firme el certificado del servidor de VPN con la clave de la autoridad de certificación que creó en el paso anterior. Ejecute el siguiente comando, pero cambie los campos de nombre común (CN) y nombre alternativo de sujeto (SAN) por el nombre de DNS o la dirección IP de su servidor de VPN:

      • 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

      Ahora que generamos todos los archivos TLS/SSL que necesita StrongSwan, podemos moverlos a su lugar en el directorio /etc/ipsec.d escribiendo lo siguiente:

      • sudo cp -r ~/pki/* /etc/ipsec.d/

      En este paso, creamos un par de certificados que podrían usarse para proteger las comunicaciones entre el cliente y el servidor. También, firmamos los certificados con la clave de CA, para que el cliente pueda verificar la autenticidad del servidor de VPN usando el certificado de CA. Ahora que tenemos listos todos los certificados listos, configuraremos el software.

      Paso 4: Configurar StrongSwan

      StrongSwan tiene un archivo de configuración predeterminado con algunos ejemplos, pero tendremos que hacer la mayor parte de la configuración por nuestra cuenta. Haremos una copia de seguridad del archivo a modo de referencia antes de empezar de cero:

      • sudo mv /etc/ipsec.conf{,.original}

      Cree y abra un nuevo archivo de configuración vacío escribiendo lo siguiente:

      • sudo nano /etc/ipsec.conf

      Primero, le diremos a StrongSwan que registre los estados de los demonios para depurar y permitir conexiones duplicadas. Añada estas líneas al archivo:

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      

      Luego, crearemos una sección de configuración para nuestra VPN. También le indicaremos a StrongSwan que cree túneles de VPN IKEv2 y cargue de forma automática esta sección de configuración cuando se inicie. Agregue las siguientes líneas al archivo:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
      

      También configuraremos la detección de pares inactivos para eliminar cualquier conexión “pendiente” en caso de que el cliente se desconecte de forma inesperada. Agregue estas líneas:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          dpdaction=clear
          dpddelay=300s
          rekey=no
      

      Luego, configuraremos los parámetros IPSec del lado (izquierdo) del servidor. Agregue esto al archivo:

      /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: Cuando configure el ID del servidor (leftid), solo incluya el carácter @ si su servidor de VPN se identificará por un nombre de dominio:

          leftid=@vpn.example.com
      

      Si el servidor se identifica por su dirección IP, simplemente introdúzcala:

          leftid=203.0.113.7
      

      A continuación, podemos configurar los parámetros de IPSec del lado (derecho) del cliente, como los rangos de direcciones IP privadas y los servidores DNS que se usarán:

      /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
      

      Por último, indicaremos a StrongSwan que solicite a los clientes las credenciales de los usuarios cuando se conecten:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          eap_identity=%identity
      

      El archivo de configuración debe tener el siguiente aspecto:

      /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
      

      Guarde y cierre el archivo una vez que haya verificado que realizó la configuración como se indica.

      Ahora que configuramos los parámetros de VPN, crearemos una cuenta para que nuestros usuarios puedan conectarse al servidor.

      Paso 5: Configurar la autenticación de VPN

      Nuestro servidor de VPN ahora está configurado para aceptar conexiones de clientes, pero aún no establecimos credenciales. Tendremos que realizar algunas configuraciones en un archivo de configuración especial llamado ipsec.secrets:

      • Debemos indicar a StrongSwan dónde encontrar la clave privada para el certificado de nuestro servidor, de modo que este últio pueda autenticar a los clientes.
      • También, tendremos que configurar una lista de usuarios a quienes se les permitirá conectarse al VPN.

      Abramos el archivos de secretos para editarlo:

      • sudo nano /etc/ipsec.secrets

      Primero, le indicaremos a StrongSwan dónde encontrar nuestra clave privada:

      /etc/ipsec.secrets

      : RSA "server-key.pem"
      

      Luego, definiremos las credenciales de los usuarios. Puede crear cualquier combinación de nombre de usuario o contraseña que desee:

      /etc/ipsec.secrets

      your_username : EAP "your_password"
      

      Guarde y cierre el archivo. Ahora que terminamos de trabajar con los parámetros de VPN, reiniciaremos el servicio de VPN para que se aplique nuestra configuración:

      • sudo systemctl restart strongswan

      Ahora que el servidor de VPN quedó totalmente configurado, tanto con opciones de servidor como con las credenciales de usuarios, es el momento de proseguir con la configuración de la parte más importante: el firewall.

      Paso 6: Configurar el firewall y el reenvío de IP de kernel

      Una vez completada la configuración de StrongSwan, debemos configurar el firewall para reenviar y permitir el tráfico de VPN.

      Si siguió el tutorial de los requisitos previos, debería tener habilitado un firewall UFW muy básico. Si aún no tiene configurado UFW, puede crear una configuración referencial y habilitarla escribiendo lo siguiente:

      • sudo ufw allow OpenSSH
      • sudo ufw enable

      Ahora, agregue una regla para permitir el tráfico UDP a los puertos IPSec estándares 500 y 4500:

      • sudo ufw allow 500,4500/udp

      A continuación, abriremos uno de los archivos de configuración de UFW para agregar algunas políticas de bajo nivel a fin de dirigir y reenviar paquetes IPSec. Antes de hacerlo, debemos determinar la interfaz de red de nuestro servidor que se usa para acceder a Internet. Podemos encontrarlo consultando la interfaz asociada a la ruta predeterminada:

      Su interfaz pública debe ir después de la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada eth0, que se resalta a continuación:

      Output

      default via 203.0.113.7 dev eth0 proto static

      Cuando tenga una interfaz de red pública, abra el archivo /etc/ufw/before.rules en su editor de texto:

      • sudo nano /etc/ufw/before.rules

      Cerca de la parte superior del archivo (antes de la línea *filter), agregue el siguiente bloque de configuración:

      /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]
      . . .
      

      Cambie cada instancia de eth0 en la configuración superior para que coincida con el nombre de interfaz que encontró con ip route. Las líneas *nat crean reglas para que el firewall pueda dirigir y manipular de forma correcta el tráfico entre los clientes de VPN e Internet. La línea *mangle ajusta el tamaño máximo del segmento de paquete para evitar problemas potenciales con determinados clientes de VPN.

      A continuación, después de las líneas *filter y de definición de cadenas, agregue un bloque más de configuración:

      /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
      

      Estas líneas solicitan al firewall que reenvíe el tráfico de carga de seguridad encapsuladora (ESP), para que los clientes de VPN puedan conectarse. ESP proporciona seguridad adicional para nuestros paquetes de VPN a medida que circulan por redes no confiables.

      Cuando termine, guarde y cierre el archivo.

      Antes de reiniciar el firewall, cambiaremos algunos parámetros de kernel de red para permitir el enrutamiento de una interfaz a otra. Abra el archivo de configuración de parámetros de kernel de UFW.

      • sudo nano /etc/ufw/sysctl.conf

      Tendremos que realizar algunas configuraciones aquí:

      • Primero, habilitaremos el reenvío de paquetes IPv4.
      • Inhabilitaremos la detección de MTU de ruta para evitar problemas de fragmentación de paquetes.
      • Tampoco aceptaremos redireccionamientos de ICMP ni enviaremos redireccionamientos de ICMP para prevenir la presencia de atacantes desconocidos.

      Los cambios que debe hacer en el archivo están resaltados en el siguiente código:

      /etc/ufw/sysctl.conf

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

      Guarde el archivo cuando termine. UFW aplicará estos cambios la próxima vez que se inicie.

      Ahora podemos activar todos nuestros cambios desactivando y reactivando el firewall:

      • sudo ufw disable
      • sudo ufw enable

      Se le solicitará confirmar el proceso. Escriba Y para activar UFW nuevamente con las configuraciones nuevas.

      Paso 7: Probar la conexión de VPN en Windows, iOS y macOS

      Ahora que todo está configurado, es hora de probarlo. Primero, deberá copiar el certificado de CA que creó e instalarlo en sus dispositivos clientes que se conectarán a la VPN. La forma más sencilla de hacerlo es iniciar sesión en su servidor y mostrar el contenido del archivo de certificado:

      • cat /etc/ipsec.d/cacerts/ca-cert.pem

      Verá un resultado similar a este:

      Output

      -----BEGIN CERTIFICATE----- MIIFQjCCAyqgAwIBAgIIFkQGvkH4ej0wDQYJKoZIhvcNAQEMBQAwPzELMAkGA1UE . . . EwbVLOXcNduWK2TPbk/+82GRMtjftran6hKbpKGghBVDPVFGFT6Z0OfubpkQ9RsQ BayqOb/Q -----END CERTIFICATE-----

      Copie este resultado a su computadora, incluidas las líneas -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----, y guárdelo en un archivo con un nombre que pueda reconocer, como ca-cert.pem. Asegúrese de que el archivo que cree tenga la extensión .pem.

      De forma alternativa, use SFTP para transferir el archivo a su computadora.

      Una vez que descargue el archivo ca-cert.pem a su computadora, podrá configurar la conexión a la VPN.

      Establecer conexión desde Windows

      Primero, importe el certificado de root siguiendo estos pasos:

      1. Pulse WINDOWS+R para abrir el diálogo Ejecutar e ingrese mmc.exe para iniciar la Consola de administración de Windows.
      2. En el menú Archivo, diríjase a Agregar o quitar complemento, seleccione Certificados en la lista de complementos disponibles y haga clic en Agregar.
      3. Nuestro propósito es que la VPN funcione con cualquier usuario. Por ello, debe seleccionar Cuenta de equipo y hacer clic en Siguiente.
      4. Realizaremos algunas configuraciones en la computadora local. Seleccione Equipo local y luego haga clic en Finalizar.
      5. Debajo del nodo Raíz de consola, expanda la entrada Certificados (equipo local), expanda Entidades de certificación raíz de confianza, y seleccione la entrada Certificados: Vista de certificados.

      6. En el menú Acción, seleccione Todas las tareas y haga clic en Importar… para visualizar el Asistente para importación de certificados. Haga clic en Siguiente para pasar la introducción.

      7. En la pantalla Archivo para importar, presione el botón Examinar… y seleccione el archivo de certificado que guardó. Luego haga clic en Siguiente.

      8. Asegúrese de que el valor de Almacén de certificados sea Entidades de certificación raíz de confianza y haga clic en Siguiente.

      9. Haga clic en Finalizar para importar el certificado.

      Luego, configure la VPN siguiendo estos pasos:

      1. Inicie el Panel de control y diríjase a Centro de redes y recursos compartidos.
      2. Haga clic en Configurar una nueva conexión o red y luego seleccione Conectarse a un área de trabajo.
      3. Seleccione Usar mi conexión a Internet (VPN).
      4. Ingrese la información del servidor VPN. Ingrese el nombre del dominio o la dirección IP del servidor en el campo Dirección de Internet y luego complete Nombre de destino con algo que describa su conexión de VPN. Luego haga clic en Conectar.

      Se podrá ver su nueva conexión de VPN en la lista de redes. Seleccione la VPN y haga clic en Conectar. Se le solicitará su nombre de usuario y contraseña. Escríbalos y haga clic ****en Aceptar. Con esto, establecerá la conexión.

      Establecer conexión desde macOS

      Siga estos pasos para importar el certificado:

      1. Haga doble clic en el archivo de certificado.Acceso a Llaveros aparecerá con el diálogo “Acceso a Llaveros está intentando modificar el sistema de administración de contraseñas. Ingrese su contraseña para autorizarlo”.
      2. Ingrese su contraseña y haga clic en Modificar llavero.
      3. Haga clic en el certificado de VPN recién importado. Con esto, se abrirá abre una pequeña ventana de propiedades en la que podrá especificar los niveles de confianza. Fije Seguridad de IP (IPSec) en Confiar siempre. Se solicitará que ingrese su contraseña nuevamente. Esta configuración guarda de forma automática la contraseña una vez que se ingresa.

      Ahora que el certificado es importante y confiable, configure la conexión de VPN siguiendo estos pasos:

      1. Diríjase a Preferencias del Sistema y seleccione Red.
      2. Haga clic en el botón pequeño de “adición” en la parte inferior izquierda de la lista de redes.
      3. En la ventana emergente que aparecerá, fije el valor de Interfaz en VPN y el de Tipo de VPN en IKEv2, y asigne un nombre a la conexión.
      4. En los campos Servidor y ID remoto, ingrese el nombre de dominio o la dirección IP del servidor. Deje ID local en blanco.
      5. Haga clic en Ajustes de autenticación, seleccione Nombre del usuario, e ingrese el nombre de usuario y la contraseña que configuró para su usuario de VPN. Luego haga clic en Aceptar.

      Por último, haga clic en Conectar para conectarse a la VPN. Con esto, debería establecer la conexión con la VPN.

      Establecer conexión desde Ubuntu

      Para conectarse desde un equipo con Ubuntu, puede configurar y administrar StrongSwan como un servicio o usar un comando único cada vez que desee conectarse. Se proporcionan instrucciones para ambas alternativas.

      Administrar StrongSwan como un servicio

      1. Actualice la cache de su paquete local: sudo apt update.
      2. Instale StrongSwan y el software relacionado: libcharon sudo apt install.
      3. Copie el certificado CA al directorio /etc/ipsec.d/cacerts: sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts.
      4. Inhabilite StrongSwan para que la VPN no se inicie de forma automática: sudo systemctl disable --now strongswan.
      5. Configure su nombre de usuario y contraseña de VPN en el archivo /etc/ipsec.secrets: your_username: EAP “your_password”<^>.
      6. Edite el archivo /etc/ipsec.conf para definir su configuración.

      /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 conectarse a la VPN, escriba lo siguiente:

      • sudo systemctl start strongswan

      Para desconectarse nuevamente, escriba lo siguiente:

      • sudo systemctl stop strongswan

      Utilizar un cliente simple para conexiones únicas

      1. Actualice la caché de su paquete local: sudo apt update.
      2. Instale charon-cmd y el software relacionado: sudo apt install charon-cmd.
      3. Vaya al directorio al que copió el certificado de CA: cd /path/to/ca-cert.pem.
      4. Conéctese al servidor de VPN con charon-cmd usando el certificado de CA del servidor, la dirección IP del servidor de VPN y el usuario que configuró: sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username.
      5. Cuando se le solicite, brinde la contraseña del usuario de la VPN.

      Con esto, debería establecer la conexión con la VPN. Para desconectarse, pulse CTRL+C y espere que la conexión se cierre.

      Establecer conexión desde iOS

      Para configurar la conexión de VPN en un dispositivo iOS, siga estos pasos:

      1. Envíese un correo electrónico con el certificado de root adjunto.
      2. Abra el correo electrónico en su dispositivo iOS, toque el archivo del certificado adjunto y luego seleccione Instalar e ingrese su código de acceso. Una vez que se instale, pulse Listo.
      3. Diríjase a Configuración, General, VPN y toque Agregar configuración de VPN. Con esto, se mostrará la pantalla de configuración de la conexión de la VPN.
      4. Toque Tipo y seleccione IKEv2.
      5. En el campo Descripción, ingrese un nombre corto para la conexión de VPN. Puede ser el que desee.
      6. En los campos Servidor e ID remoto, ingrese el nombre de dominio o la dirección IP del servidor. Puede dejar el campo ID local vacío.
      7. Ingrese su nombre de usuario y contraseña en la sección Autenticación y toque Listo.
      8. Seleccione la conexión de VPN que acaba de crear y toque el conmutador en la parte superior de la página. Con esto, se conectará.

      Establecer conexión desde Android

      Siga estos pasos para importar el certificado:

      1. Envíese un correo electrónico con el certificado de CA adjunto. Guarde el certificado CA en su carpeta de descargas.
      2. Descargue strongSwan VPN Client de Play Store.
      3. Abra la aplicación. Toque el ícono “más” en la esquina superior derecha (ícono de tres puntos) y seleccione certificados de CA.
      4. Toque nuevamente el ícono “más” en la esquina superior derecha. Seleccione Importar certificado.
      5. Busque el archivo del certificado de CA en su carpeta de descargas y selecciónelo para importarlo a la aplicación.

      Ahora que se importó el certificado a la aplicación strongSwan, puede configurar la conexión de VPN con los siguientes pasos:

      1. En la aplicación, toque ADD VPN PROFILE en la parte superior.
      2. Complete el *campo Server *con el nombre de dominio o la dirección IP pública de su servidor de VPN.
      3. Asegúrese de seleccionar IKEv2 EAP (Username/Password) en la categoría “Type” para la VPN.
      4. Complete los campos Username y Password con las credenciales que definió en el servidor.
      5. Anule la selección de** Select automatically en la sección CA certificate** y haga clic en Select CA certificate .
      6. Toque la pestaña IMPORTED en la parte superior de la pantalla y elija la CA que importó (recibirá el nombre “CA rootVPN” si no cambió “DN” previamente).
      7. Si desea, complete el campo Profile name (optional) con un nombre más descriptivo.

      Cuando desee conectarse a la VPN, haga clic en el perfil que acaba de crear en la aplicación strongSwan.

      Solución de problemas en conexiones

      Si no puede importar el certificado, asegúrese de que el archivo contenga la extensión .pem en lugar .pem.txt.

      Si no puede conectarse a la VPN, verifique el nombre o la dirección IP del servidor que usó. El nombre de dominio o la dirección IP del servidor debe coincidir con lo que configuró como nombre común (CN) al crear el certificado. Si no coinciden, la conexión de VPN no funcionará. Si configura un certificado con el CN de vpn.example.com, debe usar vpn.example.com cuando ingrese la información del servidor de VPN. Verifique bien el comando que usó para generar el certificado y los valores que empleó al crear su conexión de VPN.

      Por último, verifique la configuración de VPN para garantizar que el valor leftid esté configurado con el símbolo @ si usa un nombre de dominio:

          leftid=@vpn.example.com
      

      Y si usa una dirección IP, asegúrese de que se omita el símbolo @.

      Conclusión

      A través de este tutorial, creó un servidor de VPN que usa el protocolo IKEv2. Ahora tendrá la seguridad de que sus actividades en línea permanecerán protegidas sin importar a dónde se dirija.

      Para agregar o eliminar usuarios, simplemente repase el paso 5. Cada línea es para un usuario. Esto permite agregar o eliminar usuarios con solo editar el archivo.

      A partir de este punto, es posible que desee configurar un analizador de archivos de registro, ya que strongSwan vuelca sus registros en syslog. Encontrará más información sobre cómo realizar esta configuración en el tutorial Cómo instalar y usar Logwatch Log Analyzer and Reporter en un VPS.

      Puede interesarle también esta guía de EFF sobre privacidad en línea.



      Source link

      How to Set Up an IKEv2 VPN Server with StrongSwan on Ubuntu 18.04


      Introduction

      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.

      IKEv2, or Internet Key Exchange v2, is a protocol that allows for direct IPSec tunneling between the server and client. In IKEv2 VPN implementations, IPSec provides encryption for the network traffic. IKEv2 is natively supported on some platforms (OS X 10.11+, iOS 9.1+, and Windows 10) with no additional applications necessary, and it handles client hiccups quite smoothly.

      In this tutorial, you’ll set up an IKEv2 VPN server using StrongSwan on an Ubuntu 18.04 server and connect to it from Windows, macOS, Ubuntu, iOS, and Android clients.

      Prerequisites

      To complete this tutorial, you will need:

      Step 1 — Installing StrongSwan

      First, we’ll install StrongSwan, an open-source IPSec daemon which we’ll configure as our VPN server. We’ll also install the public key infrastructure component so that we can create a certificate authority to provide credentials for our infrastructure.

      Update the local package cache and install the software by typing:

      • sudo apt update
      • sudo apt install strongswan strongswan-pki

      Now that everything’s installed, let’s move on to creating our certificates.

      Step 2 — Creating a Certificate Authority

      An IKEv2 server requires a certificate to identify itself to clients. To help us create the certificate required, the strongswan-pki package comes with a utility to generate a certificate authority and server certificates. To begin, let’s create a few directories to store all the assets we’ll be working on. The directory structure matches some of the directories in /etc/ipsec.d, where we will eventually move all of the items we create. We’ll lock down the permissions so that our private files can’t be seen by other users:

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

      Now that we have a directory structure to store everything, we can generate a root key. This will be a 4096-bit RSA key that will be used to sign our root certificate authority.

      Execute these commands to generate the key:

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

      Now that we have a key, we can move on to creating our root certificate authority, using the key to sign the root certificate:

      • 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

      You can change the distinguished name (DN) values to something else to if you would like. The common name here is just the indicator, so it doesn’t have to match anything in your infrastructure.

      Now that we’ve got our root certificate authority up and running, we can create a certificate that the VPN server will use.

      Step 3 — Generating a Certificate for the VPN Server

      We’ll now create a certificate and key for the VPN server. This certificate will allow the client to verify the server’s authenticity using the CA certificate we just generated.

      First, create a private key for the VPN server with the following command:

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

      Now, create and sign the VPN server certificate with the certificate authority’s key you created in the previous step. Execute the following command, but change the Common Name (CN) and the Subject Alternate Name (SAN) field to your VPN server’s DNS name or IP address:

      • 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

      Now that we’ve generated all of the TLS/SSL files StrongSwan needs, we can move the files into place in the /etc/ipsec.d directory by typing:

      • sudo cp -r ~/pki/* /etc/ipsec.d/

      In this step, we’ve created a certificate pair that would be used to secure communications between the client and the server. We’ve also signed the certificates with the CA key, so the client will be able to verify the authenticity of the VPN server using the CA certificate. Now that have all of the certificates ready, we’ll move on to configuring the software.

      Step 4 — Configuring StrongSwan

      StrongSwan has a default configuration file with some examples, but we will have to do most of the configuration ourselves. Let’s back up the file for reference before starting from scratch:

      • sudo mv /etc/ipsec.conf{,.original}

      Create and open a new blank configuration file by typing:

      • sudo nano /etc/ipsec.conf

      First, we’ll tell StrongSwan to log daemon statuses for debugging and allow duplicate connections. Add these lines to the file:

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      

      Then, we’ll create a configuration section for our VPN. We’ll also tell StrongSwan to create IKEv2 VPN Tunnels and to automatically load this configuration section when it starts up. Append the following lines to the file:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
      

      We’ll also configure dead-peer detection to clear any “dangling” connections in case the client unexpectedly disconnects. Add these lines:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          dpdaction=clear
          dpddelay=300s
          rekey=no
      

      Then, we’ll configure the server (left) side IPSec parameters. Add this to the file:

      /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
      

      Note: When configuring the server ID (leftid), only include the @ character if your VPN server will be identified by a domain name:

          leftid=@vpn.example.com
      

      If the server will be identified by its IP address, just put the IP address in:

          leftid=203.0.113.7
      

      Next, we can configure the client (right) side IPSec parameters, like the private IP address ranges and DNS servers to use:

      /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
      

      Finally, we’ll tell StrongSwan to ask the client for user credentials when they connect:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          eap_identity=%identity
      

      The configuration file should look like this:

      /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
      

      Save and close the file once you’ve verified that you’ve configured things as shown.

      Now that we’ve configured the VPN parameters, let’s move on to creating an account so our users can connect to the server.

      Step 5 — Configuring VPN Authentication

      Our VPN server is now configured to accept client connections, but we don’t have any credentials configured yet. We’ll need to configure a couple things in a special configuration file called ipsec.secrets:

      • We need to tell StrongSwan where to find the private key for our server certificate, so the server will be able to authenticate to clients.
      • We also need to set up a list of users that will be allowed to connect to the VPN.

      Let’s open the secrets file for editing:

      • sudo nano /etc/ipsec.secrets

      First, we’ll tell StrongSwan where to find our private key:

      /etc/ipsec.secrets

      : RSA "server-key.pem"
      

      Then, we’ll define the user credentials. You can make up any username or password combination that you like:

      /etc/ipsec.secrets

      your_username : EAP "your_password"
      

      Save and close the file. Now that we’ve finished working with the VPN parameters, we’ll restart the VPN service so that our configuration is applied:

      • sudo systemctl restart strongswan

      Now that the VPN server has been fully configured with both server options and user credentials, it’s time to move on to configuring the most important part: the firewall.

      Step 6 — Configuring the Firewall & Kernel IP Forwarding

      With the StrongSwan configuration complete, we need to configure the firewall to forward and allow VPN traffic through.

      If you followed the prerequisite tutorial, you should have a very basic UFW firewall enabled. If you don’t yet have UFW configured, you can create a baseline configuration and enable it by typing:

      • sudo ufw allow OpenSSH
      • sudo ufw enable

      Now, add a rule to allow UDP traffic to the standard IPSec ports, 500 and 4500:

      • sudo ufw allow 500,4500/udp

      Next, we will open up one of UFW’s configuration files to add a few low-level policies for routing and forwarding IPSec packets. Before we do, we need to find which network interface on our server is used for internet access. We can find that by querying for the interface associated with the default route:

      Your public interface should follow the word "dev". For example, this result shows the interface named eth0, which is highlighted below:

      Output

      default via 203.0.113.7 dev eth0 proto static

      When you have your public network interface, open the /etc/ufw/before.rules file in your text editor:

      • sudo nano /etc/ufw/before.rules

      Near the top of the file (before the *filter line), add the following configuration block:

      /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]
      . . .
      

      Change each instance of eth0 in the above configuration to match the interface name you found with ip route. The *nat lines create rules so that the firewall can correctly route and manipulate traffic between the VPN clients and the internet. The *mangle line adjusts the maximum packet segment size to prevent potential issues with certain VPN clients.

      Next, after the *filter and chain definition lines, add one more block of configuration:

      /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
      

      These lines tell the firewall to forward ESP (Encapsulating Security Payload) traffic so the VPN clients will be able to connect. ESP provides additional security for our VPN packets as they're traversing untrusted networks.

      When you're finished, save and close the file.

      Before we restart the firewall, we'll change some network kernel parameters to allow routing from one interface to another. Open UFW's kernel parameters configuration file:

      • sudo nano /etc/ufw/sysctl.conf

      We'll need to configure a few things here:

      • First, we'll enable IPv4 packet forwarding.
      • We'll disable Path MTU discovery to prevent packet fragmentation problems.
      • We also won't accept ICMP redirects nor send ICMP redirects to prevent man-in-the-middle attacks.

      The changes you need to make to the file are highlighted in the following code:

      /etc/ufw/sysctl.conf

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

      Save the file when you are finished. UFW will apply these changes the next time it starts.

      Now, we can enable all of our changes by disabling and re-enabling the firewall:

      • sudo ufw disable
      • sudo ufw enable

      You'll be prompted to confirm the process. Type Y to enable UFW again with the new settings.

      Step 7 – Testing the VPN Connection on Windows, iOS, and macOS

      Now that you have everything set up, it's time to try it out. First, you'll need to copy the CA certificate you created and install it on your client device(s) that will connect to the VPN. The easiest way to do this is to log into your server and output the contents of the certificate file:

      • cat /etc/ipsec.d/cacerts/ca-cert.pem

      You'll see output similar to this:

      Output

      -----BEGIN CERTIFICATE----- MIIFQjCCAyqgAwIBAgIIFkQGvkH4ej0wDQYJKoZIhvcNAQEMBQAwPzELMAkGA1UE . . . EwbVLOXcNduWK2TPbk/+82GRMtjftran6hKbpKGghBVDPVFGFT6Z0OfubpkQ9RsQ BayqOb/Q -----END CERTIFICATE-----

      Copy this output to your computer, including the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- lines, and save it to a file with a recognizable name, such as ca-cert.pem. Ensure the file you create has the .pem extension.

      Alternatively, use SFTP to transfer the file to your computer.

      Once you have the ca-cert.pem file downloaded to your computer, you can set up the connection to the VPN.

      Connecting from Windows

      First, import the root certificate by following these steps:

      1. Press WINDOWS+R to bring up the Run dialog, and enter mmc.exe to launch the Windows Management Console.
      2. From the File menu, navigate to Add or Remove Snap-in, select Certificates from the list of available snap-ins, and click Add.
      3. We want the VPN to work with any user, so select Computer Account and click Next.
      4. We're configuring things on the local computer, so select Local Computer, then click Finish.
      5. Under the Console Root node, expand the Certificates (Local Computer) entry, expand Trusted Root Certification Authorities, and then select the Certificates entry:
        Certificates view

      6. From the Action menu, select All Tasks and click Import to display the Certificate Import Wizard. Click Next to move past the introduction.

      7. On the File to Import screen, press the Browse button and select the certificate file that you've saved. Then click Next.

      8. Ensure that the Certificate Store is set to Trusted Root Certification Authorities, and click Next.

      9. Click Finish to import the certificate.

      Then configure the VPN with these steps:

      1. Launch Control Panel, then navigate to the Network and Sharing Center.
      2. Click on Set up a new connection or network, then select Connect to a workplace.
      3. Select Use my Internet connection (VPN).
      4. Enter the VPN server details. Enter the server's domain name or IP address in the Internet address field, then fill in Destination name with something that describes your VPN connection. Then click Done.

      Your new VPN connection will be visible under the list of networks. Select the VPN and click Connect. You'll be prompted for your username and password. Type them in, click OK, and you'll be connected.

      Connecting from macOS

      Follow these steps to import the certificate:

      1. Double-click the certificate file. Keychain Access will pop up with a dialog that says "Keychain Access is trying to modify the system keychain. Enter your password to allow this."
      2. Enter your password, then click on Modify Keychain
      3. Double-click the newly imported VPN certificate. This brings up a small properties window where you can specify the trust levels. Set IP Security (IPSec) to Always Trust and you'll be prompted for your password again. This setting saves automatically after entering the password.

      Now that the certificate is important and trusted, configure the VPN connection with these steps:

      1. Go to System Preferences and choose Network.
      2. Click on the small "plus" button on the lower-left of the list of networks.
      3. In the popup that appears, Set Interface to VPN, set the VPN Type to IKEv2, and give the connection a name.
      4. In the Server and Remote ID field, enter the server's domain name or IP address. Leave the Local ID blank.
      5. Click on Authentication Settings, select Username, and enter your username and password you configured for your VPN user. Then click OK.

      Finally, click on Connect to connect to the VPN. You should now be connected to the VPN.

      Connecting from Ubuntu

      To connect from an Ubuntu machine, you can set up and manage StrongSwan as a service or use a one-off command every time you wish to connect. Instructions are provided for both.

      Managing StrongSwan as a Service

      1. Update your local package cache: sudo apt update
      2. Install StrongSwan and the related software sudo apt install strongswan libcharon-extra-plugins
      3. Copy the CA certificate to the /etc/ipsec.d/cacerts directory: sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
      4. Disable StrongSwan so that the VPN doesn't start automatically: sudo systemctl disable --now strongswan
      5. Configure your VPN username and password in the /etc/ipsec.secrets file: your_username : EAP "your_password"
      6. Edit the /etc/ipsec.conf file to define your configuration.

      /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
      

      To connect to the VPN, type:

      • sudo systemctl start strongswan

      To disconnect again, type:

      • sudo systemctl stop strongswan

      Using a Simple Client for One-Off Connections

      1. Update your local package cache: sudo apt update
      2. Install charon-cmd and related software sudo apt install charon-cmd libcharon-extra-plugins
      3. Move to the directory where you copied the CA certificate: cd <^>/path/to/ca-cert.pem
      4. Connect to the VPN server with charon-cmd using the server's CA certificate, the VPN server's IP address, and the username you configured: sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
      5. When prompted, provide the VPN user's password.

      You should now be connected to the VPN. To disconnect, press CTRL+C and wait for the connection to close.

      Connecting from iOS

      To configure the VPN connection on an iOS device, follow these steps:

      1. Send yourself an email with the root certificate attached.
      2. Open the email on your iOS device and tap on the attached certificate file, then tap Install and enter your passcode. Once it installs, tap Done.
      3. Go to Settings, General, VPN and tap Add VPN Configuration. This will bring up the VPN connection configuration screen.
      4. Tap on Type and select IKEv2.
      5. In the Description field, enter a short name for the VPN connection. This could be anything you like.
      6. In the Server and Remote ID field, enter the server's domain name or IP address. The Local ID field can be left blank.
      7. Enter your username and password in the Authentication section, then tap Done.
      8. Select the VPN connection that you just created, tap the switch on the top of the page, and you'll be connected.

      Connecting from Android

      Follow these steps to import the certificate:

      1. Send yourself an email with the CA certificate attached. Save the CA certificate to your downloads folder.
      2. Download the StrongSwan VPN client from the Play Store.
      3. Open the app. Tap the "more" icon in the upper-right corner (the three dots icon) and select CA certificates.
      4. Tap the "more" icon in the upper-right corner again. Select Import certificate.
      5. Browse to the CA certificate file in your downloads folder and select it to import it into the app.

      Now that the certificate is imported into the StrongSwan app, you can configure the VPN connection with these steps:

      1. In the app, tap ADD VPN PROFILE at the top.
      2. Fill out the Server with your VPN server's domain name or public IP address.
      3. Make sure IKEv2 EAP (Username/Password) is selected as the VPN Type.
      4. Fill out the Username and Password with the credentials you defined on the server.
      5. Deselect Select automatically in the CA certificate section and click Select CA certificate.
      6. Tap the IMPORTED tab at the top of the screen and choose the CA you imported (it will be named "VPN root CA" if you didn't change the "DN" earlier).
      7. If you'd like, fill out Profile name (optional) with a more descriptive name.

      When you wish to connect to the VPN, click on profile you just created in the StrongSwan application.

      Troubleshooting Connections

      If you are unable to import the certificate, ensure the file has the .pem extension, and not .pem.txt.

      If you're unable to connect to the VPN, check the server name or IP address you used. The server's domain name or IP address must match what you've configured as the common name (CN) while creating the certificate. If they don't match, the VPN connection won't work. If you set up a certificate with the CN of vpn.example.com, you must use vpn.example.com when you enter the VPN server details. Double-check the command you used to generate the certificate, and the values you used when creating your VPN connection.

      Finally, double-check the VPN configuration to ensure the leftid value is configured with the @ symbol if you're using a domain name:

          leftid=@vpn.example.com
      

      And if you're using an IP address, ensure that the @ symbol is omitted.

      Conclusion

      In this tutorial, you've built a VPN server that uses the IKEv2 protocol. Now you can be assured that your online activities will remain secure wherever you go!

      To add or remove users, just take a look at Step 5 again. Each line is for one user, so adding or removing users is as simple as editing the file.

      From here, you might want to look into setting up a log file analyzer, because StrongSwan dumps its logs into syslog. The tutorial  How To Install and Use Logwatch Log Analyzer and Reporter on a VPS has more information on setting that up.

      You might also be interested in this guide from the EFF about online privacy.



      Source link