IKE gestiona la autenticación entre dos puntos finales de comunicación. También permite que los puntos finales negocien los algoritmos que se utilizarán para configurar un túnel IPsec.
En nuestra guía anterior, cubrimos cómo instalar y configurar IPSec VPN usando StrongSwan en Ubuntu 18.04. Vea el enlace a continuación;
Configurar IPSEC VPN usando StrongSwan en Ubuntu 18.04
Configurar el servidor VPN IPSec con Libreswan en CentOS 8
Existen diferentes implementaciones VPN Server-client de Libreswan. En esta guía, vamos a aprender cómo configurar el servidor VPN IPSec para los clientes móviles (clientes con direcciones IP asignadas dinámicamente, como computadoras portátiles) aquí conocidos como road warriors
, para que puedan conectarse a la LAN local desde cualquier lugar. Los clientes móviles se autentican mediante certificados y, por lo tanto, utilizan el protocolo IKEv2.
IKEv2 (Internet Key Exchange versión 2) es un protocolo de encriptación VPN que maneja las acciones de solicitud y respuesta. IKE realiza la autenticación mutua entre dos partes y establece una asociación de seguridad (SA) de IKE que incluye información secreta compartida que se puede usar para establecer de manera eficiente las SA para encapsular la carga útil de seguridad (ESP) o el encabezado de autenticación (AH) y un conjunto de algoritmos criptográficos para ser utilizados por las SA para proteger el tráfico que transportan.
Ejecutar actualización del sistema
Actualice los paquetes de su sistema en el servidor para usarlo como servidor VPN de Libreswan.
dnf update
Instalar Libreswan en CentOS 8
Una vez finalizada la actualización, instale Libreswan. Libreswan está disponible en los repositorios de AppStream de CentOS 8 y, por lo tanto, simplemente puede instalarlo usando el administrador de paquetes de la siguiente manera:
dnf install libreswan
Ejecución de Libreswan
Una vez finalizada la instalación, inicie y habilite Libreswan ipsec
servicio para ejecutarse en el arranque del sistema.
systemctl enable --now ipsec
Inicializar base de datos IPSec NSS
A continuación, debe inicializar la base de datos de Servicios de seguridad de red (NSS). La base de datos NSS se utiliza para almacenar claves de autenticación y certificados de identidad.
ipsec initnss
Si hay alguna base de datos anterior, puede eliminarla para poder tener una nueva base de datos. La base de datos NSS se almacena en /etc/ipsec.d
.
Para eliminar cualquier base de datos antigua, detenga IPsec, si se está ejecutando, y elimine las bases de datos NSS ejecutando los siguientes comandos;
systemctl stop ipsec
rm -rf /etc/ipsec.d/*db
Luego puede reiniciar la base de datos NSS;
ipsec initnss
Luego inicie IPSec;
systemctl start ipsec
Abrir puertos y protocolos de Libreswan en el cortafuegos
El IKE
el protocolo usa UDP port 500
y 4500
mientras que los protocolos IPsec, Encapsulated Security Payload
(ESP) y Authenticated Header
(AH) usa protocol number 50 and 51
respectivamente.
Por lo tanto, abra estos puertos y protocolos en su zona de firewall activa en su servidor VPN (extremo izquierdo) en esta guía.
firewall-cmd --get-active-zone
Para abrir los puertos y el cortafuegos en la zona de cortafuegos predeterminada;
firewall-cmd --add-port={4500,500}/udp --permanent
firewall-cmd --add-protocol={50,51} --permanent
O simplemente puede usar el servicio IPSec;
firewall-cmd --add-service=ipsec --permanent
Recargar FirewallD
firewall-cmd --reload
Configurar servidor VPN IPSec con Libreswan
Libreswan no utiliza el modelo cliente-servidor. Sin embargo, utiliza los términos left
y right
para referirse a los puntos finales involucrados en cualquier conexión dada. Los términos izquierda/derecha se pueden usar arbitrariamente para referirse a cada sistema, siempre y cuando mantenga la consistencia en el uso de los términos mientras configura sus conexiones.
Habilitar el reenvío de IP
Tanto en el VPN server
, debe habilitar el reenvío de IP.
Ejecute el siguiente comando para verificar si el reenvío de IP está habilitado;
sysctl net.ipv4.ip_forward
Si la salida es net.ipv4.ip_forward = 0
, entonces el reenvío de IP está deshabilitado y debe habilitarlo ejecutando cualquiera de los siguientes comandos;
El reenvío de IP se puede habilitar simplemente habilitando el enmascaramiento de IP en firewalld.
firewall-cmd --add-masquerade --permanent firewall-cmd --reload
Puede verificar el reenvío de IP;
cat /proc/sys/net/ipv4/ip_forward 1
Un valor de 1 significa que el reenvío de IP está habilitado.
Similarmente. puede habilitar el reenvío de IP ejecutando los siguientes comandos;
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
Actualice con sysctl.conf con la nueva configuración.
sysctl -p
Además, asegúrese de que las redirecciones estén deshabilitadas.
less /etc/sysctl.d/50-libreswan.conf
# We disable redirects for XFRM/IPsec net.ipv6.conf.default.accept_redirects = 0 net.ipv6.conf.all.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.rp_filter = 0
Generar certificados de cliente y servidor VPN
A continuación, debe generar el servidor VPN y los certificados de los clientes para usarlos en la autenticación.
Crear base de datos de generación de certificados
Ejecute el siguiente comando para crear una base de datos que se pueda usar para generar una clave privada y un certificado de CA para usar en la generación de certificados de host. Usaremos certutil
comando para generar los certificados.
mkdir /etc/ipsec.d/certsdb
certutil -N -d sql:/etc/ipsec.d/certsdb
El comando le solicita que ingrese la contraseña para cifrar sus claves.
Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: StRONgPassw0Rd Re-enter password: StRONgPassw0Rd
Generar certificado CA
Usamos certificados autofirmados en este tutorial y, por lo tanto, así es como podemos generar nuestro certificado de CA local.
certutil -S -x -n "Kifarunix-demo CA" -s "O=Kifarunix-demo,CN=Kifarunix-demo CA" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t "CT,," -2
Consulte man certutil
para conocer las opciones utilizadas.
Cuando se ejecuta el comando, primero se le pedirá que ingrese la contraseña para cifrar las claves que configuró anteriormente. Introduzca la contraseña para continuar.
A continuación, debe generar semillas aleatorias para usar en la creación de sus claves escribiendo cualquier tecla en el teclado hasta que el medidor de progreso esté lleno. Una vez que esté lleno, presione enter para continuar.
... Continue typing until the progress meter is full: |************************************************************| Finished. Press enter to continue: ENTER
- A continuación, escriba y para especificar que se está generando un certificado de CA.
- Presione ENTER para la longitud de la ruta
- Ingrese n para especificar que esta no es una extensión crítica.
Generating key. This may take a few moments... Is this a CA certificate [y/N]? y Enter the path length constraint, enter to skip [<0 for unlimited path]: > ENTER Is this a critical extension [y/N]? n
Generar el certificado del servidor VPN
A continuación, genere el certificado del servidor firmado con la CA creada anteriormente y asígnele extensiones.
certutil -S -c "Kifarunix-demo CA" -n "vpn.kifarunix-demo.com" -s "O=Kifarunix-demo,CN=vpn.kifarunix-demo.com" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t ",," -1 -6 -8 "vpn.kifarunix-demo.com"
Del mismo modo, ingrese la contraseña de cifrado de claves, genere la semilla desde el teclado y presione ENTER para continuar.
Defina la clave y el uso de la extensión de la clave.
Generating key. This may take a few moments... 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 0 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 2 0 - Digital Signature 1 - Non-repudiation 2 - Key encipherment 3 - Data encipherment 4 - Key agreement 5 - Cert signing key 6 - CRL signing key Other to finish > 8
Is this a critical extension [y/N]? n 0 - Server Auth 1 - Client Auth 2 - Code Signing 3 - Email Protection 4 - Timestamp 5 - OCSP Responder 6 - Step-up 7 - Microsoft Trust List Signing Other to finish > 0 0 - Server Auth 1 - Client Auth 2 - Code Signing 3 - Email Protection 4 - Timestamp 5 - OCSP Responder 6 - Step-up 7 - Microsoft Trust List Signing Other to finish > 8 Is this a critical extension [y/N]? N
Generar el Certificado de Cliente VPN
Ejecute el siguiente comando para generar un certificado de cliente VPN. Reemplace el nombre del certificado (nombre de host utilizado aquí) con el nombre del host para cuyo certificado de cliente está generando;
certutil -S -c "Kifarunix-demo CA" -n "janedoe.kifarunix-demo.com" -s "O=Kifarunix-demo,CN=janedoe.kifarunix-demo.com" -k rsa -g 4096 -v 12 -d sql:/etc/ipsec.d/certsdb -t ",," -1 -6 -8 "janedoe.kifarunix-demo.com"
Del mismo modo, ingrese las mismas opciones que arriba.
Listado de los certificados disponibles en la base de datos
certutil -L -d sql:/etc/ipsec.d/certsdb
Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Kifarunix-demo CA CTu,u,u vpn.kifarunix-demo.com u,u,u janedoe.kifarunix-demo.com u,u,u johndoe.kifarunix-demo.com u,u,u
Exporte e importe el certificado de la puerta de enlace a Pluto DB.
pk12util -o vpn.kifarunix-demo.com.p12 -n "vpn.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdb
Puede omitir la contraseña PKCS12.
ls
vpn.kifarunix-demo.com.p12
Una vez exportado, importe el certificado del servidor VPN a la base de datos.
ipsec import vpn.kifarunix-demo.com.p12
Exporte los certificados de host del cliente, la clave privada y el certificado de CA. Todo esto se almacenará en un archivo .p12 como archivo de salida especificado en el siguiente comando.
pk12util -o janedoe.kifarunix-demo.com.p12 -n "janedoe.kifarunix-demo.com" -d sql:/etc/ipsec.d/certsdb
Del mismo modo, omita la contraseña PKCS12.
ls
janedoe.kifarunix-demo.com.p12 vpn.kifarunix-demo.com.p12
Si ha generado certificados para otros hosts de clientes, también puede exportarlos.
Crear archivo de configuración de puntos finales de VPN IPSec
En su host VPN IPSec, cree un archivo de configuración en /etc/ipsec.d
directorio para sus clientes móviles. /etc/ipsec.conf
es el archivo de configuración predeterminado para Libreswan y tiene una directiva para incluir otras configuraciones definidas en /etc/ipsec.d
directorio.
vim /etc/ipsec.d/mobile-clients.conf
Coloque las siguientes configuraciones en el archivo de arriba.
conn roadwarriors left=vpn.kifarunix-demo.com leftsubnet=0.0.0.0/0 leftcert=vpn.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsendcert=always right=%any rightaddresspool=10.0.8.10-10.0.8.254 rightca=%same rightrsasigkey=%cert modecfgdns="8.8.8.8,10.0.8.1" authby=rsasig auto=start dpddelay=60 dpdtimeout=300 dpdaction=clear mobike=yes ikev2=insist fragmentation=yes type=tunnel
Consulte man ipsec.conf
para obtener una descripción completa de las opciones utilizadas anteriormente.
Verifique el archivo de configuración para ver si hay errores;
/usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig
Si no hay error, el comando sale con estado 0.
echo $?
De lo contrario, cualquier error se muestra en la salida estándar. Solucione los errores antes de continuar.
Habilite el registro de IPsec descomentando la línea, #logfile=/var/log/pluto.log
, en el /etc/ipsec.conf
configuración.
config setup # Normally, pluto logs via syslog. logfile=/var/log/pluto.log ...
Reiniciar IPsec;
systemctl restart ipsec
Comprobar estado;
systemctl status ipsec
Si ipsec no se inicia, debe haber un error de sintaxis de configuración. Ejecute el siguiente comando para identificar el error.
journalctl -xe
Deshabilite rp_filter para Libreswan y vuelva a cargar todas las configuraciones de Kernel.
echo "net.ipv4.conf.all.rp_filter = 0" >> /etc/sysctl.d/50-libreswan.conf
sysctl --system
Verificar la configuración de IPsec
Para confirmar que la configuración de IPsec está bien, simplemente ejecute el siguiente comando:
ipsec verify
Verifying installed system and configuration files Version check and ipsec on-path [OK] Libreswan 3.29 (netkey) on 4.18.0-193.6.3.el8_2.x86_64 Checking for IPsec support in kernel [OK] NETKEY: Testing XFRM related proc values ICMP default/send_redirects [OK] ICMP default/accept_redirects [OK] XFRM larval drop [OK] Pluto ipsec.conf syntax [OK] Checking rp_filter [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for IKE/NAT-T on udp 4500 [OK] Pluto ipsec.secret syntax [OK] Checking 'ip' command [OK] Checking 'iptables' command [OK] Checking 'prelink' command does not interfere with FIPS [OK] Checking for obsolete ipsec.conf options [OK]
Copiar certificados de cliente VPN a sus clientes móviles
Ahora puede copiar los certificados de cliente a sus clientes remotos y conéctese al servidor VPN.
En este tutorial, estamos usando los sistemas Ubuntu 20.04 y Ubuntu 18.04 como nuestros clientes remotos.
Hemos generado certificados para dos hosts, janedoe.kifarunix-demo.com
y johndoe.kifarunix-demo.com
para hosts de cliente Ubuntu 20.04 y Ubuntu 18.04 respectivamente.
Configuración del cliente de Libreswan
En su sistema Ubuntu, instale el paquete libreswan.
apt update
apt install libreswan
Cree el archivo de configuración de conexión VPN de Cliente de Libreswan
vim /etc/ipsec.d/johndoe.conf
Ingrese el contenido a continuación;
conn vpn.kifarunix-demo.com left=%defaultroute leftcert=johndoe.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsubnet=0.0.0.0/0 leftmodecfgclient=yes right=vpn.kifarunix-demo.com rightsubnet=0.0.0.0/0 [email protected] rightrsasigkey=%cert narrowing=yes ikev2=insist rekey=yes fragmentation=yes mobike=no auto=start
Si está utilizando nombres de host, asegúrese de que se puedan resolver.
Del mismo modo, en su segundo host;
vim /etc/ipsec.d/janedoe.conf
conn vpn.kifarunix-demo.com left=%defaultroute leftcert=janedoe.kifarunix-demo.com leftid=%fromcert leftrsasigkey=%cert leftsubnet=0.0.0.0/0 leftmodecfgclient=yes right=vpn.kifarunix-demo.com rightsubnet=0.0.0.0/0 [email protected] rightrsasigkey=%cert narrowing=yes ikev2=insist rekey=yes fragmentation=yes mobike=no auto=start
Compruebe la sintaxis de configuración;
/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig
Inicialice la base de datos NSS;
sudo ipsec checknss
Importe archivos de certificado PKCS#12 X.509 a la base de datos NSS;
sudo ipsec import janedoe.kifarunix-demo.com.p12
Haga lo mismo en el otro host cliente. Presione ENTER para omitir la contraseña de PCKS12.
Enter password for PKCS12 file: ENTER pk12util: PKCS12 IMPORT SUCCESSFUL correcting trust bits for Kifarunix-demo CA
Puede enumerar los certificados disponibles en el host del cliente;
certutil -L -d sql:/var/lib/ipsec/nss
Inicie IPsec y permita que se ejecute en el arranque del sistema.
sudo ipsec setup start
Comprobar el estado;
systemctl status ipsec
● ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec Loaded: loaded (/lib/systemd/system/ipsec.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-06-21 12:28:02 EAT; 7min ago Docs: man:ipsec(8) man:pluto(8) man:ipsec.conf(5) Process: 11251 ExecStartPre=/usr/lib/ipsec/addconn --config /etc/ipsec.conf --checkconfig (code=exited, status=0/SUCCESS) Process: 11266 ExecStartPre=/usr/lib/ipsec/_stackmanager start (code=exited, status=0/SUCCESS) Process: 11742 ExecStartPre=/usr/sbin/ipsec --checknss (code=exited, status=0/SUCCESS) Process: 11743 ExecStartPre=/usr/sbin/ipsec --checknflog (code=exited, status=0/SUCCESS) Main PID: 11757 (pluto) Status: "Startup completed." Tasks: 2 (limit: 2319) Memory: 10.3M CGroup: /system.slice/ipsec.service └─11757 /usr/lib/ipsec/pluto --leak-detective --config /etc/ipsec.conf --nofork Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: certificate verified OK: O=Kifarunix-demo,CN=vpn.kifarunix-demo> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: IKEv2 mode peer ID is ID_DER_ASN1_DN: 'CN=vpn.kifarunix-demo.co> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: Authenticated using RSA Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_ADDRESS 10.0.8.10 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_DNS 8.8.8.8 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: received INTERNAL_IP4_DNS 10.0.8.1 Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: up-client output: updating resolvconf Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: negotiated connection [10.0.8.10-10.0.8.10:0-65535 0] -> [0.0.0> Jun 21 12:28:02 koromicha pluto[11757]: "vpn.kifarunix-demo.com"[1] 192.168.56.133 #2: STATE_V2_IPSEC_I: IPsec SA established tunnel mode {ESP/NAT=
Verifique el estado en el otro host remoto.
Desde la salida de estado, puede verificar la dirección IP asignada, INTERNAL_IP4_ADDRESS 10.0.8.10 . En mi otro host cliente, INTERNAL_IP4_ADDRESS 10.0.8.11 .
Cargue la conexión en cada host cliente;
sudo ipsec auto --add vpn.kifarunix-demo.com
Establezca el túnel activando la conexión en cada host;
sudo ipsec auto --up vpn.kifarunix-demo.com
Desde cada host, haga ping a la dirección IP asignada de VPN del otro.
ping 10.0.8.11 -c 4
PING 10.0.8.11 (10.0.8.11) 56(84) bytes of data. 64 bytes from 10.0.8.11: icmp_seq=1 ttl=63 time=2.82 ms 64 bytes from 10.0.8.11: icmp_seq=2 ttl=63 time=2.84 ms 64 bytes from 10.0.8.11: icmp_seq=3 ttl=63 time=3.06 ms 64 bytes from 10.0.8.11: icmp_seq=4 ttl=63 time=2.83 ms --- 10.0.8.11 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3010ms rtt min/avg/max/mdev = 2.820/2.888/3.060/0.099 ms
En el otro anfitrión;
ping 10.0.8.10 -c 4
PING 10.0.8.10 (10.0.8.10) 56(84) bytes of data. 64 bytes from 10.0.8.10: icmp_seq=1 ttl=63 time=1.63 ms 64 bytes from 10.0.8.10: icmp_seq=2 ttl=63 time=2.38 ms 64 bytes from 10.0.8.10: icmp_seq=3 ttl=63 time=3.18 ms 64 bytes from 10.0.8.10: icmp_seq=4 ttl=63 time=2.86 ms --- 10.0.8.10 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 1.631/2.516/3.187/0.588 ms
Los dos hosts remotos ahora pueden comunicarse a través del servidor VPN IPsec. Eso nos lleva al final de nuestro tutorial sobre cómo configurar el servidor VPN IPSec con Libreswan en CentOS 8.
Lecturas adicionales/Referencia
Ejemplos de configuración de Libreswan
Tutoriales relacionados
Instale y configure el servidor OpenVPN en Ubuntu 20.04
Configurar la autenticación basada en LDAP de OpenVPN
Configure el cliente VPN strongSwan en Ubuntu 18.04/CentOS 8
Configurar IPSEC VPN usando StrongSwan en Debian 10
Conéctese a Cisco VPN usando un archivo PCF en Ubuntu