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?
- Instalar Strongswan en Ubuntu 18.04
- Generar SSL Letsencrypt
- Configurar Strongswan
- Activar NAT y Port-Forwarding Firewall UFW
- 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.