Búsqueda de sitios web

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


En esta página

  1. Instalación de Strongswan (código binario y fuente)
  2. Compilación de Strongswan usando la fuente
  3. VPN de sitio a sitio
  4. Túnel basado en clave precompartida
  5. Túnel basado en certificado X.509

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 del 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 la máquina cliente/usuario final.

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 estructura de archivos basada en PKCS#15 y el acceso a la tarjeta inteligente mediante la API de PKCS#11 también son proporcionados por la herramienta OpenSC. Las siguientes tarjetas inteligentes son compatibles con openSC.

  • COS Oeste
  • Establecer COS
  • Tarjetas
  • STARCOS
  • ASEPCOS

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

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 el uso de código fuente y binario (con las características 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 la fuente

  • Opensc (por el soporte de HSM en strongswan).
  • PC/SC (Se requiere para la compatibilidad con el lector de tarjetas inteligentes en la plataforma Ubuntu).
  • Biblioteca GMP (necesaria 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 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 con el siguiente comando.

apt-get install libssl-dev

Pasos de compilación

Vaya a la carpeta /usr/src/ y descargue la última versión de strongswan usando 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 verificar 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 el directorio /usr/local.

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 la ruta /usr/local/etc. . La configuración de la política VPN se coloca en el archivo ipsec.conf y los secretos confidenciales se almacenan en el archivo ipsec.secrets. La configuración del complemento Strongswan se almacena en el directorio strongswan.d.

Tanto las VPN de transporte como las de túnel son compatibles con strongswan. 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 funcione para que la puerta de enlace VPN en el lado A pueda 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 del directorio /usr/local/etc/.

Túnel basado en clave precompartida

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

Configuración de la VPN:

(Aparte)

La configuración principal de una política de VPN de strongswan se encuentra en el archivo ipsec.conf. En este archivo de configuración se encuentra información como la que se proporciona a continuació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 muestra 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 el archivo ipsec.secrets. 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.

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

estado de ipsec

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 mediante la utilidad PKI de strongswan.

Ingrese a la ruta /usr/local/etc/ipsec.d 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 da 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 el comando de reinicio de ipsec para aplicar los cambios anteriores y verifique el estado del túnel creado con certificados.

ipsec statusall    # at side A
ipsec statusall    # at side B

Finalmente, la VPN basada en certificados se ha creado con éxito mediante la herramienta strongswan.