C√≥mo configurar IKEv2 VPN usando Strongswan y Let’s encrypt en CentOS 7

Instalar Strongswan en CentOS 7

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

requisitos previos

  • Servidor CentOS 7
  • Privilegios de ra√≠z

¬ŅLo que haremos?

  1. Instalar Strongswan en CentOS 7
  2. Generar SSL Letsencrypt
  3. Configurar Strongswan
  4. Habilitar cortafuegos NAT
  5. Habilitar el reenvío de puertos
  6. Pruebas

Paso 1: instale Strongswan en CentOS 7

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

Instale el repositorio EPEL e instale el paquete strongswan usando los comandos yum a continuación.

yum -y install epel-release
yum -y install strongswan

Espere a que se instale el paquete strongswan.

Instalar Strongswan en CentOS 7

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

Crearemos el servidor VPN IKEv2 usando un nombre de dominio ‘ikev2.hakase-labs.io’ y usaremos certificados generados a partir de letsencrypt.

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

Instale la herramienta ‘certbot’ letsencrypt.

yum -y install certbot

Después de la instalación de certbot, debemos abrir el puerto HTTP y HTTPS del servidor usando 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

Generar Certificado SSL con Let's encrypt

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

Ejecute el comando certbot a continuación.

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

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

Certificado SSL obtenido de Let's encrypt

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/ikev2.hakase-labs.io/fullchain.pem /etc/strongswan/ipsec.d/certs/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/privkey.pem /etc/strongswan/ipsec.d/private/
cp /etc/letsencrypt/live/ikev2.hakase-labs.io/chain.pem /etc/strongswan/ipsec.d/cacerts/

Todos los certificados de letsencrypt para Strongswan VPN llamados ‘ikev2.hakase-labs.io’ se generaron y copiaron en el directorio ‘/etc/strongswan/ipsec.d’.

tree /etc/strongswan/ipsec.d/

archivos de certificado SSL

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.

#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

Guardar y Salir.

Detalles de configuración:

  • Cree una nueva conexi√≥n de t√ļnel VPN IPSec llamada ‘hakase-vpn’.
  • Especifique los conjuntos de cifrado IKEv2 y ESP para la autenticaci√≥n.
  • La configuraci√≥n del servidor ‘izquierda’ usando un nombre de dominio ‘ikev2.hakase-labs.io’ y usando el certificado de letsencrypt ‘fullchain.pem’ ubicado en el directorio ‘/etc/strongswan/ipsec.d/certs’.
  • Los clientes ‘correctos’/configuraci√≥n remota con el m√©todo de autenticaci√≥n EAP ‘eap-mschapv2’, asignan el rango de direcciones IP virtuales ‘10.15.1.0/24’ a todos los clientes conectados y usan DNS p√ļblico Cloudflare y google.

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.

Detalles de configuración:

  • Especifique la clave privada del servidor RSA utilizando el certificado de letsencrypt ‘privkey.pem’ ubicado en el directorio ‘/etc/strongswan/ipsec.d/private’.
  • Defina las credenciales de usuario de EAP con el formato ‘usuario: EAP ¬ęcontrase√Īa¬Ľ‘.

Configuración de cisne fuerte

La configuración de strongswan IPSec se ha completado. Inicie el servicio strongswan y permita que se inicie cada vez que se inicia el sistema.

systemctl start strongswan
systemctl enable strongswan

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

Configuración del 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

Configurar el reenvío de puertos en sysctl.conf

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

Deja una respuesta

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