Cómo configurar una VPN IKEv2 con Strongswan y Let’s encrypt 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 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 7.
Requisitos previos
- Servidor CentOS 7
- Privilegios de root
¿Qué vamos a hacer?
- Instalar Strongswan en CentOS 7
- Generar SSL Letsencrypt
- Configurar Strongswan
- Habilitar el cortafuegos NAT
- Activar el reenvío de puertos
- Probar
Paso 1 – Instalar Strongswan en CentOS 7
En este primer paso, instalaremos el software de implementación de IPsec strongswan y todos los paquetes necesarios desde el repositorio EPEL.
Instala el repositorio EPEL e instala el paquete strongswan utilizando los siguientes comandos yum.
yum -y install epel-release
yum -y install strongswan
Espera a que se instale el paquete strongswan.
Paso 2 – Generar el certificado SSL con Let’s encrypt
Crearemos el servidor VPN IKEv2 utilizando un nombre de dominio ‘ikev2.hakase-labs.io’ y utilizaremos certificados generados desde letsencrypt.
En este paso, instalaremos la herramienta letsencrypt ‘certbot’ y generaremos certificados para el nombre de dominio del servidor ‘ikev2.hakase-labs.io’.
Instala la herramienta letsencrypt ‘certbot’.
yum -y install certbot
Después de la instalación de certbot, tenemos que abrir el puerto 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 certbot de letsencrypt.
Ejecuta el comando certbot que aparece 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 los certificados Letsencrypt para el nombre de dominio vpn ‘ikev2.hakase-labs.io’, y se encuentran en el directorio ‘/etc/letsencrypt/live’.
A continuación, tenemos que copiar los archivos de certificado ‘fullchain.pem’, ‘privkey.pem’, y el ‘chain.pem’ al 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 letsencrypt para la VPN Strongswan llamada ‘ikev2.hakase-labs.io’ han sido generados y copiados al directorio ‘/etc/strongswan/ipsec.d’.
tree /etc/strongswan/ipsec.d/
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.
#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» utiliza un nombre de dominio «ikev2.hakase-labs.io» y utiliza el certificado letsencrypt «fullchain.pem» situado en el directorio «/etc/strongswan/ipsec.d/certs».
- La configuración ‘correcta’ de los clientes/remota con el método de autenticación EAP ‘eap-mschapv2’, asignar el rango de direcciones IP virtuales ‘10.15.1.0/24’ a todos los clientes conectados, y utilizar los DNS públicos Cloudflare y google.
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 "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/strongswan/ipsec.d/private’.
- Define las credenciales del usuario EAP con el formato ‘usuario : EAP «contraseña»‘.
La configuración IPSec de strongswan se ha completado. 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 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
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.
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
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
– 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 ‘tensai321@’
– Haz clic en ‘Aceptar’ y en ‘Aplicar’.
Se ha creado una nueva conexión VPN IKEv2 en el cliente. Ahora haz clic en el botón de conexión.
Y el cliente se ha conectado al servidor VPN de 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.
El servidor VPN basado en IKEv2 IPSec se ha creado utilizando Strongswan y Letsencrypt en el servidor CentOS 7.