GNU/Linux >> Tutoriales Linux >  >> Panels >> OpenVPN

Configurar el servidor VPN IPSec con Libreswan en CentOS 8

Bienvenido a nuestra guía de hoy sobre cómo configurar un servidor VPN IPSec con Libreswan en CentOS 8. Libreswan es una implementación gratuita de IKE/IPsec para Linux. IPsec es el protocolo de seguridad de Internet que utiliza criptografía sólida para proporcionar servicios de autenticación y cifrado y le permite construir túneles seguros a través de redes que no son de confianza. Todo lo que pasa a través de la red que no es de confianza es encriptado por la máquina de puerta de enlace ipsec y descifrado por la puerta de enlace en el otro extremo del túnel. El túnel resultante es una red privada virtual o VPN.

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

OpenVPN
  1. Configuración inicial del servidor con Ubuntu 14.04

  2. Cómo configurar un servidor SFTP en CentOS

  3. Configurar el servidor SysLog en CentOS 6 / RHEL 6

  4. Configurar el servidor Rsyslog centralizado en CentOS 7

  5. ¿Cómo configurar el servidor NTP en CentOS?

Cómo configurar un servidor de respaldo centralizado con Amanda en CentOS 7

Cómo configurar Kubernetes 1.5 con kubeadm en CentOS

Cómo proteger el servidor de correo electrónico contra la piratería con VPN (CentOS/RHEL)

CentOS 8:configuración inicial del servidor

Configuración de un servidor OpenVPN con CentOS y Viscosity

Cómo configurar HAProxy en CentOS 8