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

Instalar Strongswan

Strongswan es una implementación de IPSec multiplataforma de código abierto. Es una solución VPN basada en IPSec que se enfoca en mecanismos de autenticación sólidos. Strongswan ofrece compatibilidad con los protocolos de intercambio de claves IKEv1 e IKEv2, autenticación basada en certificados X.509 o claves precompartidas y autenticación de usuario EAP IKEv2 segura.

En este tutorial, le mostraré cómo instalar un servidor VPN IPSec usando Strongswan. Crearemos un servidor VPN IKEv2 con la autenticación ‘EAP-MSCHAPv2’ y usaremos certificados Letsencrypt en el servidor CentOS 8.

requisitos previos

  • Servidor CentOS 8
  • Privilegios de raíz

¿Lo que haremos?

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

Paso 1: instale Strongswan en CentOS 8

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

Antes de instalar el paquete strongswan, debe agregar el repositorio EPEL al sistema CentOS 8.

Agregue el repositorio EPEL para el servidor CentOS 8.

sudo dnf install epel-release

Después de eso, instale el paquete strongswan desde el repositorio de EPEL usando el comando dnf a continuación.

sudo dnf install strongswan

Espere a que se instale el paquete strongswan.

Instalar Strongswan

Paso 2: generar un certificado SSL con Let’s encrypt

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

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

Descargue el archivo binario de certbot de GitHub usando el comando wget a continuación.

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

Después de eso, conviértalo en un ejecutable cambiando el permiso del archivo.

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

Y se ha instalado la herramienta certbot para la generación de certificados Letsencrypt.

Crear certificado SSL con Let's encrypt

Antes de generar los certificados de Letsencrypt, debemos abrir los puertos HTTP y HTTPS del servidor mediante firewall-cmd.

Agregue los servicios HTTP y HTTPS a la lista de servicios de firewalld ejecutando los comandos firewall-cmd a continuación.

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 certbot-auto de letsencrypt.

Configurar el cortafuegos

Cambie la dirección de correo electrónico y el nombre de dominio por los suyos propios y ejecute el comando ‘certbot-auto’ 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 que esté completo, obtendrá el resultado como se muestra a continuación.

Obtenga un certificado SSL con Certbot

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

A continuación, debemos copiar los archivos de certificado ‘fullchain.pem’, ‘privkey.pem’ y ‘chain.pem’ en el 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 de letsencrypt para Strongswan VPN llamados ‘vpn.hakase-labs.io’ se generaron y copiaron en el directorio ‘/etc/strongswan/ipsec.d’.

tree /etc/strongswan/ipsec.d/

Certificados para Strongswan

Paso 3: configurar Strongswan

Vaya al directorio ‘/etc/strongswan’ y haga una copia de seguridad del archivo de configuración predeterminado ‘ipsec.conf’.

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

Cree uno nuevo ‘ipsec.conf’ usando 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


Guardar y Salir.

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

Edite el archivo ‘ipsec.secrets’.

vim ipsec.secrets

Pegue la configuración a continuación.

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

Guardar y Salir.

Y la configuración de strongswan IPSec se ha completado. Agregue el servicio strongswan al inicio del tiempo de arranque y luego inicie el servicio.

systemctl enable strongswan
systemctl start strongswan

Habilitar el demonio Strongswan

El servicio strongswan está funcionando en el servidor CentOS 8, verifíquelo con el siguiente comando.

systemctl status strongswan
netstat -plntu

Y se le mostrará el resultado de la siguiente manera.

Strongswan comenzó con éxito

Paso 4: habilite NAT en Firewalld

En este paso, habilitaremos el enmascaramiento de NAT y agregaremos el encabezado de autenticación (AH) de los protocolos IPSec y la carga útil de seguridad encapsulada (ESP) en Firewalld mediante la configuración de «regla enriquecida».

Agregue ‘AH’ y ‘ESP’ para los protocolos de autenticación y encriptación al 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'

Agregue los puertos y el servicio ipsec UDP.

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 habilite el enmascaramiento del modo NAT y vuelva a cargar las reglas de configuración del cortafuegos.

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

Configuración del cortafuegos

Se ha habilitado el modo NAT en firewalld, compruébelo con el siguiente comando.

firewall-cmd --list-all

El siguiente es el resultado.

Lista de puertos de cortafuegos

Paso 5: habilite el reenvío de puertos

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

Edite el archivo ‘/etc/sysctl.conf’ usando el editor vim.

vim /etc/sysctl.conf

Pegue la siguiente configuración allí.

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

Guarde y salga, ahora vuelva a cargar usando el comando sysctl a continuación.

sysctl -p

Se ha habilitado el reenvío de puertos. Ahora reinicie el servicio strongswan.

systemctl restart strongswan

Habilitar el reenvío de puertos

Paso 6: prueba de Strongswan IPSec VPN

En este caso, haremos la prueba en el teléfono MacOS X y Android.

en Mac OS

– Abra las ‘Preferencias del sistema’ y haga clic en el menú ‘Red’.

Haga clic en el botón ‘+’ para crear una nueva conexión VPN.

    • Interfaz: ‘VPN’
    • Tipo de VPN: ‘IKEv2’
    • Nombre del servicio: ‘IKEv2-vpn

Configurar VPN en MacOS

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

Configuración de autenticación VPN de MacOS

Se ha creado una nueva conexión VPN IKEv2 en el cliente. Ahora haga 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

– Descargue e instale la aplicación android nativa strongswan de Google-Play.
– Agregar nuevo perfil VPN
– Escriba el nombre de dominio del servidor ‘ikev2.hakase-labs.io’ y use la autenticación de nombre de usuario y contraseña IKEv2 EAP.

El siguiente es el resultado cuando nos conectamos al servidor VPN.

Configurar VPN en Android

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *