GNU/Linux >> Tutoriels Linux >  >> Ubuntu

VPN IPsec basé sur StrongSwan utilisant des certificats et une clé pré-partagée sur Ubuntu 16.04

Présentation

Dans cet article, nous nous concentrons sur l'implémentation open source du protocole IPsec. La sécurité de la couche réseau est assurée en utilisant le protocole IPsec qui se compose des deux composants suivants.

  • En-tête d'authentification (AH) 
  • Encapsuler la charge utile de sécurité (ESP)

L'intégrité et l'authentification des paquets sont assurées en utilisant AH, le composant ESP fournit des fonctionnalités de confidentialité et de sécurité. L'implémentation open source d'IPsec,  StrongSwan (Strong Secure WAN), est un outil bien connu qui prend en charge les deux versions de l'échange de clés Internet (IKE v1/2)/. Le partage de clés ou l'échange de clés Internet fait partie du VPN IPSec (réseau privé virtuel). Le mécanisme IKE est utilisé pour partager la clé entre deux parties pour le chiffrement des données dans le protocole ESP. Les algorithmes de chiffrement et d'intégrité (tels que AES, SHA, etc.) d'OpenSSL et des bibliothèques de chiffrement sont utilisés lors de l'étape IKE. Cependant, l'implémentation du noyau Linux de l'algorithme de sécurité est utilisée dans la partie principale d'IPSec (ESP &AH). Cygne fort.

Fonctionnalités de Strongswan

  • Prise en charge de l'authentification basée sur une clé pré-partagée.
  • Les certificats au format X.509 sont pris en charge pour l'authentification.
  • Un seul démon qui prend en charge à la fois IKE v1/v2.
  • Les plug-ins et bibliothèques tiers peuvent être facilement intégrés.
  • Les jetons matériels sont pris en charge à l'aide du projet openSC.

Gateway-to-Gateway et Road Warrior VPN sont pris en charge par strongswan. Le trafic réseau est crypté ou décrypté au niveau des dispositifs de passerelle d'une organisation dans un VPN de site à site. Cependant, un deuxième canal sécurisé est établi entre le périphérique de passerelle et l'ordinateur de l'utilisateur final/client.

Dans cet article, l'outil strongSwan sera installé sur Ubuntu 16.04 (LTS), je montrerai l'intégration d'OpenSC pour les jetons matériels et enfin la création d'un tunnel de passerelle à passerelle à l'aide d'une clé pré-partagée et de certificats x.509 . Les jetons matériels ou les modules de sécurité matérielle (HSM) tels que les clés USB et les cartes à puce peuvent être utilisés avec strongswan pour stocker les clés cryptographiques (publiques et privées) et les certificats. La prise en charge des jetons matériels dans strongswan est fournie à l'aide d'OpenSC (ensemble d'outils et de bibliothèques), un projet open source. La structure de fichiers basée sur PKCS#15 et l'accès à la carte à puce à l'aide de l'API PKCS#11 sont également fournis par l'outil OpenSC. Les cartes à puce suivantes sont prises en charge par openSC.

  • WestCOS
  • Définir COS
  • CardOs
  • STARCOS
  • ASEPCOS

Installation de Strongswan (binaire et code source)

Les packages binaires (deb/rpm ) de strongswan sont disponibles dans presque toutes les distributions Linux largement utilisées. L'installation de strongswan en utilisant le code binaire et source (avec les fonctionnalités souhaitées) sera expliquée en détail dans cet article.

Le package binaire de strongswan peut être installé à l'aide de la commande suivante sur Ubuntu 16.04 LTS.

aptitude install strongswan

Les plugins strongswan disponibles dans le référentiel Ubuntu sont indiqués ci-dessous.

Après l'installation sur la plate-forme Ubuntu, les fichiers et dossiers de configuration (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) sont stockés dans le répertoire /etc.

Compilation Strongswan utilisant la source

  • Opensc (pour le support de HSM dans le strongswan).
  • PC/SC (nécessaire pour la prise en charge du lecteur de carte à puce sur la plate-forme Ubuntu).
  • Bibliothèque GMP (nécessaire pour les opérations mathématiques dans strongswan).
  • Outil OpenSSL (implémentation bien connue d'algorithmes de cryptographie tels que AES, SHA1).
  • PKCS (normes de cryptographie à clé publique) 1,7,8,11,12.

Dans cet article, l'outil PCSC-Lite sera installé avec opensc sur la plate-forme Ubuntu pour ajouter la prise en charge des lecteurs de cartes à puce. PCSC-Lite est recommandé pour les lecteurs CCID.

Exécutez les commandes suivantes pour installer le logiciel prérequis avant de commencer la compilation de strongswan.

1. Installation d'Opensc

aptitude install opensc

2. Installation de la bibliothèque GMP

aptitude install libgmp10

Installez la bibliothèque de développement de GMP.

aptitude install libgmp-dev

OpenSSL libcrypto est installé à l'aide de la commande suivante.

apt-get install libssl-dev

Étapes de compilation

Allez sur /usr/src/ dossier et téléchargez la dernière version de strongswan à l'aide de la commande wget.

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

Extrayez le fichier compressé et allez dans le dossier extrait pour exécuter le script de configuration.

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

Exécutez le script de configuration pour vérifier les dépendances de strongswan. La prise en charge HSM est déjà activée dans la dernière version de strongswan, comme indiqué ci-dessous.

Exécutez le script de configuration, utilisez le préfixe /usr/local et activez la prise en charge d'openssl.

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

L'instantané suivant montre qu'aucune erreur n'a été générée par le script de configuration car toutes les dépendances requises étaient déjà installées sur le système.

Exécutez les deux commandes suivantes pour compiler et installer strongswan sous /usr/local répertoire.

make

make install

La compilation et l'installation de strongswan sur la plateforme Ubuntu est terminée, plusieurs fichiers de configuration (strongswan.conf, ipsec.conf et ipsec.secrets ) et dossiers (strongswan.d,ipsec.d ) sont copiés sous /usr/local/etc chemin. La configuration de la politique VPN est placée dans le ipsec.conf le fichier et les secrets confidentiels sont stockés dans ipsec.secrets dossier. La configuration du plugin Strongswan est stockée dans strongswan.d répertoire.

Les VPN de transport et de tunnel sont pris en charge par strongswan. En mode tunnel, la sécurité de site à site du canal est assurée et fonctionne avec d'autres fournisseurs tels que les appareils Cisco, Huawei et Juniper.

VPN site à site

La figure suivante montre l'emplacement d'une passerelle VPN basée sur strongswan dans un réseau. Un canal de communication sécurisé sera établi entre les réseaux privés 192.168.223.0/24 et 192.168.222.0/24 de l'organisation.

Avant d'utiliser IPsec entre les réseaux privés A et B, assurez-vous que le routage entre les passerelles VPN de l'organisation travaille pour que la passerelle VPN de A côté peut envoyer un ping à la machine VPN du côté distant (B ) qui garantit que la connectivité réseau est correcte.

Comme indiqué ci-dessous, la configuration par défaut de l'outil strongswan se trouve dans /usr/local/etc/ répertoire.

Tunnel basé sur une clé pré-partagée

Dans le premier cas, un VPN basé sur un secret partagé sera créé entre les dispositifs de passerelle. L'algorithme de partage de clés bien connu Diffie-Hellman est utilisé par strongswan pour l'authentification mutuelle. Des détails sur le fonctionnement du protocole IPsec sont disponibles sur le lien suivant.

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

Paramétrage du VPN :

(face A )

La configuration principale d'une stratégie VPN strongswan se trouve dans le fichier ipsec.conf. Les informations telles que données ci-dessous se trouvent dans ce fichier de configuration.

  • Version d'IKE
  • Type de tunnel
  • passerelles source et destination
  • réseaux privés de VPN

ipsec.conf du côté A est donné ci-dessous.

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

Les secrets IPsec (clés partagées, mot de passe de la clé privée, code PIN pour déverrouiller hsm) sont stockés dans ipsec.secrets dossier . Comme indiqué ci-dessous, les secrets de partage entre les deux parties VPN sont "test12345".

192.168.1.101 192.168.1.102 : PSK 'test12345'

(face B)

La configuration dans les fichiers ipsec.conf et ipsec.secrets du côté distant sera l'inverse du site local comme indiqué ci-dessous.

Le contenu du fichier ipsec.conf est donné ci-dessous.

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

Le fichier ipsec.secrets contient le secret partagé du côté distant.

192.168.1.102 192.168.1.101 : PSK 'test12345'

Démarrez le démon strongswan (charon ) en utilisant la commande suivante après avoir configuré le fichier de configuration des deux côtés.

redémarrage ipsec

La commande suivante affiche l'état du VPN créé sur les appareils.

état ipsec tous

L'état du tunnel des deux côtés (local et distant) est indiqué ci-dessous.

Cette commande Linux affiche les politiques et les états du tunnel IPsec.

ip xfrm state
ip xfrm policy

Comme indiqué dans la sortie de la commande ci-dessus, les informations sensibles esp/hmac (clés) sont également affichées par la commande ip xfrm.

Tunnel basé sur certificat X.509

Dans le tunnel basé sur le certificat X.509 (Public key Authentication), il est nécessaire de générer des certificats pour l'autorité de certification (CA), les clients A et B.

La génération d'un certificat CA auto-signé à l'aide de l'utilitaire PKI de strongswan est illustrée dans les captures d'écran suivantes.

Entrez dans /usr/local/etc/ipsec.d path et exécutez les commandes suivantes.

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 génération des certificats pour le client A est illustrée ci-dessous.

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

De même, paire de clés publique/privée et certificat générés pour le client 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

Après la génération réussie des certificats CA et client, l'étape suivante consiste à modifier la configuration ipsec.conf et ipsec.secrets. Veuillez consulter la documentation strongswan pour plus de détails sur les changements dans ipsec.conf et le fichier secrets.

Le contenu de ipsec.conf &ipsec.secrets pour le côté A est donné ci-dessous.

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 configuration de la face B est également donnée ci-dessous.

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

Exécutez le redémarrage ipsec pour appliquer les modifications ci-dessus et vérifier l'état du tunnel créé à l'aide de certificats.

ipsec statusall    # at side A

ipsec statusall    # at side B

Enfin, le VPN basé sur un certificat a été créé avec succès à l'aide de l'outil strongswan.


Ubuntu
  1. Comment créer une pile LAMP basée sur Docker à l'aide de Docker sur Ubuntu 20.04

  2. Comment créer un VPN sur Ubuntu 20.04 en utilisant Wireguard

  3. Comment installer et configurer Algo VPN Server sur Ubuntu 20.04

  4. Utiliser Ansible pour installer et configurer Elasticsearch sur Ubuntu 20.04

  5. Comment installer et configurer strongSwan VPN sur Ubuntu 18.04

Comment créer et exécuter un programme C avec Ubuntu 20.04 LTS

Comment configurer un VPN sur Ubuntu

Sauvegarder et restaurer les applications Ubuntu à l'aide d'Aptik

Utilisation de fichiers et de dossiers sur l'écran du bureau dans Ubuntu

Comment configurer un VPN basé sur IPsec avec Strongswan sur Debian et Ubuntu

Dossier partagé dans Virtualbox (ubuntu et Windows 7) ?