Cómo configurar una VPN IKEv2 con Strongswan y Let’s Encrypt en CentOS 8

Strongswan es una implementación de IPSec multiplataforma de código abierto. Es una solución VPN basada en IPSec que se centra en mecanismos de autenticación fuertes. Strongswan 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 mostraré cómo instalar un servidor VPN IPSec con Strongswan. Crearemos un servidor VPN IKEv2 con la autenticación ‘EAP-MSCHAPv2’ y utilizaremos certificados Letsencrypt en un servidor CentOS 8.

Requisitos previos

  • Servidor CentOS 8
  • Privilegios de root

¿Qué vamos a hacer?

  • Instalar Strongswan en CentOS 8
  • Generar SSL Letsencrypt
  • Configurar Strongswan
  • Habilitar el cortafuegos NAT
  • Activar el reenvío de puertos
  • Probar

Paso 1 – Instalar Strongswan en CentOS 8

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

Antes de instalar el paquete strongswan, debes añadir el repositorio EPEL al sistema CentOS 8.

Añade el repositorio EPEL para el servidor CentOS 8.

sudo dnf install epel-release

Después, instala el paquete strongswan desde el repositorio EPEL utilizando el comando dnf que aparece a continuación.

sudo dnf install strongswan

Espera a que se instale el paquete strongswan.

Instalar Strongswan

Paso 2 – Generar el certificado SSL con Let’s encrypt

Para esta guía, vamos a crear el servidor VPN IKEv2 utilizando un nombre de dominio ‘vpn.hakase-labs.io’ y utilizaremos certificados generados desde letsencrypt.

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

Descarga el archivo binario de certbot desde GitHub utilizando el comando wget que aparece a continuación.

wget https://dl.eff.org/certbot-auto -O /usr/local/bin/certbot-auto

Después, conviértelo en un ejecutable cambiando el permiso del archivo.

chmod +x /usr/local/bin/certbot-auto

Y ya está instalada la herramienta certbot para generar certificados Letsencrypt.

Crear un certificado SSL con Let's encrypt

Antes de generar los certificados Letsencrypt, tenemos que abrir los puertos HTTP y HTTPS del servidor utilizando firewall-cmd.

Añade los servicios HTTP y HTTPS a la lista de servicios de firewalld ejecutando los siguientes comandos firewall-cmd.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Ahora podemos generar nuevos archivos de certificados SSL utilizando la herramienta letsencrypt certbot-auto.

Configurar el cortafuegos

Cambia la dirección de correo electrónico y el nombre de dominio por los tuyos y ejecuta el comando ‘certbot-auto’ que aparece a continuación.

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

Una vez completado, obtendrás el resultado que se muestra a continuación.

Conseguir un certificado SSL con Certbot

Todos los certificados de tu nombre de dominio se generan en el directorio ‘/etc/letsencrypt/live/domain.com’.

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

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

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

tree /etc/strongswan/ipsec.d/

Certificados para Strongswan

Paso 3 – Configurar Strongswan

Ve al directorio ‘/etc/strongswan’ y haz una copia de seguridad del archivo de configuración por defecto ‘ipsec.conf’.

cd /etc/strongswan/
mv ipsec.conf ipsec.conf.asli

Crea uno nuevo ‘ipsec.conf’ utilizando el editor vim.

vim ipsec.conf

Y pega la siguiente configuración.

config setup
    uniqueids=never # allow multiple connections per user
    charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2,  mgr 2"

conn %default
    fragmentation=yes
    closeaction=restart
    rekey=no
    dpdaction=clear
    keyexchange=ikev2
    compress=yes
    dpddelay=35s
    lifetime=3h
    ikelifetime=12h

    ike=aes256gcm16-prfsha512-ecp384!
    esp=aes256gcm16-ecp384!

    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

conn ikev2-pubkey
    auto=add

Guarda y sal.

A continuación, tenemos que editar el archivo ‘ipsec.secrets’ para definir la clave privada del servidor RSA y las credenciales de la contraseña del usuario EAP.

Edita el archivo ‘ipsec.secrets’.

vim ipsec.secrets

Pega la configuración de abajo.

: RSA "privkey.pem"
hakase : EAP "[email protected]"
tensai : EAP "[email protected]"

Guarda y sal.

Y la configuración IPSec de strongswan se ha completado. Añade el servicio strongswan al tiempo de arranque y luego inicia el servicio.

systemctl enable strongswan
systemctl start strongswan

Activar el demonio Strongswan

El servicio strongswan está en marcha en el servidor CentOS 8, compruébalo con el siguiente comando.

systemctl status strongswan
netstat -plntu

Y se te mostrará el resultado como se indica a continuación.

Strongswan se ha iniciado con éxito

Paso 4 – Habilitar NAT en Firewalld

En este paso, habilitaremos el enmascaramiento NAT y añadiremos los protocolos IPSec Authentication Header (AH) y Encapsulating Security Payload (ESP) en Firewalld utilizando la configuración ‘rich-rule’.

Añade ‘AH’ y ‘ESP’ para los protocolos de autenticación y encriptación en el firewalld.

firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="esp" accept'
firewall-cmd --zone=public --permanent --add-rich-rule='rule protocol value="ah" accept'

Añade los puertos UDP ipsec y el servicio.

firewall-cmd --zone=public --permanent --add-port=500/udp
firewall-cmd --zone=public --permanent --add-port=4500/udp
firewall-cmd --zone=public --permanent --add-service="ipsec"

Ahora activa el modo NAT de enmascaramiento y recarga las reglas de configuración de firewalld.

firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload

Configuración del cortafuegos

El modo NAT en el firewalld ha sido habilitado, compruébalo con el siguiente comando.

firewall-cmd --list-all

A continuación se muestra el resultado.

Lista de puertos del cortafuegos

Paso 5 – Habilitar el reenvío de puertos

Para habilitar el reenvío de puertos, necesitamos editar el archivo ‘sysctl.conf’.

Edita el archivo ‘/etc/sysctl.conf’ utilizando el editor vim.

vim /etc/sysctl.conf

Pega allí la siguiente configuración.

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Guarda y sal, ahora vuelve a cargar utilizando el comando sysctl que aparece a continuación.

sysctl -p

El reenvío de puertos se ha activado. Ahora reinicia el servicio strongswan.

systemctl restart strongswan

Activar el reenvío de puertos

Paso 6 – Prueba de la VPN IPSec de Strongswan

En este caso, haremos la prueba en el MacOS X y en el 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

Configurar la VPN en MacOS

– En la «Dirección del servidor» y el «ID remoto», escribe el nombre de dominio de la VPN «ikev2.hakase-labs.io».
– Haz clic en «Configuración de la autenticación».
– Autenticación mediante un ‘Nombre de usuario’.
– Escribe el nombre de usuario ‘tensai’ con la contraseña ‘[email protected]
– Haz clic en ‘Aceptar’ y en ‘Aplicar’.

Configuración de la autenticación de la VPN de MacOS

Se ha creado una nueva conexión VPN IKEv2 en el cliente. Ahora haz clic en el botón de conexión.

Se ha creado una nueva conexión VPN IKEv2

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 ‘ikev2.hakase-labs.io’ y utiliza la autenticación de nombre de usuario y contraseña IKEv2 EAP.

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

Configurar la VPN en Android

El servidor VPN basado en IKEv2 IPSec se ha creado utilizando Strongswan y Letsencrypt en el servidor CentOS 8.

Referencia

También te podría gustar...