GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> OpenVPN

So richten Sie einen IKEv2-VPN-Server mit StrongSwan unter Ubuntu 22.04 ein

Einführung

Ein virtuelles privates Netzwerk oder VPN ermöglicht es Ihnen, den Datenverkehr sicher zu verschlüsseln, während er durch nicht vertrauenswürdige Netzwerke fließt, wie z. B. in einem Café, einer Konferenz oder einem Flughafen.

Internet Key Exchange v2 oder IKEv2 ist ein Protokoll, das ein direktes IPSec-Tunneling zwischen dem Server und dem Client ermöglicht. In IKEv2-VPN-Implementierungen bietet IPSec Verschlüsselung für den Netzwerkverkehr. IKEv2 wird auf einigen Plattformen (OS X 10.11+, iOS 9.1+ und Windows 10) nativ unterstützt, ohne dass zusätzliche Anwendungen erforderlich sind, und es bewältigt Client-Schluckauf ziemlich reibungslos.

In diesem Tutorial richten Sie einen IKEv2-VPN-Server mit StrongSwan auf einem Ubuntu 22.04-Server ein. Anschließend erfahren Sie, wie Sie mit Windows-, macOS-, Ubuntu-, iOS- und Android-Clients eine Verbindung herstellen.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

  • Ein Ubuntu 22.04-Server, der gemäß der Ubuntu 22.04-Anleitung zur Ersteinrichtung des Servers konfiguriert wurde, einschließlich eines sudo Benutzer ohne Rootberechtigung und eine Firewall.

Schritt 1 – StrongSwan installieren

Zuerst installieren Sie StrongSwan, einen Open-Source-IPSec-Daemon, den Sie als Ihren VPN-Server konfigurieren. Außerdem installieren Sie die Komponente Public Key Infrastructure (PKI), damit Sie eine Zertifizierungsstelle (CA) erstellen können, um Anmeldeinformationen für Ihre Infrastruktur bereitzustellen.

Beginnen Sie damit, den lokalen Paketcache zu aktualisieren:

  1. sudo apt update

Installieren Sie dann die Software, indem Sie Folgendes eingeben:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

Die zusätzlichen libcharon-extauth-plugins -Paket wird verwendet, um sicherzustellen, dass sich verschiedene Clients mit einem gemeinsamen Benutzernamen und einer gemeinsamen Passphrase bei Ihrem Server authentifizieren können. Die libstrongswan-extra-plugins -Paket ist enthalten, sodass Strongswan Verschlüsselungssammlungen mit elliptischen Kurven unterstützt, die Curve25519 verwenden Kryptographie-Suite.

Nachdem alles installiert ist, fahren Sie mit der Erstellung Ihrer Zertifikate fort.

Schritt 2 – Erstellen einer Zertifizierungsstelle

Ein IKEv2-Server benötigt ein Zertifikat, um sich gegenüber Clients zu identifizieren. Um beim Erstellen des erforderlichen Zertifikats zu helfen, wird die Datei strongswan-pki Paket enthält ein Dienstprogramm namens pki um eine Zertifizierungsstelle und Serverzertifikate zu generieren.

Erstellen Sie zunächst einige Verzeichnisse, um alle Assets zu speichern, an denen Sie arbeiten werden. Die Verzeichnisstruktur stimmt mit einigen der Verzeichnisse in /etc/ipsec.d überein , wo Sie schließlich alle von Ihnen erstellten Elemente verschieben werden:

  1. mkdir -p ~/pki/{cacerts,certs,private}

Sperren Sie dann die Berechtigungen, damit unsere privaten Dateien nicht von anderen Benutzern gesehen werden können:

  1. chmod 700 ~/pki

Jetzt, da Sie eine Verzeichnisstruktur haben, um alles zu speichern, können Sie einen Stammschlüssel generieren. Dies ist ein 4096-Bit-RSA-Schlüssel, der zum Signieren Ihres Stammzertifikats der Zertifizierungsstelle verwendet wird.

Führen Sie diese Befehle aus, um den Schlüssel zu generieren:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Anschließend können Sie mit der Erstellung Ihrer Stammzertifizierungsstelle fortfahren, indem Sie den Schlüssel verwenden, den Sie gerade generiert haben, um das Stammzertifikat zu signieren:

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

Der --lifetime 3650 Flag wird verwendet, um sicherzustellen, dass das Stammzertifikat der Zertifizierungsstelle 10 Jahre lang gültig ist. Das Root-Zertifikat für eine Behörde ändert sich normalerweise nicht, da es an jeden Server und Client, der sich darauf verlässt, neu verteilt werden müsste, sodass 10 Jahre ein sicherer Standard-Ablaufwert sind.

Sie können den eindeutigen Namen ändern (DN) Wert auf etwas anderes, wenn Sie möchten. Der allgemeine Name (CN-Feld) ist hier nur der Indikator, er muss also mit nichts in Ihrer Infrastruktur übereinstimmen.

Nachdem Sie nun Ihre Stammzertifizierungsstelle eingerichtet und ausgeführt haben, können Sie ein Zertifikat erstellen, das der VPN-Server verwenden wird.

Schritt 3 – Generieren eines Zertifikats für den VPN-Server

Sie erstellen jetzt ein Zertifikat und einen Schlüssel für den VPN-Server. Dieses Zertifikat ermöglicht es dem Client, die Authentizität des Servers mithilfe des gerade generierten CA-Zertifikats zu überprüfen.

Erstellen Sie zunächst mit dem folgenden Befehl einen privaten Schlüssel für den VPN-Server:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

Erstellen und signieren Sie nun das VPN-Serverzertifikat mit dem Schlüssel der Zertifizierungsstelle, den Sie im vorherigen Schritt erstellt haben. Führen Sie den folgenden Befehl aus, aber ändern Sie die Felder Common Name (CN) und Subject Alternate Name (SAN) in den DNS-Namen oder die IP-Adresse Ihres VPN-Servers:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Hinweis :Wenn Sie anstelle eines DNS-Namens eine IP-Adresse verwenden, müssen Sie mehrere --san angeben Einträge. Die Zeile im vorherigen Befehlsblock, in der Sie den Distinguished Name angeben (--dn ... ) muss mit dem zusätzlichen Eintrag wie der folgenden Auszugszeile geändert werden:

--dn "CN=IP address" --san @IP_address --san IP_address \

Der Grund für diesen zusätzlichen --san @IP_address Eintrag ist, dass einige Clients prüfen, ob das TLS-Zertifikat sowohl einen DNS-Eintrag als auch einen IP-Adresseneintrag für einen Server enthält, wenn sie dessen Identität verifizieren.

Das --flag serverAuth wird verwendet, um anzugeben, dass das Zertifikat explizit für die Serverauthentifizierung verwendet wird, bevor der verschlüsselte Tunnel aufgebaut wird. Das --flag ikeIntermediate Option wird verwendet, um ältere macOS-Clients zu unterstützen.

Nachdem Sie nun alle TLS/SSL-Dateien generiert haben, die StrongSwan benötigt, können Sie die Dateien in /etc/ipsec.d verschieben Verzeichnis durch Eingabe von:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

In diesem Schritt haben Sie ein Zertifikatspaar erstellt, das zum Sichern der Kommunikation zwischen dem Client und dem Server verwendet wird. Sie haben die Zertifikate auch mit dem CA-Schlüssel signiert, sodass der Client die Authentizität des VPN-Servers anhand des CA-Zertifikats überprüfen kann. Mit all diesen Zertifikaten können Sie mit der Konfiguration von SrongSwan fortfahren.

Schritt 4 – StrongSwan konfigurieren

StrongSwan hat eine Standardkonfigurationsdatei mit einigen Beispielen, aber wir müssen den größten Teil der Konfiguration selbst vornehmen. Lassen Sie uns die Datei als Referenz sichern, bevor wir von vorne anfangen:

  1. sudo mv /etc/ipsec.conf{,.original}

Erstellen und öffnen Sie eine neue leere Konfigurationsdatei mit Ihrem bevorzugten Texteditor. Hier verwenden Sie nano :

  1. sudo nano /etc/ipsec.conf

Hinweis :Während Sie diesen Abschnitt durcharbeiten, um den Serverteil Ihres VPN zu konfigurieren, werden Sie auf Einstellungen stoßen, die sich auf links beziehen und richtig Seiten einer Verbindung. Beim Arbeiten mit IPSec-VPNs ist die linke Side by Convention bezieht sich auf das lokale System, das Sie konfigurieren, in diesem Fall auf den Server. Die Anweisungen auf der rechten Seite in diesen Einstellungen beziehen sich auf Remote-Clients wie Telefone und andere Computer.

Wenn Sie später in diesem Tutorial mit der Konfiguration von Clients fortfahren, verweisen die Client-Konfigurationsdateien mit verschiedenen Links auf sich selbst Direktiven, und der Server wird mit right angesprochen seitliche Terminologie.

Zuerst weisen wir StrongSwan an, Daemon-Status zum Debuggen zu protokollieren und doppelte Verbindungen zuzulassen. Fügen Sie diese Zeilen zur Datei hinzu:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Dann erstellen wir einen Konfigurationsabschnitt für unser VPN. Wir werden StrongSwan auch anweisen, IKEv2-VPN-Tunnel zu erstellen und diesen Konfigurationsabschnitt beim Start automatisch zu laden. Hängen Sie die folgenden Zeilen an die Datei an:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

Wir werden auch die Dead-Peer-Erkennung konfigurieren, um alle „hängenden“ Verbindungen zu löschen, falls der Client unerwartet die Verbindung trennt. Fügen Sie diese Zeilen hinzu:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

Als Nächstes konfigurieren wir die IPSec-Parameter der „linken“ Seite des Servers. Jeder der folgenden Parameter stellt sicher, dass der Server so konfiguriert ist, dass er Verbindungen von Clients akzeptiert und sich selbst korrekt identifiziert. Sie fügen jede dieser Einstellungen zu /etc/ipsec.conf hinzu Datei, sobald Sie wissen, was sie sind und warum sie verwendet werden:

  • left=%any Der %any Der Wert stellt sicher, dass der Server die Netzwerkschnittstelle verwendet, an der er eingehende Verbindungen für die nachfolgende Kommunikation mit Clients empfängt. Wenn Sie beispielsweise einen Client über ein privates Netzwerk verbinden, verwendet der Server für den Rest der Verbindung die private IP-Adresse, an der er Datenverkehr empfängt.
  • leftid=@server_domain_or_IP Diese Option steuert den Namen, den der Server Clients präsentiert. In Kombination mit der nächsten Option leftcert , die leftid Option stellt sicher, dass der konfigurierte Name des Servers und der Distinguished Name (DN), der im öffentlichen Zertifikat enthalten ist, übereinstimmen.
  • leftcert=server-cert.pem Diese Option ist der Pfad zum öffentlichen Zertifikat für den Server, den Sie in Schritt 3 konfiguriert haben. Ohne sie kann sich der Server nicht bei Clients authentifizieren oder die Aushandlung der IKEv2-Einrichtung abschließen.
  • leftsendcert=always Der always -Wert stellt sicher, dass jeder Client, der sich mit dem Server verbindet, als Teil des anfänglichen Verbindungsaufbaus immer eine Kopie des öffentlichen Zertifikats des Servers erhält.
  • leftsubnet=0.0.0.0/0 Die letzte „linke“ Option, die Sie hinzufügen werden, informiert Clients über die Subnetze, die hinter dem Server erreichbar sind. In diesem Fall 0.0.0.0/0 wird verwendet, um den gesamten Satz von IPv4-Adressen darzustellen, was bedeutet, dass der Server den Clients standardmäßig mitteilt, ihren gesamten Datenverkehr über das VPN zu senden.

Nachdem Sie nun mit allen relevanten Optionen für die „linke“ Seite vertraut sind, fügen Sie sie alle wie folgt zur Datei hinzu:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Hinweis :Beim Konfigurieren der Server-ID (leftid ), enthalten Sie nur den @ Zeichen, wenn Ihr VPN-Server durch einen Domänennamen identifiziert wird:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Wenn der Server anhand seiner IP-Adresse identifiziert wird, geben Sie einfach die IP-Adresse ein in:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

Als nächstes können wir die IPSec-Parameter der „rechten“ Seite des Clients konfigurieren. Jeder der folgenden Parameter teilt dem Server mit, wie Verbindungen von Clients akzeptiert werden, wie Clients sich beim Server authentifizieren sollen und welche privaten IP-Adressbereiche und DNS-Server die Clients verwenden werden. Fügen Sie jede dieser Einstellungen zu /etc/ipsec.conf hinzu Datei, sobald Sie wissen, was sie sind und warum sie verwendet werden:

  • right=%any Der %any Option für das right Seite der Verbindung weist den Server an, eingehende Verbindungen von jedem Remote-Client zu akzeptieren.
  • rightid=%any Diese Option stellt sicher, dass der Server keine Verbindungen von Clients zurückweist, die eine Identität angeben, bevor der verschlüsselte Tunnel aufgebaut ist.
  • rightauth=eap-mschapv2 Diese Option konfiguriert die Authentifizierungsmethode, die Clients verwenden, um sich beim Server zu authentifizieren. eap-mschapv2 wird hier aus Gründen der breiten Kompatibilität verwendet, um Clients wie Windows-, macOS- und Android-Geräte zu unterstützen.
  • rightsourceip=10.10.10.0/24 Diese Option weist den Server an, Clients aus dem angegebenen 10.10.10.0/24 private IP-Adressen zuzuweisen Pool von IPs.
  • rightdns=8.8.8.8,8.8.4.4 Diese IP-Adressen sind die öffentlichen DNS-Resolver von Google. Sie können geändert werden, um andere öffentliche Resolver, die Resolver des VPN-Servers oder jeden anderen Resolver zu verwenden, den Clients erreichen können.
  • rightsendcert=never Diese Option weist den Server an, dass Clients kein Zertifikat senden müssen, um sich zu authentifizieren.

Nachdem Sie nun mit den erforderlichen „rechten“ Optionen für das VPN vertraut sind, fügen Sie die folgenden Zeilen zu /etc/ipsec.conf hinzu :

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Jetzt weisen wir StrongSwan an, den Client nach Benutzeranmeldeinformationen zu fragen, wenn er eine Verbindung herstellt:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Fügen Sie abschließend die folgenden Zeilen hinzu, um Linux-, Windows-, macOS-, iOS- und Android-Clients zu unterstützen. Diese Zeilen spezifizieren die verschiedenen Schlüsselaustausch-, Hashing-, Authentifizierungs- und Verschlüsselungsalgorithmen (allgemein als Cipher Suites bezeichnet ), die StrongSwan verschiedenen Clients erlauben wird:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Jede unterstützte Verschlüsselungssammlung wird durch ein Komma von den anderen getrennt. Zum Beispiel chacha20poly1305-sha512-curve25519-prfsha512 ist eine Suite und aes256gcm16-sha384-prfsha384-ecp384 ist ein anderer. Die hier aufgelisteten Cipher Suites wurden ausgewählt, um die größtmögliche Kompatibilität zwischen Windows-, macOS-, iOS-, Android- und Linux-Clients zu gewährleisten.

Die vollständige Konfigurationsdatei sollte folgendermaßen aussehen:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Speichern und schließen Sie die Datei, sobald Sie überprüft haben, dass Sie jede Zeile korrekt hinzugefügt haben. Wenn Sie nano verwendet haben , tun Sie dies, indem Sie CTRL + X drücken , Y , dann ENTER .

Nachdem Sie die VPN-Parameter konfiguriert haben, können Sie mit der Erstellung eines Kontos fortfahren, damit Benutzer eine Verbindung zum Server herstellen können.

Schritt 5 – Konfigurieren der VPN-Authentifizierung

Ihr VPN-Server ist jetzt so konfiguriert, dass er Client-Verbindungen akzeptiert, aber es sind noch keine Anmeldeinformationen konfiguriert. Sie müssen ein paar Dinge in einer speziellen Konfigurationsdatei namens ipsec.secrets konfigurieren :

  • Sie müssen StrongSwan mitteilen, wo der private Schlüssel für unser Serverzertifikat zu finden ist, damit sich der Server gegenüber Clients authentifizieren kann.
  • Sie müssen außerdem eine Liste mit Benutzern erstellen, die sich mit dem VPN verbinden dürfen.

Lassen Sie uns die Secrets-Datei zum Bearbeiten öffnen:

  1. sudo nano /etc/ipsec.secrets

Teilen Sie StrongSwan zunächst mit, wo der private Schlüssel zu finden ist und wie er geparst werden soll.

/etc/ipsec.secrets
: RSA "server-key.pem"

Achten Sie darauf, dass die Zeile mit : beginnt Zeichen und dass dahinter ein Leerzeichen steht, sodass die gesamte Zeile : RSA "server-key.pem" lautet .

Anschließend definieren Sie die Benutzeranmeldeinformationen. Sie können sich eine beliebige Kombination aus Benutzername und Passwort zusammenstellen:

/etc/ipsec.secrets
your_username : EAP "your_password"

Speichern und schließen Sie die Datei. Nachdem Sie die Arbeit mit den VPN-Parametern abgeschlossen haben, starten Sie den VPN-Dienst neu, damit unsere Konfiguration übernommen wird:

  1. sudo systemctl restart strongswan-starter

Nachdem der VPN-Server nun vollständig mit Serveroptionen und Benutzeranmeldeinformationen konfiguriert wurde, ist es an der Zeit, mit der Konfiguration des wichtigsten Teils fortzufahren:der Firewall.

Schritt 6 – Konfigurieren der Firewall und Kernel-IP-Weiterleitung

Wenn die StrongSwan-Konfiguration abgeschlossen ist, müssen Sie die Firewall so konfigurieren, dass VPN-Datenverkehr durchgelassen und weitergeleitet wird.

Wenn Sie das erforderliche Tutorial zur Ersteinrichtung des Servers befolgt haben, sollte eine UFW-Firewall aktiviert sein. Wenn Sie UFW noch nicht konfiguriert haben, sollten Sie zunächst eine Regel hinzufügen, um SSH-Verbindungen durch die Firewall zuzulassen, damit Ihre aktuelle Sitzung nicht geschlossen wird, wenn Sie UFW aktivieren:

  1. sudo ufw allow OpenSSH

Aktivieren Sie dann die Firewall, indem Sie Folgendes eingeben:

  1. sudo ufw enable

Fügen Sie dann eine Regel hinzu, um UDP-Datenverkehr zu den Standard-IPSec-Ports 500 zuzulassen und 4500 :

  1. sudo ufw allow 500,4500/udp

Als Nächstes öffnen Sie eine der Konfigurationsdateien von UFW, um einige Low-Level-Richtlinien für das Routing und Weiterleiten von IPSec-Paketen hinzuzufügen. Zuvor müssen Sie jedoch herausfinden, welche Netzwerkschnittstelle auf unserem Server für den Internetzugang verwendet wird. Finden Sie diese Schnittstelle, indem Sie nach dem Gerät fragen, das der Standardroute zugeordnet ist:

  1. ip route show default

Ihre öffentliche Schnittstelle sollte dem Wort „dev“ folgen. Dieses Ergebnis zeigt beispielsweise die Schnittstelle mit dem Namen eth0 , die im folgenden Beispiel hervorgehoben wird:

Outputdefault via your_server_ip dev eth0 proto static

Wenn Sie Ihre öffentliche Netzwerkschnittstelle haben, öffnen Sie /etc/ufw/before.rules Datei in Ihrem Texteditor. Die Regeln in dieser Datei werden der Firewall vor den übrigen üblichen Eingabe- und Ausgaberegeln hinzugefügt. Sie werden verwendet, um Network Address Translation (NAT) zu konfigurieren, damit der Server Verbindungen zu und von Clients und dem Internet korrekt weiterleiten kann.

  1. sudo nano /etc/ufw/before.rules

Ganz oben in der Datei (vor dem *filter Zeile), fügen Sie den folgenden Konfigurationsblock hinzu. Ändern Sie jede Instanz von eth0 in der obigen Konfiguration, um dem Schnittstellennamen zu entsprechen, den Sie mit ip route gefunden haben . Der *nat Linien erstellen Regeln, damit die Firewall den Datenverkehr zwischen den VPN-Clients und dem Internet korrekt weiterleiten und manipulieren kann. Der *mangle line passt die maximale Paketsegmentgröße an, um mögliche Probleme mit bestimmten VPN-Clients zu vermeiden:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

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

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

Als nächstes nach dem *filter und Kettendefinitionszeilen, fügen Sie einen weiteren Konfigurationsblock hinzu:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

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

Diese Zeilen weisen die Firewall an, den ESP-Datenverkehr (Encapsulating Security Payload) weiterzuleiten, damit die VPN-Clients eine Verbindung herstellen können. ESP bietet zusätzliche Sicherheit für unsere VPN-Pakete, da sie nicht vertrauenswürdige Netzwerke durchlaufen.

Wenn Sie fertig sind, speichern und schließen Sie die Datei, sobald Sie überprüft haben, dass Sie jede Zeile korrekt hinzugefügt haben. Wenn Sie nano verwendet haben , tun Sie dies, indem Sie CTRL + X drücken , Y , dann ENTER .

Vor dem Neustart der Firewall müssen Sie außerdem einige Netzwerk-Kernel-Parameter ändern, um das Routing von einer Schnittstelle zur anderen zu ermöglichen. Die Datei, die diese Einstellungen steuert, heißt /etc/ufw/sysctl.conf . Sie müssen einige Dinge in der Datei konfigurieren.

Zuerst muss die IPv4-Paketweiterleitung aktiviert werden, damit der Datenverkehr zwischen dem VPN und den öffentlich zugänglichen Netzwerkschnittstellen auf dem Server übertragen werden kann. Als Nächstes deaktivieren Sie die Pfad-MTU-Erkennung, um Paketfragmentierungsprobleme zu vermeiden. Schließlich akzeptieren wir weder ICMP-Weiterleitungen noch senden wir ICMP-Weiterleitungen, um Man-in-the-Middle-Angriffe zu verhindern.

Öffnen Sie die Konfigurationsdatei der Kernelparameter von UFW mit nano oder Ihren bevorzugten Texteditor:

  1. sudo nano /etc/ufw/sysctl.conf

Fügen Sie nun folgenden net/ipv4/ip_forward=1 hinzu Einstellung am Ende der Datei, um die Weiterleitung von Paketen zwischen Schnittstellen zu aktivieren:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

Blockieren Sie als Nächstes das Senden und Empfangen von ICMP-Umleitungspaketen, indem Sie die folgenden Zeilen am Ende der Datei hinzufügen:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Deaktivieren Sie abschließend die Pfad-MTU-Erkennung, indem Sie diese Zeile am Ende der Datei hinzufügen:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Speichern Sie die Datei, wenn Sie fertig sind. Jetzt können Sie alle Ihre Änderungen aktivieren, indem Sie die Firewall deaktivieren und wieder aktivieren, da UFW diese Einstellungen bei jedem Neustart anwendet:

  1. sudo ufw disable
  2. sudo ufw enable

Sie werden aufgefordert, den Vorgang zu bestätigen. Geben Sie Y ein um UFW mit den neuen Einstellungen wieder zu aktivieren.

Schritt 7 – Testen der VPN-Verbindung unter Windows, macOS, Ubuntu, iOS und Android

Jetzt, da Sie alles eingerichtet haben, ist es an der Zeit, es auszuprobieren. Zuerst müssen Sie das von Ihnen erstellte CA-Zertifikat kopieren und auf Ihren Client-Geräten installieren, die eine Verbindung zum VPN herstellen. Am einfachsten geht das, indem Sie sich bei Ihrem Server anmelden und den Inhalt der Zertifikatsdatei ausgeben:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Sie sehen eine Ausgabe ähnlich der folgenden:

Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE

. . .

H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----

Kopieren Sie diese Ausgabe einschließlich -----BEGIN CERTIFICATE----- auf Ihren Computer und -----END CERTIFICATE----- Zeilen, und speichern Sie es in einer Datei mit einem erkennbaren Namen, z. B. ca-cert.pem . Stellen Sie sicher, dass die Datei, die Sie erstellen, den .pem enthält Erweiterung.

Verwenden Sie alternativ SFTP, um die Datei auf Ihren Computer zu übertragen.

Sobald Sie die ca-cert.pem haben Datei auf Ihren Computer heruntergeladen haben, können Sie die Verbindung zum VPN einrichten.

Von Windows aus verbinden

Es gibt mehrere Möglichkeiten, das Stammzertifikat zu importieren und Windows für die Verbindung mit einem VPN zu konfigurieren. Die erste Methode verwendet grafische Werkzeuge für jeden Schritt. Die zweite Methode verwendet PowerShell-Befehle, die per Skript erstellt und an Ihre VPN-Konfiguration angepasst werden können.

Hinweis: Diese Anweisungen wurden auf Windows 10-Installationen mit den Versionen 1903 und 1909 getestet.

Konfigurieren von Windows mit grafischen Tools

Importieren Sie zunächst das Stammzertifikat, indem Sie diesen Schritten folgen:

  1. Drücken Sie WINDOWS+R um den Lauf aufzurufen Dialog und geben Sie mmc.exe ein um die Windows Management Console zu starten.

  2. Aus der Datei Navigieren Sie im Menü zu Snap-in hinzufügen oder entfernen , wählen Sie Zertifikate aus aus der Liste der verfügbaren Snap-Ins und klicken Sie auf Hinzufügen .

  3. Wir möchten, dass das VPN mit jedem Benutzer funktioniert, also wählen Sie Computerkonto und klicken Sie auf Weiter .

  4. Wir konfigurieren Dinge auf dem lokalen Computer, also wählen Sie Lokaler Computer , und klicken Sie dann auf Fertig stellen .

  5. Unter dem Konsolenstamm erweitern Sie die Zertifikate (Lokaler Computer) erweitern Sie Vertrauenswürdige Stammzertifizierungsstellen , und wählen Sie dann die Zertifikate aus Eintrag:

  6. Aus der Aktion Wählen Sie im Menü Alle Aufgaben aus und klicken Sie auf Importieren , um den Assistenten zum Importieren von Zertifikaten anzuzeigen. Klicken Sie auf Weiter um über die Einleitung hinauszugehen.

  7. Auf der Zu importierende Datei Drücken Sie auf dem Bildschirm Durchsuchen stellen Sie sicher, dass Sie den Dateityp von „X.509-Zertifikat (.cer; .crt)“ in „Alle Dateien (. )“, und wählen Sie ca-cert.pem aus Datei, die Sie gespeichert haben. Klicken Sie dann auf Weiter .

  8. Stellen Sie sicher, dass der Zertifikatspeicher auf Vertrauenswürdige Stammzertifizierungsstellen eingestellt ist , und klicken Sie auf Weiter .

  9. Klicken Sie auf Fertig stellen um das Zertifikat zu importieren.

Konfigurieren Sie dann das VPN mit diesen Schritten:

  1. Starten Sie die Systemsteuerung , und navigieren Sie dann zum Netzwerk- und Freigabecenter .
  2. Klicken Sie auf Neue Verbindung oder neues Netzwerk einrichten , und wählen Sie dann Mit einem Arbeitsplatz verbinden aus .
  3. Wählen Sie Meine Internetverbindung (VPN) verwenden aus .
  4. Geben Sie die VPN-Serverdetails ein. Geben Sie den Domänennamen oder die IP-Adresse des Servers in die Internetadresse ein Feld und geben Sie dann Name des Ziels ein mit etwas, das Ihre VPN-Verbindung beschreibt. Klicken Sie dann auf Fertig .

Konfigurieren von Windows mit PowerShell

Um das Root-CA-Zertifikat mit PowerShell zu importieren, öffnen Sie zunächst eine PowerShell-Eingabeaufforderung mit Administratorrechten. Klicken Sie dazu mit der rechten Maustaste auf das Startmenüsymbol und wählen Sie Windows PowerShell (Admin) aus . Sie können auch eine Eingabeaufforderung als Administrator öffnen und powershell eingeben .

Als nächstes importieren wir das Zertifikat mit dem Import-Certificate PowerShell-Cmdlet. Im folgenden Befehl die erste -CertStoreLocation -Argument stellt sicher, dass das Zertifikat in die vertrauenswürdigen Stammzertifizierungsstellen des Computers importiert wird speichern, damit alle Programme und Benutzer das Zertifikat des VPN-Servers überprüfen können. Der -FilePath -Argument sollte auf den Speicherort zeigen, an den Sie das Zertifikat kopiert haben. Im folgenden Beispiel lautet der Pfad C:\Users\sammy\Documents\ca-cert.pem . Stellen Sie sicher, dass Sie den Befehl so bearbeiten, dass er mit dem von Ihnen verwendeten Speicherort übereinstimmt.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

Der Befehl gibt etwa Folgendes aus:

Output   PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root

Thumbprint                                Subject
----------                                -------
DB00813B4087E9367861E8463A60CEA0ADC5F002  CN=VPN root CA

Führen Sie nun den folgenden Befehl aus, um das VPN mit PowerShell zu konfigurieren. Ersetzen Sie den DNS-Namen oder die IP-Adresse Ihres Servers in -ServerAddress Linie. Die verschiedenen Flags stellen sicher, dass Windows korrekt mit den entsprechenden Sicherheitsparametern konfiguriert ist, die mit den Optionen übereinstimmen, die Sie in /etc/ipsec.conf festgelegt haben .

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Wenn der Befehl erfolgreich ist, erfolgt keine Ausgabe. Um zu bestätigen, dass das VPN korrekt konfiguriert ist, verwenden Sie Get-VPNConnection cmdlet:

  1. Get-VpnConnection -Name "VPN Connection"

Sie erhalten eine Ausgabe wie die folgende:

OutputName                  : VPN Connection
ServerAddress         : your_server_ip
AllUserConnection     : False
Guid                  : {B055A1AB-175C-4028-B4A8-D34309A2B20E}
TunnelType            : Ikev2
AuthenticationMethod  : {Eap}
EncryptionLevel       : Maximum
L2tpIPsecAuth         :
UseWinlogonCredential : False
EapConfigXmlStream    : #document
ConnectionStatus      : Disconnected
RememberCredential    : True
SplitTunneling        : False
DnsSuffix             :
IdleDisconnectSeconds : 0

By default Windows chooses older and slower algorithms. Run the Set-VpnConnectionIPsecConfiguration cmdlet to upgrade the encryption parameters that Windows will use for the IKEv2 key exchange, and to encrypt packets:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Hinweis :If you would like to delete the VPN connection and reconfigure it with different options, you can run the Remove-VpnConnection cmdlet.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

The -Force flag will skip prompting you to confirm the removal. You must be disconnected from the VPN if you attempt to remove it using this command.

Connecting to the VPN

Once you have the certificate imported and the VPN configured using either method, your new VPN connection will be visible under the list of networks. Select the VPN and click Connect . You’ll be prompted for your username and password. Type them in, click OK , and you’ll be connected.

Connecting from macOS

Follow these steps to import the certificate:

  1. Double-click the certificate file. Keychain Access will pop up with a dialog that says “Keychain Access is trying to modify the system keychain. Enter your password to allow this.”
  2. Enter your password, then click on Modify Keychain
  3. Double-click the newly imported VPN certificate. This brings up a small properties window where you can specify the trust levels. Set IP Security (IPSec) to Always Trust and you’ll be prompted for your password again. This setting saves automatically after entering the password.

Now that the certificate is imported and trusted, configure the VPN connection with these steps:

  1. Go to System Preferences and choose Network .
  2. Click on the small “plus” button on the lower-left of the list of networks.
  3. In the popup that appears, set Interface to VPN , set the VPN Type to IKEv2 , and give the connection a name.
  4. In the Server and Remote ID field, enter the server’s domain name or IP address. Leave the Local ID blank.
  5. Click on Authentication Settings , select Username , and enter your username and password you configured for your VPN user. Klicken Sie dann auf OK .

Finally, click on Connect to connect to the VPN. You should now be connected to the VPN.

Connecting from Ubuntu

To connect from an Ubuntu machine, you can set up and manage StrongSwan as a service or use a one-off command every time you wish to connect. Instructions are provided for both.

Managing StrongSwan as a Service

To manage StrongSwan as a service, you will need to perform the following configuration steps.

First, update your local package cache using apt

  1. sudo apt update

Next, install StrongSwan and the required plugins for authentication:

  1. sudo apt install strongswan libcharon-extra-plugins

Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem file into place:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

To ensure the VPN only runs on demand, use systemctl to disable StrongSwan from running automatically:

  1. sudo systemctl disable --now strongswan-starter

Next configure the username and password that you will use to authenticate to the VPN server. Edit /etc/ipsec.secrets using nano or your preferred editor:

  1. sudo nano /etc/ipsec.secrets

Add the following line, editing the highlighted username and password values to match the ones that you configured on the server:

/etc/ipsec.secrets
your_username : EAP "your_password"

Finally, edit the /etc/ipsec.conf file to configure your client to match the server’s configuration:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # This should match the `leftid` value on your server's configuration
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

To connect to the VPN, type:

  1. sudo systemctl start strongswan-starter

To disconnect again, type:

  1. sudo systemctl stop strongswan-starter

Using the charon-cmd Client for One-Off Connections

To manage StrongSwan as a service, you will need to perform the following configuration steps.

First, update your local package cache using apt

  1. sudo apt update

Next, install StrongSwan and the required plugins for authentication:

  1. sudo apt install strongswan libcharon-extra-plugins

Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem file into place:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

At this point you can connect to the VPN server with charon-cmd using the server’s CA certificate, the VPN server’s IP address, and the username you configured.

Run the following command whenever you want to connect to the VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

When prompted, provide the VPN user’s password and you will be connected to the VPN. To disconnect, press CTRL+C in the terminal and wait for the connection to close.

Connecting from iOS

To configure the VPN connection on an iOS device, follow these steps:

  1. Send yourself an email with the root certificate attached.
  2. Open the email on your iOS device and tap on the attached certificate file, then tap Install and enter your passcode. Once it installs, tap Done .
  3. Go to Settings , General , VPN and tap Add VPN Configuration . This will bring up the VPN connection configuration screen.
  4. Tap on Type and select IKEv2 .
  5. In the Description field, enter a short name for the VPN connection. This could be anything you like.
  6. In the Server and Remote ID field, enter the server’s domain name or IP address. The Local ID field can be left blank.
  7. Enter your username and password in the Authentication section, then tap Done .
  8. Select the VPN connection that you just created, tap the switch on the top of the page, and you’ll be connected.

Connecting from Android

Follow these steps to import the certificate:

  1. Send yourself an email with the CA certificate attached. Save the CA certificate to your downloads folder.
  2. Download the StrongSwan VPN client from the Play Store.
  3. Open the app. Tap the “more” icon (. . . ) in the upper-right corner and select CA certificates .
  4. Tap the “more” icon (. . . ) in the upper-right corner again. Select Import certificate .
  5. Browse to the CA certificate file in your downloads folder and select it to import it into the app.

Now that the certificate is imported into the StrongSwan app, you can configure the VPN connection with these steps:

  1. In the app, tap ADD VPN PROFILE at the top.
  2. Fill out the Server with your VPN server’s domain name or public IP address.
  3. Make sure IKEv2 EAP (Username/Password) is selected as the VPN Type.
  4. Fill out the Username and Password with the credentials you defined on the server.
  5. Deselect Select automatically in the CA certificate section and click Select CA certificate .
  6. Tap the IMPORTED tab at the top of the screen and choose the CA you imported (it will be named “VPN root CA” if you didn’t change the “DN” earlier).
  7. If you’d like, fill out Profile name (optional) with a more descriptive name.

When you wish to connect to the VPN, click on the profile you just created in the StrongSwan application.

Troubleshooting Connections

If you are unable to import the certificate, ensure the file has the .pem extension, and not .pem.txt .

If you’re unable to connect to the VPN, check the server name or IP address you used. The server’s domain name or IP address must match what you’ve configured as the common name (CN) while creating the certificate. If they don’t match, the VPN connection won’t work. For example, if you set up a certificate with the CN of vpn.example.com , you must use vpn.example.com when you enter the VPN server details. Double-check the command you used to generate the certificate, and the values you used when creating your VPN connection.

Finally, double-check the VPN configuration to ensure the leftid value is configured with the @ symbol if you’re using a domain name:

/etc/ipsec.conf
    leftid=@vpn.example.com

If you’re using an IP address, ensure that the @ symbol is omitted. Also make sure that when you generated the server-cert.pem file that you included both --san @IP_address and --san IP_address flags.

Conclusion

In this tutorial, you’ve built a VPN server that uses the IKEv2 protocol. You learned about the directives that control the left and right sides of a connection on both server and clients. You also configured a Windows, macOS, iOS, Android, or Linux client to connect to the VPN.

To add or remove users, skip to Step 5 again. Each line in /etc/ipsec.secrets is for one user, so adding or removing users, or changing passwords just requires editing the file.

Now you can be assured that your online activities will remain secure wherever you go and with any device that you use to access the internet.


OpenVPN
  1. So richten Sie einen OpenVPN-Server unter Ubuntu 18.04 ein

  2. So richten Sie WireGuard VPN auf Ubuntu ein (eine Schritt-für-Schritt-Anleitung)

  3. So richten Sie eine Zertifizierungsstelle unter Ubuntu 22.04 ein und konfigurieren sie

  4. So richten Sie WireGuard unter Ubuntu 22.04 ein

  5. So richten Sie einen TeamSpeak-Server unter Ubuntu 16.04 ein

Wie richte ich ein Pptp-Vpn auf dem eigenen Ubuntu-Server ein?

So richten Sie die Zeitsynchronisierung mit NTP unter Ubuntu 18.04 ein

So richten Sie einen Seafile-Server mit Nginx unter Ubuntu 18.04 ein

So richten Sie einen FTP-Server mit ProFTPD in Ubuntu 18.04 ein

So richten Sie einen Mailserver mit Modoboa unter Ubuntu 20.04 ein

So richten Sie ein VPN mit OpenVPN unter Ubuntu 18.04 ein und konfigurieren es