Wie man IKEv2 VPN mit Strongswan und Letsencrypt unter Ubuntu einrichtet

Strongswan ist eine quelloffene, plattformübergreifende IPSec-Implementierung. Es ist eine IPSec-basierte VPN-Lösung, die sich auf starke Authentifizierungsmethoden und -mechanismen konzentriert. Sie unterstützt sowohl IKEv1- als auch IKEv2-Schlüsselaustauschprotokolle, Authentifizierung auf Basis von X.509-Zertifikaten oder gemeinsam genutzten Schlüsseln und sichere IKEv2-EAP-Benutzerauthentifizierung.

In diesem Tutorial zeigen wir dir Schritt für Schritt, wie du den IPSec VPN Server mit Strongswan einrichtest. Wir werden einen IKEv2 VPN-Server mit der ‚EAP-MSCHAPv2‘-Authentifizierung einrichten und Letsencrypt-Zertifikate auf einem Ubuntu 18.04-Server verwenden.

Voraussetzungen

  • Ubuntu 18.04
  • Root-Rechte

Was werden wir tun?

  1. Strongswan auf Ubuntu 18.04 installieren
  2. SSL Letsencrypt generieren
  3. Strongswan konfigurieren
  4. NAT und Port-Forwarding UFW Firewall aktivieren
  5. Testen

Schritt 1 – Strongswan auf Ubuntu installieren

In diesem ersten Schritt installieren wir die Strongswan IPsec Implementierungssoftware und alle benötigten Pakete aus dem Ubuntu Repository.

Aktualisiere alle Repositories und installiere Strongswan mit dem unten stehenden apt-Befehl.

sudo apt update
sudo apt install strongswan strongswan-pki libstrongswan-standard-plugins libstrongswan-extra-plugins

Warte, bis alle Pakete installiert sind.

Schritt 2 – SSL Letsencrypt generieren

Wir erstellen den IKEv2-VPN-Server mit dem Domainnamen „vpn.hakase-labs.pw“ und verwenden die von letsencrypt generierten Zertifikate.

In diesem Schritt installieren wir das letsencrypt-Tool „certbot“ und erstellen Zertifikate für den Server-Domainnamen „vpn.hakase-labs.pw“.

Installiere das letsencrypt-Tool „certbot“.

sudo apt install certbot -y

Nachdem die Installation abgeschlossen ist, generiere neue SSL-Zertifikatsdateien mit dem unten stehenden certbot-Befehl.

certbot certonly --rsa-key-size 4096 --standalone --agree-tos --no-eff-email --email tensaitux993@gmail.com -d vpn.hakase-labs.pw

Die Letsencrypt-Zertifikate für die vpn-Domäne „vpn.hakase-labs.pw“ wurden erstellt und befinden sich im Verzeichnis „/etc/letsencrypt/live“.

Als nächstes müssen wir die Zertifikatsdateien „fullchain.pem“, „privkey.pem“ und „chain.pem“ in das Verzeichnis „/etc/ipsec.d/“ kopieren.

Führe die folgenden Befehle aus.

cp /etc/letsencrypt/live/vpn.hakase-labs.pw/fullchain.pem /etc/ipsec.d/certs/
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/privkey.pem /etc/ipsec.d/private/
cp /etc/letsencrypt/live/vpn.hakase-labs.pw/chain.pem /etc/ipsec.d/cacerts/

Alle letsencrypt-Zertifikate für das Strongswan-VPN mit dem Namen „vpn.hakase-labs.pw“ wurden erstellt und in das Verzeichnis „/etc/ipsec.d“ kopiert.

tree /etc/ipsec.d/

Schritt 3 – Strongswan konfigurieren

Sichere die Standardkonfiguration und erstelle eine neue „ipsec.conf“ mit dem Editor vim.

mv /etc/ipsec.conf /etc/ipsec.conf.asli
vim /etc/ipsec.conf

Füge die Konfiguration unten ein.

#global configuration IPsec
#chron logger
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

#define new ipsec connection
conn hakase-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    ike=aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes256-aes128-sha256-sha1-modp2048-modp4096-modp1024,aes256-sha1-modp1024,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16-aes256gcm12-aes128gcm16-aes128gcm12-sha256-sha1-modp2048-modp4096-modp1024,3des-sha1-modp1024!
    esp=aes128-aes256-sha1-sha256-modp2048-modp4096-modp1024,aes128-sha1,aes128-sha1-modp1024,aes128-sha1-modp1536,aes128-sha1-modp2048,aes128-sha256,aes128-sha256-ecp256,aes128-sha256-modp1024,aes128-sha256-modp1536,aes128-sha256-modp2048,aes128gcm12-aes128gcm16-aes256gcm12-aes256gcm16-modp2048-modp4096-modp1024,aes128gcm16,aes128gcm16-ecp256,aes256-sha1,aes256-sha256,aes256-sha256-modp1024,aes256-sha256-modp1536,aes256-sha256-modp2048,aes256-sha256-modp4096,aes256-sha384,aes256-sha384-ecp384,aes256-sha384-modp1024,aes256-sha384-modp1536,aes256-sha384-modp2048,aes256-sha384-modp4096,aes256gcm16,aes256gcm16-ecp384,3des-sha1!
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@vpn.hakase-labs.pw
    leftcert=fullchain.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.15.1.0/24
    rightdns=1.1.1.1,8.8.8.8
    rightsendcert=never
    eap_identity=%identity

Speichere und beende.

Details zur Konfiguration:

  • Erstelle eine neue IPSec VPN-Tunnelverbindung mit dem Namen „hakase-vpn“.
  • Lege die IKEv2- und ESP-Cipher-Suites für die Authentifizierung fest.
  • Die „linke“ Serverkonfiguration verwendet den Domainnamen „vpn.hakase-labs.pw“ und das letsencrypt-Zertifikat „fullchain.pem“ im Verzeichnis „/etc/ipsec.d/certs“.
  • Die „richtige“ Client/Remote-Einrichtung mit der EAP-Authentifizierungsmethode „eap-mschapv2“, die Zuweisung des virtuellen IP-Adressbereichs „10.15.1.0/24“ an alle verbundenen Clients und die Verwendung der öffentlichen DNS Cloudflare und Google.

Als Nächstes müssen wir die Datei „/etc/ipsec.secrets“ bearbeiten, um den privaten Schlüssel des RSA-Servers und die EAP-Anmeldedaten zu definieren.

Bearbeite die Datei „ipsec.secrets“ mit vim.

vim /etc/ipsec.secrets

Und füge die Konfiguration dort ein.

: RSA "privkey.pem"
hakase : EAP "hakase321@"
tensai : EAP "tensai321@"

Speichern und beenden.

Details zur Konfiguration:

  • Gib den privaten Schlüssel des RSA-Servers mit dem letsencrypt-Zertifikat „privkey.pem“ an, das sich im Verzeichnis „/etc/ipsec.d/private“ befindet.
  • Definiere das Format der EAP-Benutzeranmeldeinformationen ‚user : EAP „password“‚.

Wenn die IPSec-Konfiguration von strongswan abgeschlossen ist, starte den strongswan-Dienst und aktiviere ihn so, dass er jedes Mal beim Systemstart gestartet wird.

systemctl start strongswan
systemctl enable strongswan

Schritt 4 – NAT und Port-Forwarding UFW Firewall aktivieren

In diesem Schritt aktivieren wir den NAT-Modus, öffnen die Ports, die für das Strongswan IPSec VPN verwendet werden, und aktivieren das Port-Forwarding. Wir werden die UFW-Firewall verwenden.

Bevor wir die Firewall auf dem Server aktivieren, müssen wir den ssh-Dienst und die strongswan UDP-Ports (500 und 4500) zu den Firewall-Dienstlisten hinzufügen.

Führe die folgenden ufw-Firewall-Befehle aus.

sudo ufw allow ssh
sudo ufw allow 500,4500/udp

Der ssh-Dienst und die strongswan-Ports wurden der ufw-Firewall hinzugefügt.

Als Nächstes aktivieren wir den NAT-Modus und die Port-Weiterleitung auf der UFW-Firewall, indem wir ihre Konfigurationsdatei bearbeiten.

Bearbeite die Standardkonfiguration der ufw.

vim /etc/default/ufw

Ändere die „DEFAULT_FORWARD_POLICY“ in „ACCEPT“.

DEFAULT_FORWARD_POLICY="ACCEPT"

Speichere und beende die Datei.

Nun müssen wir die Netzwerkschnittstelle, die für den Internetzugang verwendet wird, mit dem folgenden route-Befehl überprüfen.

route | grep '^default' | grep -o '[^ ]*$'

Du erhältst die Netzwerkschnittstelle wie ‚eth0‘, ‚eth1‘ oder ‚ens3‘ usw.

Gehe in das Verzeichnis „/etc/ufw“ und bearbeite die Konfigurationsdatei „before.rules“.

cd /etc/ufw/
vim before.rules

Füge die folgende nat- und mangle-Konfiguration an den Anfang der Zeilen ein.

*nat
-A POSTROUTING -s 10.15.1.0/24 -o ens3 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.15.1.0/24 -o ens3 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.15.1.0/24 -o ens3 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

Und füge die benutzerdefinierte ufw-Firewall-Kette unter der Konfiguration „*filter“ ein.

*filter
.....

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.15.1.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.15.1.0/24 -j ACCEPT

Speichern und beenden.

Beachte:

  • Ersetze die Schnittstelle „ens3“ durch deine eigene Netzwerkschnittstelle.
  • Ändere die interne/private IP-Adresse, wie du willst.

Für die Konfiguration der Portweiterleitung bearbeitest du die Datei „sysctl.conf“ im ufw-Verzeichnis.

cd /etc/ufw
vim sysctl.conf

Entferne den Kommentar in der Zeile „net/ipv4/ip_forward“.

net/ipv4/ip_forward=1

Speichern und beenden.

Starte und aktiviere die ufw-Firewall.

sudo ufw enable

Tippe zur Bestätigung „y“ ein und drücke die Eingabetaste, um sicherzustellen, dass kein Fehler auftritt. Starte dann den Strongswan-Dienst neu.

systemctl restart strongswan

Die Konfiguration der UFW-Firewall für den NAT-Modus und das Port-Forwarding ist damit abgeschlossen.

Schritt 5 – Testen

In diesem Fall werden wir einen Test auf MacOS X und einem Android-Telefon durchführen.

Unter MacOS

  • Öffne die „Systemeinstellungen“ und klicke auf das Menü „Netzwerk“.

  • Klicke auf die Schaltfläche „+“, um eine neue VPN-Verbindung zu erstellen.
    • Schnittstelle: ‚VPN‘
    • VPN-Typ: ‚IKEv2‘
    • Dienstname: ‚IKEv2-vpn‘

  • Gib bei „Server-Adresse“ und „Remote-ID“ den VPN-Domänennamen „vpn.hakase-labs.pw“ ein.
  • Klicke auf „Authentifizierungseinstellungen“.
  • Authentifizierung mit einem „Benutzernamen“.
  • Gib den Benutzernamen „tensai“ mit dem Passwort „tensai321@“ ein.
  • Klicke auf ‚OK‘ und dann auf ‚Übernehmen‘.

Eine neue IKEv2 VPN-Verbindung wurde auf dem Client erstellt. Klicke auf die Schaltfläche „Verbinden“.

Der Client ist nun mit dem Strongswan VPN-Server verbunden und hat eine interne/private IP-Adresse 10.15.1.1.

Auf Android

  • Lade die native strongswan Android-Anwendung von Google-Play herunter und installiere sie.
  • Neues VPN-Profil hinzufügen
  • Gib den Domainnamen des Servers „vpn.hakase-labs.pw“ ein und verwende die IKEv2 EAP-Benutzername- und Passwort-Authentifizierung.

Nachfolgend siehst du das Ergebnis, wenn wir uns mit dem VPN-Server verbunden haben.

Der IKEv2 IPSec-basierte VPN-Server wurde mit Strongswan auf einem Ubuntu 18.04 Server erstellt.

Referenz

Das könnte dich auch interessieren …