GNU/Linux >> Tutoriales Linux >  >> Ubuntu

VPN IPsec basada en StrongSwan usando certificados y clave previamente compartida en Ubuntu 16.04

Introducción

En este artículo, nuestro enfoque está en la implementación de código abierto del protocolo IPsec. La seguridad de la capa de red se garantiza mediante el uso del protocolo IPsec que consta de los siguientes dos componentes.

  • Encabezado de autenticación (AH) 
  • Carga útil de seguridad encapsulada (ESP)

La integridad y la autenticación de los paquetes se garantiza mediante el uso de AH, el componente ESP proporciona funciones de confidencialidad y seguridad. La implementación de código abierto de IPsec,  StrongSwan (Strong Secure WAN), es una herramienta muy conocida que admite ambas versiones de intercambio de claves de Internet (IKE v1/2)/. El intercambio de claves o el intercambio de claves de Internet es parte de la VPN IPSec (red privada virtual). El mecanismo IKE se utiliza para compartir la clave entre dos partes para el cifrado de datos en el protocolo ESP. Los algoritmos de cifrado e integridad (como AES, SHA, etc.) de OpenSSL y las bibliotecas criptográficas se utilizan durante el paso IKE. Sin embargo, la implementación del kernel de Linux del algoritmo de seguridad se utiliza en la parte principal de IPSec (ESP y AH). Cisnefuerte.

Características de Cisne Fuerte

  • Compatibilidad con autenticación basada en clave precompartida.
  • Se admiten certificados en formato X.509 para la autenticación.
  • Un único demonio compatible con IKE v1/v2.
  • Se pueden integrar fácilmente complementos y bibliotecas de terceros.
  • El token de hardware es compatible con el proyecto openSC.

Strongswan admite Gateway-to-Gateway y Road warrior VPN. El tráfico de red se cifra o descifra en los dispositivos de puerta de enlace de una organización en una vpn de sitio a sitio. Sin embargo, se establece un segundo canal seguro desde el dispositivo de puerta de enlace hasta el usuario final/la máquina del cliente.

En este artículo, la herramienta strongSwan se instalará en Ubuntu 16.04 (LTS), mostraré la integración de OpenSC para tokens de hardware y, finalmente, la creación de un túnel de puerta de enlace a puerta de enlace utilizando una clave precompartida y certificados x.509. . Los tokens de hardware o los módulos de seguridad de hardware (HSM), como USB y tarjetas inteligentes, se pueden usar con strongswan para almacenar las claves criptográficas (públicas y privadas) y los certificados. La compatibilidad con tokens de hardware en strongswan se proporciona mediante OpenSC (conjunto de herramientas y bibliotecas), un proyecto de código abierto. La herramienta OpenSC también proporciona la estructura de archivos basada en PKCS#15 y el acceso a la tarjeta inteligente mediante la API PKCS#11. Las siguientes tarjetas inteligentes son compatibles con openSC.

  • COSOeste
  • Establecer COS
  • Tarjetas
  • STARCOS
  • ASEPCOS

Instalación de Strongswan (código fuente y binario)

Los paquetes binarios (deb/rpm) de strongswan están disponibles en casi todas las distribuciones de Linux más utilizadas. La instalación de strongswan mediante código fuente y binario (con las funciones deseadas) se explicará detalladamente en este artículo.

El paquete binario de strongswan se puede instalar con el siguiente comando en Ubuntu 16.04 LTS.

aptitude install strongswan

Los complementos de strongswan disponibles en el repositorio de Ubuntu se muestran a continuación.

Después de la instalación en la plataforma Ubuntu, los archivos y carpetas de configuración (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) se almacenan en el directorio /etc.

Compilación de Strongswan usando fuente

  • Opensc (para el soporte de HSM en el strongswan).
  • PC/SC (Se requiere para la compatibilidad con el lector de tarjetas inteligentes en la plataforma Ubuntu).
  • Biblioteca GMP (requerida para operaciones matemáticas en strongswan).
  • Herramienta OpenSSL (implementación bien conocida de algoritmos criptográficos como AES,SHA1).
  • PKCS (estándares criptográficos de clave pública) 1,7,8,11,12.

En este artículo, la herramienta PCSC-Lite se instalará junto con opensc en la plataforma Ubuntu para agregar soporte para lectores de tarjetas inteligentes. Se recomienda PCSC-Lite para lectores CCID.

Ejecute los siguientes comandos para instalar el software de requisito previo antes de comenzar la compilación de strongswan.

1. Instalación de Opensc

aptitude install opensc

2. Instalación de la biblioteca GMP

aptitude install libgmp10

Instale la biblioteca de desarrollo de GMP.

aptitude install libgmp-dev

OpenSSL libcrypto se instala usando el siguiente comando.

apt-get install libssl-dev

Pasos de compilación

Vaya a /usr/src/ y descargue la última versión de strongswan con el comando wget.

cd /usr/src
wget https://download.strongswan.org/strongswan-5.5.0.tar.gz

Extraiga el archivo comprimido e ingrese a la carpeta extraída para ejecutar el script de configuración.

tar –xzf strongswan-5.5.0.tar.gz
cd strongswan-5.5.0

Ejecute el script de configuración para comprobar las dependencias de strongswan. La compatibilidad con HSM ya está habilitada en la última versión de strongswan, como se muestra a continuación.

Ejecute el script de configuración, use el prefijo /usr/local y habilite la compatibilidad con openssl.

./configure --prefix=/usr/local  --enable-openssl

La siguiente instantánea muestra que el script de configuración no ha generado ningún error ya que todas las dependencias requeridas ya estaban instaladas en el sistema.

Ejecute los siguientes dos comandos para compilar e instalar strongswan en /usr/local directorio.

make

make install

La compilación e instalación de strongswan en la plataforma Ubuntu está completa, varios archivos de configuración (strongswan.conf, ipsec.conf e ipsec.secrets ) y carpetas (strongswan.d,ipsec.d ) se copian en /usr/local/etc sendero. La configuración de la política de VPN se encuentra en el ipsec.conf El archivo y los secretos confidenciales se almacenan en ipsec.secrets expediente. La configuración del complemento Strongswan se almacena en strongswan.d directorio.

Strongswan admite tanto las VPN de transporte como las de túnel. En el modo de túnel, se proporciona seguridad de sitio a sitio del canal y funciona con dispositivos de otros proveedores, como Cisco, Huawei y Juniper.

VPN de sitio a sitio

La siguiente figura muestra la ubicación de un dispositivo de puerta de enlace VPN basado en strongswan en una red. Se establecerá un canal de comunicación seguro entre las redes privadas 192.168.223.0/24 y 192.168.222.0/24 de la organización.

Antes de usar IPsec entre la red privada A y B, asegúrese de que el enrutamiento entre las puertas de enlace VPN de la organización está funcionando para que la puerta de enlace VPN en A lado puede hacer ping a la máquina VPN del lado remoto (B ), lo que garantiza que la conectividad de la red sea correcta.

Como se muestra a continuación, la configuración predeterminada de la herramienta strongswan está dentro de  /usr/local/etc/ directorio.

Túnel basado en clave previamente compartida

En el primer caso, se creará una VPN basada en secreto compartido entre dispositivos de puerta de enlace. El conocido algoritmo de intercambio de claves Diffie-Hellman es utilizado por strongswan para la autenticación mutua. Los detalles sobre cómo funciona el protocolo IPsec están disponibles en el siguiente enlace.

http://www.unixwiz.net/techtips/guide-ipsec.html

Configuración de la VPN:

(lado A )

La configuración principal de una política de VPN de strongswan se encuentra en el archivo ipsec.conf. La información que se proporciona a continuación se encuentra en este archivo de configuración.

  • Versión de IKE
  • Tipo de túnel
  • Puertas de enlace de origen y destino
  • redes privadas de VPN

ipsec.conf del lado A se da a continuación.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

Los secretos de IPsec (claves compartidas, contraseña de la clave privada, pin para desbloquear hsm) se almacenan en ipsec.secrets expediente . Como se muestra a continuación, los secretos de fragmentos entre ambas partes de VPN son "test12345".

192.168.1.101 192.168.1.102 : PSK 'test12345'

(Lado B)

La configuración en los archivos ipsec.conf e ipsec.secrets en el lado remoto será la inversa del sitio local como se indica a continuación.

El contenido del archivo ipsec.conf se proporciona a continuación.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel

El archivo ipsec.secrets contiene el secreto compartido en el lado remoto.

192.168.1.102 192.168.1.101 : PSK 'test12345'

Inicie el demonio strongswan (charon ) usando el siguiente comando después de configurar el archivo de configuración en ambos lados.

reinicio de ipsec

El siguiente comando muestra el estado de la VPN creada en los dispositivos.

estado ipsectodo

El estado del túnel en ambos lados (local y remoto) se muestra a continuación.

Este comando de Linux muestra las políticas y los estados del túnel IPsec.

ip xfrm state
ip xfrm policy

Como se muestra en el resultado del comando anterior, la información confidencial esp/hmac (teclas) también se muestra mediante el comando ip xfrm.

Túnel basado en certificado X.509

En el túnel basado en el certificado X.509 (autenticación de clave pública), se requiere generar certificados para la autoridad de certificación (CA), el cliente A y B.

En las siguientes capturas de pantalla se muestra la generación de un certificado de CA autofirmado con la utilidad PKI de strongswan.

Ingrese al /usr/local/etc/ipsec.d ruta y ejecute los siguientes comandos.

cd /usr/local/etc/ipsec.d
ipsec pki --gen --type rsa --size 4096 --outform pem > private/strongswanKey.pem
ipsec pki --self --ca --lifetime 3650 --in private/strongswanKey.pem --type rsa --dn "C=CH, O=strongSwan, CN=Root CA" --outform pem > cacerts/strongswanCert.pem    

La generación de los certificados para el cliente A se muestra a continuación.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client1Key.pem
chmod 600 private/client1Key.pem
ipsec pki --pub --in private/client1Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device1" --san device1 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client1Cert.pem

Del mismo modo, par de claves pública/privada y certificado generado para el cliente B.

ipsec pki --gen --type rsa --size 2048 --outform pem > private/client2Key.pem
chmod 600 private/client2Key.pem
ipsec pki --pub --in private/client2Key.pem --type rsa | ipsec pki --issue --lifetime 730 --cacert cacerts/strongswanCert.pem --cakey private/strongswanKey.pem --dn "C=CH, O=strongSwan, CN=device2" --san device2 --flag serverAuth --flag ikeIntermediate --outform pem > certs/client2Cert.pem

Después de generar correctamente los certificados de CA y de cliente, el siguiente paso es cambiar la configuración de ipsec.conf e ipsec.secrets. Consulte la documentación de strongswan para obtener más detalles sobre los cambios en ipsec.conf y el archivo de secretos.

El contenido de ipsec.conf &ipsec.secrets para el lado A se proporciona a continuación.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.101
        leftsubnet=192.168.223.0/24
        right=192.168.1.102
        rightsubnet=192.168.222.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client1Cert.pem
        leftid="C=CH, O=strongSwan, CN=device1"
        rightid="C=CH, O=strongSwan, CN=device2"

#192.168.1.101 192.168.1.102 : PSK 'test12345'
: RSA client1Key.pem

La configuración del lado B también se proporciona a continuación.

config setup
        charondebug="all"
        uniqueids=yes
        strictcrlpolicy=no
conn %default
conn tunnel #
        left=192.168.1.102
        leftsubnet=192.168.222.0/24
        right=192.168.1.101
        rightsubnet=192.168.223.0/24
        ike=aes256-sha2_256-modp1024!
        esp=aes256-sha2_256!
        keyingtries=0
        ikelifetime=1h
        lifetime=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        #authby=secret
        auto=start
        keyexchange=ikev2
        type=tunnel
        leftcert=client2Cert.pem
        leftid="C=CH, O=strongSwan, CN=device2"
        rightid="C=CH, O=strongSwan, CN=device1"


#192.168.1.102 192.168.1.101 : PSK 'test12345'
: RSA client2Key.pem

Ejecute reinicio de ipsec comando para aplicar los cambios anteriores y verificar el estado del túnel creado usando certificados.

ipsec statusall    # at side A

ipsec statusall    # at side B

Finalmente, la VPN basada en certificado se ha creado con éxito utilizando la herramienta strongswan.


Ubuntu
  1. Cómo crear una pila LAMP basada en docker usando docker en Ubuntu 20.04

  2. Cómo crear una VPN en Ubuntu 20.04 usando Wireguard

  3. Cómo instalar y configurar el servidor Algo VPN en Ubuntu 20.04

  4. Uso de Ansible para instalar y configurar Elasticsearch en Ubuntu 20.04

  5. Cómo instalar y configurar strongSwan VPN en Ubuntu 18.04

Cómo crear y ejecutar un programa en C usando Ubuntu 20.04 LTS

Cómo configurar una VPN en Ubuntu

Copia de seguridad y restauración de aplicaciones de Ubuntu usando Aptik

Uso de archivos y carpetas en la pantalla del escritorio en Ubuntu

Cómo configurar una VPN basada en IPsec con Strongswan en Debian y Ubuntu

¿Carpeta compartida en Virtualbox (ubuntu y Windows 7)?