StrongSwan-basiertes IPsec-VPN mit Zertifikaten und Preshared Key auf Ubuntu

Einführung

In diesem Artikel liegt unser Schwerpunkt auf der Open-Source-Implementierung des IPsec-Protokolls. Die Sicherheit der Netzwerkschicht wird durch die Verwendung des IPsec-Protokolls gewährleistet, das aus zwei Komponenten besteht.

  • Authentifizierungskopf (AH)
  • Verkapselung der Sicherheitsnutzlast (ESP)

Paketintegrität und Authentifizierung wird durch die Verwendung von AH gewährleistet, die ESP-Komponente bietet Vertraulichkeit und Sicherheitsfunktionen. Die Open-Source-Implementierung von IPsec, StrongSwan (Strong Secure WAN), ist ein bekanntes Tool, das beide Versionen des Internet-Schlüsselaustauschs (IKE v1/2)/ unterstützt. Key Sharing oder Internet Key Exchange ist Teil des IPSec VPN (Virtual Private Network). Der IKE-Mechanismus wird verwendet, um den Schlüssel zwischen zwei Parteien für die Verschlüsselung von Daten im ESP-Protokoll zu teilen: Verschlüsselungs- und Integritätsalgorithmen (wie AES, SHA usw.) von OpenSSL- und Krypto-Bibliotheken werden während des IKE-Schritts verwendet, während die Linux-Kernel-Implementierung des Sicherheitsalgorithmus im Hauptteil von IPSec (ESP & AH) verwendet wird. Strongswan.

Strongswan Features

  • Unterstützung für Pre-shared key based authentication.
  • Zertifikate im X.509-Format werden für die Authentifizierung unterstützt.
  • Ein einzelner Daemon, der beide IKE v1/v2 unterstützt.
  • Plugins und Bibliotheken von Drittanbietern können einfach integriert werden.
  • Hardware-Token werden durch die Verwendung des openSC-Projekts unterstützt.

StrongSwan

Gateway-to-Gateway und Road Warrior VPN werden von strongswan unterstützt. Der Netzwerkverkehr wird an Gateway-Geräten eines Unternehmens in einem Site-to-Site-VPN verschlüsselt oder entschlüsselt. Es wird jedoch ein zweiter sicherer Kanal von der Gateway-Vorrichtung zum Endbenutzer/Clientcomputer eingerichtet.

In diesem Artikel wird das strongSwan-Tool auf Ubuntu 16.04 (LTS) installiert, ich werde die Integration von OpenSC für Hardware-Token und schließlich die Erstellung eines Gateway-Gateway-Tunnels mit einem Pre-Shared Key und x.509 Zertifikaten zeigen. Hardware-Token oder Hardware-Sicherheits-Module (HSM) wie USB und Smart Cards können mit Strongswan zur Speicherung der kryptographischen Schlüssel (öffentlich & privat) und Zertifikate verwendet werden. Hardware-Token-Unterstützung in strongswan wird mit OpenSC (Satz von Tools & Bibliotheken), einem Open-Source-Projekt, angeboten, PKCS#15-basierte Dateistruktur und Zugriff auf Smartcards mit PKCS#11 API werden ebenfalls mit dem OpenSC-Tool bereitgestellt. Die folgenden Smartcards werden von openSC unterstützt.

  • WestCOS
  • SetCOS
  • KartenO
  • STARCOS
  • ASEPCOS

 

Strongswan-Installation (Binär- und Quellcode)

Binärpakete (deb/rpm) von strongswan sind in fast allen gängigen Linux-Distributionen verfügbar. Die Installation von Strongswan unter Verwendung von Binär- und Quellcode (mit gewünschten Funktionen) wird in diesem Artikel ausführlich erläutert.

Das Binärpaket von strongswan kann mit dem folgenden Befehl auf Ubuntu 16.04 LTS installiert werden.

aptitude install strongswan

Installiere strongswan auf Ubuntu

Die verfügbaren Strongswan-Plugins im Ubuntu-Repository sind unten aufgeführt.

Liste der Strongswan-Plugins.

Nach der Installation auf der Ubuntu-Plattform werden die Konfigurationsdateien und -ordner (ipsec.conf, ipsec.secrets, ipsec.d,strongswan.conf, strongswan.d) im Verzeichnis /etc gespeichert.

Das Strongswan-Konfigurationsverzeichnis.

Strongswan-Kompilierung mit Quellcode

  • Opensc (zur Unterstützung von HSM im Strongswan).
  • PC/SC (Wird für die Unterstützung von Smart Card Reader auf der Ubuntu-Plattform benötigt).
  • GMP-Bibliothek (erforderlich für mathematische Operationen in Strongswan).
  • OpenSSL-Tool (bekannte Implementierung von Kryptographie-Algorithmen wie AES,SHA1).
  • PKCS (Public Key Kryptographenstandards) 1,7,8,8,11,12.

In diesem Artikel wird das PCSC-Lite-Tool entlang von opensc auf der Ubuntu-Plattform installiert, um die Unterstützung für Smart Card-Lesegeräte hinzuzufügen. PCSC-Lite wird für CCID-Leser empfohlen.

Führen Sie folgende Befehle aus, um die erforderliche Software zu installieren, bevor wir mit der Kompilierung von strongswan beginnen.

1. Opensc-Installation

aptitude install opensc

Install OpenSC

2. GMP-Bibliotheksinstallation

aptitude install libgmp10

installieren sie libgmp10

Installieren Sie die Entwicklungsbibliothek von GMP.

aptitude install libgmp-dev

installieren sie libgmp-dev

OpenSSL libcrypto wird mit folgendem Befehl installiert.

apt-get install libssl-dev

installiere libssl-dev

Kompilierungsschritte

 

Gehen Sie zum /usr/src/Ordner und laden Sie die neueste Version von strongswan herunter, indem Sie den Befehl wget verwenden.

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

Download Strongswan

Extrahieren Sie die komprimierte Datei und gehen Sie in den extrahierten Ordner, um das Konfigurationsskript auszuführen.

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

Entpacken Sie das Strongswan-Archiv.

Führen Sie das configure-Skript aus, um die Abhängigkeiten von strongswan zu überprüfen. Die HSM-Unterstützung ist in der neuesten Version für Strongswan bereits aktiviert, wie unten gezeigt.

Trockenlauf konfigurieren.

Führen Sie das configure-Skript aus, verwenden Sie das Präfix /usr/local und aktivieren Sie die openssl-Unterstützung.

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

Der folgende Snapshot zeigt, dass das configure-Skript keinen Fehler erzeugt hat, da alle erforderlichen Abhängigkeiten bereits auf dem System installiert waren.

Konfigurieren von Strong-Swan-Quellen

Führen Sie die folgenden beiden Befehle aus, um strongswan unter /usr/local zu kompilieren und zu installieren.

make

Ausführen des make-Befehls

make install

Installieren Sie strongswan mit make install.

Die Kompilierung und Installation von strongswan auf der Ubuntu-Plattform ist abgeschlossen, mehrere Konfigurationsdateien (strongswan.conf, ipsec.conf und ipsec.secrets) und Ordner (strongswan.d,ipsec.d) werden unter /usr/local/etc path kopiert. Die Konfiguration der VPN-Richtlinie befindet sich in der Datei ipsec.conf und vertrauliche Geheimnisse werden in der Datei ipsec.secrets gespeichert. Die Konfiguration des Strongswan-Plugins wird im Verzeichnis strongswan.d gespeichert.

Kompilierung abgeschlossen

Sowohl Transport- als auch Tunnel-VPNs werden von strongswan unterstützt: Im Tunnel-Modus wird die Sicherheit des Kanals von Ort zu Ort gewährleistet und funktioniert mit anderen Anbietern wie Cisco, Huawei und Wacholdergeräten.

Standort-zu-Standort-VPN

Die folgende Abbildung zeigt die Platzierung eines Strong-Swan-basierten VPN-Gateways in einem Netzwerk. Zwischen den privaten Netzwerken 192.168.223.0/24 und 192.168.222.0/24 des Unternehmens wird ein sicherer Kommunikationskanal eingerichtet.

Standort-zu-Standort-VPN

Bevor Sie IPsec zwischen dem privaten A- und B-Netzwerk verwenden, stellen Sie sicher, dass das Routing zwischen den VPN-Gateways des Unternehmens funktioniert, so dass das VPN-Gateway auf der A-Seite den Remote-VPN-Computer (B) pingen kann, wodurch sichergestellt wird, dass die Netzwerkverbindung in Ordnung ist.

Wie unten gezeigt, befindet sich die Standardkonfiguration des strongswan-Tools im Verzeichnis /usr/local/etc/.

Liste der Konfigurationsdateien

Vorab freigegebener, schlüsselbasierter Tunnel

Im ersten Fall wird ein Shared Secret basiertes VPN zwischen Gateway-Geräten erstellt. Der bekannte Key-Sharing-Algorithmus Diffie-Hellman wird von Strongswan zur gegenseitigen Authentifizierung verwendet. Details zur Funktionsweise des IPsec-Protokolls finden Sie unter folgendem Link.

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

Konfiguration des VPN:

(A-Seite)

Die Hauptkonfiguration einer strongswan VPN-Richtlinie befindet sich in der Datei ipsec.conf. Informationen, wie sie unten angegeben sind, finden Sie in dieser Konfigurationsdatei.

  • Version von IKE
  • Tunneltyp
  • Quell- und Ziel-Gateways
  • private Netzwerke von VPNs

ipsec.conf von A-Seite ist unten angegeben.

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

ipsec.conf

IPsec-Geheimnisse (gemeinsame Schlüssel, Passwort des privaten Schlüssels, Pin zum Entsperren von hsm) werden in der Datei ipsec.secrets gespeichert. Wie unten gezeigt, sind Shard-Geheimnisse zwischen beiden VPN-Parteien „test12345“.

192.168.1.101 192.168.1.102 : PSK 'test12345'

ipsec.secrets

(B-Seite)

Die Konfiguration in den Dateien ipsec.conf und ipsec.secrets auf der entfernten Seite ist die Rückseite der lokalen Seite, wie unten beschrieben.

Der Inhalt der Datei ipsec.conf ist unten aufgeführt.

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

ipsec.conf

Die Datei ipsec.secrets enthält das gemeinsame Secret auf der entfernten Seite.

192.168.1.102 192.168.1.101 : PSK 'test12345'

ipsec.secrets

Starten Sie den strongswan Daemon (charon) mit dem folgenden Befehl, nachdem Sie die Konfigurationsdatei son beidseitig eingerichtet haben.

ipsec Neustart

ipsec neu starten

Der folgende Befehl zeigt den Status des erstellten VPN auf den Geräten an.

ipsec statusall

Der Status des Tunnels auf beiden Seiten (lokal und entfernt) ist unten dargestellt.

ipsec Status A

ipsec Status B

Dieser Linux-Befehl zeigt die Richtlinien und Zustände des IPsec-Tunnels an.

ip xfrm state
ip xfrm policy

ip xfrm status

Wie in der obigen Befehlsausgabe gezeigt, werden sensible Informationen esp/hmac (Schlüssel) auch durch den Befehl ip xfrm angezeigt.

X.509 Zertifikatsbasierter Tunnel

Im X.509-Zertifikat (Public Key Authentication) basierten Tunnel ist es erforderlich, Zertifikate für die Zertifizierungsstelle (CA), Client A und B zu generieren.

Die Generierung eines selbstsignierten CA-Zertifikats mit dem PKI-Dienstprogramm von strongswan ist in den folgenden Screenshots dargestellt.

Gehen Sie in den Pfad /usr/local/etc/ipsec.d und führen Sie die folgenden Befehle aus.

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

Zertifikate erstellen

Die Generierung der Zertifikate für den Mandanten A ist nachfolgend dargestellt.

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

pki-Werkzeug

Ähnliches, öffentlich-privates Schlüsselpaar und Zertifikat, das für den Client B generiert wurde.

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

Die Zertifikate wurden erstellt.

Nach erfolgreicher Generierung von CA- und Client-Zertifikaten ist der nächste Schritt die Änderung der Konfiguration von ipsec.conf und ipsec.secrets. Bitte konsultieren Sie die strongswan-Dokumentation für weitere Details zu den Änderungen in ipsec.conf und der secrets-Datei.

Der Inhalt von ipsec.conf & ipsec.secrets for A side ist unten aufgeführt.

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"

ipsec.conf

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

ipsec.secrets

Die Konfiguration der B-Seite ist ebenfalls unten aufgeführt.

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"

ipsec.conf B

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

ipsec.secrets B

Führen Sie den Befehl ipsec restart aus, um die obigen Änderungen anzuwenden und den Status des mit Zertifikaten erstellten Tunnels zu überprüfen.

ipsec statusall    # at side A

ipsec statusall # auf Seite A

ipsec statusall    # at side B

ipsec statusall # auf Seite B

Schließlich wurde das zertifikatsbasierte VPN mit dem strongswan-Tool erfolgreich erstellt.

Das könnte dich auch interessieren …