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