Cómo configurar una VPN IKEv2 con Strongswan y Letsencrypt en Ubuntu

Strongswan es una implementación IPSec multiplataforma de código abierto. Es una solución VPN basada en IPSec que se centra en el método y mecanismo de autenticación fuerte, ofrece soporte para los protocolos de intercambio de claves IKEv1 e IKEv2, autenticación basada en certificados X.509 o claves precompartidas, y autenticación de usuario segura IKEv2 EAP.

En este tutorial, te mostraremos la configuración paso a paso del servidor VPN IPSec utilizando Strongswan. Crearemos un servidor VPN IKEv2 con la autenticación «EAP-MSCHAPv2» y utilizaremos certificados Letsencrypt en un servidor Ubuntu 18.04.

Requisitos previos

  • Ubuntu 18.04
  • Privilegios de root

¿Qué vamos a hacer?

  1. Instalar Strongswan en Ubuntu 18.04
  2. Generar SSL Letsencrypt
  3. Configurar Strongswan
  4. Activar NAT y Port-Forwarding Firewall UFW
  5. Probar

Paso 1 – Instalar Strongswan en Ubuntu

En este primer paso, instalaremos el software de implementación IPsec strongswan y todos los paquetes necesarios desde el repositorio de Ubuntu.

Actualiza todos los repositorios e instala strongswan utilizando el comando apt que aparece a continuación.

sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-standard-plugins libstrongswan-extra-plugins

Espera a que se instalen todos los paquetes.

Paso 2 – Generar SSL Letsencrypt

Crearemos el servidor VPN IKEv2 utilizando un nombre de dominio ‘vpn.hakase-labs.pw’ y utilizando certificados generados desde letsencrypt.

En este paso, instalaremos la herramienta letsencrypt ‘certbot’ y generaremos certificados para el nombre de dominio del servidor ‘vpn.hakase-labs.pw’.

Instala la herramienta letsencrypt ‘certbot’.

sudo apt install certbot -y

Una vez completada la instalación, genera nuevos archivos de certificados SSL utilizando el comando certbot que se indica a continuación.

certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email [email protected] -d vpn.hakase-labs.pw

Se han generado los certificados Letsencrypt para el nombre de dominio vpn ‘vpn.hakase-labs.pw’, y se encuentran en el directorio ‘/etc/letsencrypt/live’.

A continuación, debemos copiar los archivos de certificados ‘fullchain.pem’, ‘privkey.pem’ y ‘chain.pem’ en el directorio ‘/etc/ipsec.d/’.

Ejecuta los siguientes comandos.

cp /etc/letsencrypt/live/vpn.hakase-labs.pw/fullchain.pem /etc/ipsec.d/certs/
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/privkey.pem /etc/ipsec.d/private/
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/chain.pem /etc/ipsec.d/cacerts/

Todos los certificados letsencrypt para la VPN Strongswan llamados ‘vpn.hakase-labs.pw’ han sido generados y copiados al directorio ‘/etc/ipsec.d’.

tree /etc/ipsec.d/

Paso 3 – Configurar Strongswan

Haz una copia de seguridad de la configuración por defecto y crea una nueva ‘ipsec.conf’ utilizando el editor vim.

mv /etc/ipsec.conf /etc/ipsec.conf.asli
vim /etc/ipsec.conf

Pega la configuración a continuación.

#global configuration IPsec
#chron logger
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

#define new ipsec connection
conn hakase-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!
    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    [email protected]
    leftcert=fullchain.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.15.1.0/24
    rightdns=1.1.1.1,8.8.8.8
    rightsendcert=never
    eap_identity=%identity

Guarda y sal.

Detalles de la configuración:

  • Crea una nueva conexión de túnel VPN IPSec llamada ‘hakase-vpn’.
  • Especifica las suites de cifrado IKEv2 y ESP para la autenticación.
  • La configuración del servidor «izquierdo» utilizando un nombre de dominio «vpn.hakase-labs.pw» y utilizando el certificado letsencrypt «fullchain.pem» ubicado en el directorio «/etc/ipsec.d/certs».
  • La configuración ‘correcta’ de clientes/remota con el método de autenticación EAP ‘eap-mschapv2’, asigna el rango de direcciones IP virtuales ‘10.15.1.0/24’ a todos los clientes conectados, y utiliza DNS públicos Cloudflare y google.

A continuación, tenemos que editar el archivo ‘/etc/ipsec.secrets’ para definir la clave privada del servidor RSA y las credenciales EAP.

Edita el archivo ‘ipsec.secrets’ utilizando vim.

vim /etc/ipsec.secrets

Y pega allí la configuración.

: RSA "privkey.pem"
hakase : EAP "hakase321@"
tensai : EAP "tensai321@"

Guarda y sal.

Detalles de la configuración:

  • Especifica la clave privada del servidor RSA utilizando el certificado letsencrypt ‘privkey.pem’ situado en el directorio ‘/etc/ipsec.d/private’.
  • Define el formato de las credenciales de usuario EAP ‘usuario : EAP «contraseña»‘.

Una vez completada la configuración IPSec de strongswan, inicia el servicio strongswan y habilítalo para que se inicie siempre al arrancar el sistema.

systemctl start strongswan
systemctl enable strongswan

Paso 4 – Habilitar el cortafuegos UFW NAT y Port-Forwarding

En este paso, habilitaremos el modo NAT, abriremos los puertos que se utilizarán para la VPN IPSec strongswan y habilitaremos el reenvío de puertos. Utilizaremos el cortafuegos UFW.

Antes de habilitar el cortafuegos en el servidor, tenemos que añadir el servicio ssh y los puertos UDP de strongswan (500 y 4500) a las listas de servicios del cortafuegos.

Ejecuta los siguientes comandos del cortafuegos ufw.

sudo ufw allow ssh
sudo ufw allow 500,4500/udp

El servicio ssh y los puertos strongswan se han añadido al cortafuegos ufw.

A continuación, habilitaremos el modo NAT y el reenvío de puertos en el cortafuegos ufw editando su archivo de configuración.

Edita la configuración por defecto de ufw.

vim /etc/default/ufw

Cambia la ‘DEFAULT_FORWARD_POLICY’ a ‘ACCEPT’.

DEFAULT_FORWARD_POLICY="ACCEPT"

Guarda y sal.

Ahora tenemos que comprobar la interfaz de red utilizada para acceder a Internet utilizando el comando route que aparece a continuación.

route | grep '^default' | grep -o '[^ ]*$'

Obtendrás la interfaz de red como ‘eth0’, ‘eth1’, o ‘ens3’ etc.

Ve al directorio ‘/etc/ufw’ y edita el archivo de configuración ‘before.rules’.

cd /etc/ufw/
vim before.rules

Pega la siguiente configuración nat y mangle en la parte superior de las líneas.

*nat
-A POSTROUTING -s 10.15.1.0/24 -o ens3 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.15.1.0/24 -o ens3 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.15.1.0/24 -o ens3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

Y pega la cadena personalizada ufw firewall bajo la configuración ‘*filter’.

*filter
.....

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.15.1.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.15.1.0/24 -j ACCEPT

Guarda y sal.

Nota:

  • Cambia la interfaz ‘ens3’ por tu propia interfaz de red.
  • Cambia la dirección ip Inetrnal/Privada como quieras.

Y para la configuración del reenvío de puertos, edita el archivo ‘sysctl.conf’ presente en el directorio ufw.

cd /etc/ufw
vim sysctl.conf

Descomenta la línea ‘net/ipv4/ip_forward’.

net/ipv4/ip_forward=1

Guárdalo y sal.

Inicia y activa el cortafuegos ufw.

sudo ufw enable

Escribe «y» para confirmar y pulsa intro, y asegúrate de que no se produce ningún error. A continuación, reinicia el servicio strongswan.

systemctl restart strongswan

Y la configuración del Cortafuegos UFW para el modo NAT y el Reenvío de Puertos se habrá completado.

Paso 5 – Pruebas

En este caso, haremos pruebas en MacOS X y en un teléfono Android.

En MacOS

  • Abre las ‘Preferencias del Sistema’ y haz clic en el menú ‘Red’.

  • Haz clic en el botón «+» para crear una nueva conexión VPN.
    • Interfaz: ‘VPN
    • Tipo de VPN: IKEv2
    • Nombre del servicio: IKEv2-vpn

  • En «Dirección del servidor» e «ID remoto», escribe el nombre de dominio de la VPN «vpn.hakase-labs.pw».
  • Haz clic en «Configuración de autenticación».
  • Autenticación mediante un «Nombre de usuario».
  • Escribe el nombre de usuario «tensai» con la contraseña «tensai321@».
  • Haz clic en «Aceptar» y en «Aplicar».

Se ha creado una nueva conexión VPN IKEv2 en el cliente. Haz clic en el botón «Conectar».

Y el cliente se ha conectado al servidor VPN strongswan y tiene una dirección IP interna/privada 10.15.1.1.

En Android

  • Descarga e instala la aplicación nativa de strongswan para android desde Google-Play.
  • Añade un nuevo perfil VPN
  • Escribe el nombre de dominio del servidor «vpn.hakase-labs.pw» y utiliza la autenticación IKEv2 EAP de nombre de usuario y contraseña.

A continuación se muestra el resultado cuando nos conectamos al servidor VPN.

El servidor VPN basado en IPSec IKEv2 se ha creado utilizando Strongswan en el servidor Ubuntu 18.04.

Referencia

También te podría gustar...