Eine frühere Version dieses Tutorials wurde von Justin Ellingwood und Namo verfasst
Ein virtuelles privates Netzwerk oder VPN ermöglicht Ihnen die sichere Verschlüsselung des Datenverkehrs auf dem Weg durch nicht vertrauenswürdige Netzwerke, wie z. B. im Café, bei einer Konferenz oder auf einem Flughafen.
Internet Key Exchange v2 oder IKEv2 ist ein Protokoll, das ein direktes IPSec-Tunneling zwischen Server und Client ermöglicht. In IKEv2-VPN-Implementierungen bietet IPSec eine 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 Client-Hickups werden reibungslos verwaltet.
In diesem Tutorial richten Sie einen IKEv2-VPN-Server mit StrongSwan auf einem Ubuntu-20.04-Server ein. Anschließend lernen Sie, wie mit Windows-, macOS-, Ubuntu-, iOS- und Android-Clients eine Verbindung zu diesem Server herstellen können.
Um diesem Tutorial zu folgen, benötigen Sie:
sudo
-Berechtigungen und einer Firewall.Zuerst installieren wir StrongSwan, einen Open-Source-IPSec-Daemon, den wir als unseren VPN-Server konfigurieren werden. Außerdem installieren wir die Komponente „Public Key Infrastructure“ (PKI), sodass wir eine Zertifizierungsstelle (Certificate Authority, CA) erstellen können, die die Anmeldedaten für unsere Infrastruktur bereitstellt.
Beginnen Sie mit der Aktualisierung des lokalen Paket-Caches:
- sudo apt update
Installieren Sie dann die Software durch folgende Eingabe:
- sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins
Das zusätzliche Paket libcharon-extauth-plugins
wird verwendet, um sicherzustellen, dass verschiedene Clients sich bei Ihrem Server mit einem gemeinsamen Benutzernamen und einer gemeinsamen Passphrase authentifizieren können.
Nachdem nun alles installiert ist, fahren wir mit der Erstellung unserer Zertifikate fort.
Ein IKEv2-Server erfordert ein Zertifikat, um sich gegenüber Clients zu identifizieren. Um bei der Erstellung des erforderlichen Zertifikats zu helfen, enthält das Paket strongswan-pki
ein Dienstprogramm namens pki
zur Generierung einer Zertifizierungsstelle und von Serverzertifikaten.
Zu Beginn erstellen wir einige Verzeichnisse zum Speichern aller Assets, an denen wir arbeiten möchten. Die Verzeichnisstruktur entspricht einigen der Verzeichnisse in /etc/ipsec.d
, wohin wir schließlich alle von uns erstellten Objekte verschieben werden:
- mkdir -p ~/pki/{cacerts,certs,private}
Dann sperren wir die Berechtigungen, sodass unsere privaten Dateien von anderen Benutzern nicht gesehen werden können:
- chmod 700 ~/pki
Nachdem wir nun über eine Verzeichnisstruktur verfügen, um alles zu speichern, können wir einen Stammschlüssel generieren. Dies wird ein 4096-Bit-RSA-Schlüssel sein, der zum Signieren unserer Stammzertifizierungsstelle verwendet wird.
Führen Sie diese Befehle zur Generierung des Schlüssels aus:
- pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
Danach können wir zur Erstellung unserer Stammzertifizierungsstelle übergehen und den gerade generierten Schlüssel zum Signieren des Stammzertifikats verwenden:
- pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
- --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
Das Flag --lifetime 3650
wird verwendet, um sicherzustellen, dass das Stammzertifikat der Zertifizierungsstelle für 10 Jahre gültig ist. Das Stammzertifikat einer Stelle ändert sich in der Regel nicht, da es an alle Server und Clients, die darauf angewiesen sind, neu verteilt werden müsste. 10 Jahre ist als ein sicherer Standardwert für die Gültigkeitsdauer.
Sie können den Wert für den unterscheidenden Namen (Distinguished name, DN) in etwas anderes ändern, wenn Sie möchten. Der gewöhnliche Name (Common Name) (CN-Feld) ist hier nur der Indikator, sodass er mit nichts in Ihrer Infrastruktur übereinstimmen muss.
Nachdem wir nun unsere Stammzertifizierungsstelle eingerichtet haben, können wir ein Zertifikat erstellen, das der VPN-Server verwenden wird.
Wir erstellen nun ein Zertifikat und einen Schlüssel für den VPN-Server. Dieses Zertifikat ermöglicht es dem Client, die Authentifizierung des Servers mit dem gerade generierten CA-Zertifikat zu überprüfen.
Erstellen Sie zunächst einen privaten Schlüssel für den VPN-Server mit dem folgenden Befehl:
- 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, ändern Sie jedoch den Common Name (CN) und das Feld Subject Alternate Name (SAN) in den DNS-Namen oder die IP-Adresse Ihres VPN-Servers:
- pki --pub --in ~/pki/private/server-key.pem --type rsa \
- | pki --issue --lifetime 1825 \
- --cacert ~/pki/cacerts/ca-cert.pem \
- --cakey ~/pki/private/ca-key.pem \
- --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
- --flag serverAuth --flag ikeIntermediate --outform pem \
- > ~/pki/certs/server-cert.pem
Anmerkung: Wenn Sie anstelle eines DNS-Namens eine IP-Adresse verwenden, müssen mehrere --san
Einträge angegeben werden. Die Zeile im vorherigen Befehlsblock, in dem Sie den Distinguished Name (--dn ...
) angeben, muss mit dem zusätzlichen Eintrag wie die folgende Auszugszeile modifiziert werden:
--dn "CN=IP address --san @IP_address --san IP_address \
Der Grund für diesen zusätzlichen Eintrag --san @IP_address
ist, dass einige Clients prüfen, ob das TLS-Zertifikat sowohl über einen DNS-Eintrag als auch einen IP-Adressen-Eintrag für einen Server verfügt, wenn sie seine Identität überprüfen.
Die Option ---flag serverAuth
wird verwendet, um anzugeben, dass das Zertifikat explizit für die Serverauthentifizierung verwendet wird, bevor der verschlüsselte Tunnel hergestellt wird. Die Option --flag ikeIntermediate
wird zur Unterstützung älterere MacOS-Clients verwendet.
Nachdem wir nun alle TLS/SSL-Dateien erzeugt haben, die StrongSwan benötigt, können wir die Dateien in das Verzeichnis /etc/ipsec.d
verschieben, indem wir Folgendes eingeben:
- sudo cp -r ~/pki/* /etc/ipsec.d/
In diesem Schritt haben wir ein Zertifikatpaar erstellt, das zur Sicherung der Kommunikation zwischen dem Client und dem Server verwendet wird. Wir haben die Zertifikate auch mit dem CA-Schlüssel signiert, sodass der Client die Authentifizierung des VPN-Servers mit dem CA-Zertifikat überprüfen kann. Nachdem nun alle diese Zertifikate fertig sind, gehen wir zur Konfiguration der Software über.
StrongSwan hat eine Standardkonfigurationsdatei mit einigen Beispielen, aber wir werden die Konfiguration größtenteils selbst vornehmen müssen. Lassen Sie uns die Datei als Referenz sichern, bevor wir von Grund auf starten:
- sudo mv /etc/ipsec.conf{,.original}
Erstellen und öffnen Sie eine neue leere Konfigurationsdatei mit Ihrem bevorzugten Texteditor. Wir verwenden hier nano
:
- sudo nano /etc/ipsec.conf
Anmerkung: Während Sie diesen Abschnitt zur Konfiguration des Serverteils Ihres VPNs durcharbeiten, werden Sie auf Einstellungen stoßen, die sich auf die linke und die rechte Seite einer Verbindung beziehen. Bei der Arbeit mit IPSec bezieht sich die linke Seite per Konvention auf das lokale System, das Sie konfigurieren, in diesem Fall den Server. Die Anweisungen der rechten Seite in diesen Einstellungen beziehen sich auf entfernte Clients wie Telefone und andere Computer.
Wenn Sie später in diesem Tutorial mit der Konfiguration von Clients fortfahren, beziehen sich die Client-Konfigurationsdateien mit verschiedenen linken Anweisungen auf sich selbst, und der Server wird mit der Terminologie der rechten Seite bezeichnet.
Zuerst weisen wir StrongSwan an, den Daemon-Status zur Fehlersuche zu protokollieren und doppelte Verbindungen zulassen. Fügen Sie der Datei diese Zeilen hinzu:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
Dann erstellen wir einen Konfigurationsabschnitt für unser VPN. Außerdem weisen wir StrongSwan an, IKEv2 VPN-Tunnel zu erstellen und diesen Konfigurationsabschnitt automatisch beim Starten zu laden. Fügen Sie der Datei folgende Zeilen an:
. . .
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
Wir konfigurieren ebenfalls die Dead-Peer-Erkennung, um alle „unreferenzierten“ Verbindungen zu löschen, falls der Client die Verbindung unerwartet trennt. Fügen Sie diese Zeilen hinzu:
. . .
conn ikev2-vpn
. . .
dpdaction=clear
dpddelay=300s
rekey=no
Als Nächstes konfigurieren wir die IPSec-Parameter der „linken“ Seite des Servers. Jede der folgenden Parameter stellt sicher, dass der Server für die Annahme von Verbindungen von Clients und für seine korrekte Identifizierung konfiguriert ist. Sie fügen jede dieser Einstellungen der Datei /etc/ipsec.conf
hinzu, sobald Sie sich damit vertraut gemacht haben, was sie sind und warum sie verwendet werden:
left =%any
Der Wert %any
stellt sicher, dass der Server die Netzwerkschnittstelle, an der er eingehende Verbindungen empfängt, für die nachfolgende Kommunikation mit Clients verwendet. 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 den Datenverkehr empfängt.leftid=@server_domain_or_IP
Diese Option steuert den Namen, den der Server den Clients präsentiert. In Kombination mit der nächsten Option leftcert
, stellt die Option leftid
sicher, dass der konfigurierte Name des Servers und der im öffentlichen Zertifikat enthaltene Dinstinguished Name (DN) ü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 ihn kann sich der Server nicht bei Clients authentifizieren und die Aushandlung der IKEv2-Einrichtung nicht beenden.leftsendcert=always
Der Wert
always 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 Option der „linken“ Seite, die Sie hinzufügen werden, informiert Clients über die Subnetze, die hinter dem Server erreichbar sind. In diesem Fall wird 0.0.0.0/0
verwendet, um den gesamten Satz der IPv4-Adressen zu repräsentieren, was bedeutet, dass der Server Clients standardmäßig anweist, ihren gesamten Datenverkehr über das VPN zu senden.Nachdem Sie nun mit jeder der entsprechenden Optionen der „linken“ Seite vertraut sind, fügen Sie sie alle wie folgt zur Datei hinzu:
. . .
conn ikev2-vpn
. . .
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
Anmerkung: Geben Sie bei der Konfiguration der Server-ID (leftid
) das @
-Zeichen nur dann an, wenn Ihr VPN-Server durch einen Domänennamen identifiziert werden soll:
. . . leftid=@vpn.example.com
. . .
Wenn der Server durch seine IP-Adresse identifiziert werden soll, geben Sie einfach die IP-Adresse ein:
. . .
leftid=your_server_ip
. . .
Als Nächstes können wir die IPSec-Parameter der „rechten“ Seite des Clients konfigurieren. Jede der folgenden Parameter teilt dem Server mit, wie Verbindungen von Clients akzeptiert werden sollen, wie sich Clients beim Server authentifizieren sollen und welche privaten IP-Adressbereiche und DNS-Server diese Clients verwenden werden. Fügen Sie jede dieser Einstellungen der Datei /etc/ipsec.conf
hinzu, sobald Sie sich damit vertraut gemacht haben, was sie sind und warum sie verwendet werden:
right=%any
Die Option %any
für die rechte
Seite der Verbindung weist den Server an, eingehende Verbindungen von jedem Remote-Client anzunehmen.rightid=%any
Diese Option stellt sicher, dass der Server keine Verbindungen von Clients ablehnt, die eine Identität angeben, bevor der verschlüsselte Tunnel hergestellt ist.rightauth=eap-mschapv2
Diese Option konfiguriert die Authentifizierungsmethode, die Clients zur Authentifizierung gegenüber dem Server verwenden werden. eap-mschapv2
wird hier für eine breite 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 private IP-Adressen aus dem angegebenen IP-Pool 10.10.10.0/24
zuzuweisen.rightdns=8.8.8.8,8.8.4.4
Diese IP-Adressen sind die öffentlichen DNS-Auflöser von Google. Sie können geändert werden, um andere öffentliche Auflöser, die Auflösung des VPN-Servers oder einen anderen Auflöser zu verwenden, den die Clients erreichen können.rightsendcert=never
Diese Option weist den Server an, dass Clients kein Zertifikat senden müssen, um sich selbst zu authentifizieren.Nachdem Sie nun mit den erforderlichen Optionen der „rechten“ Seite vertraut sind, fügen Sie die folgenden Zeilen in /etc/ipsec.conf
ein:
. . .
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
Nun werden wir StrongSwan anweisen, den Client beim Verbindungsaufbau nach den Anmeldedaten der Benutzer zu fragen:
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
Zum Schluss fügen Sie 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 den verschiedenen Clients zur Verfügung stellt:
. . .
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 Cipher Suite wird durch ein Komma von den anderen abgegrenzt. Beispielsweise ist chacha20poly1305-sha512-curve25519-prfsha512
eine Suite, und aes256gcm16-sha384-prfsha384-ecp384
ist eine andere. Die hier aufgelisteten Cipher Suits sind so ausgewählt, dass sie die größtmögliche Kompatibilität zwischen Windows-, macOS-, iOS-, Android- und Linux-Clients gewährleisten.
Die vollständige Konfigurationsdatei sollte wie folgt aussehen:
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, nachdem Sie überprüft haben, dass Sie jede Zeile korrekt hinzugefügt haben. Wenn Sie nano
verwendet haben, drücken Sie STRG+X
, Y
, dann die EINGABETASTE
.
Nachdem wir nun die VPN-Parameter konfiguriert haben, gehen wir zur Erstellung eines Kontos über, damit unsere Benutzer eine Verbindung zum Server herstellen können.
Unser VPN-Server ist nun so konfiguriert, dass er Client-Verbindungen akzeptiert, aber wir haben noch keine Anmeldedaten konfiguriert. Wir müssen einige Dinge in einer speziellen Konfigurationsdatei namens ipsec.secrets
konfigurieren:
Öffnen wie die Datei „Secrets“ zum Bearbeiten:
- sudo nano /etc/ipsec.secrets
Zuerst teilen wir StrongSwan mit, wo unser privater Schlüssel zu finden ist:
: RSA "server-key.pem"
Dann definieren wir die Anmeldedaten des Benutzers. Sie können jede beliebige Kombination von Benutzername und Passwort zusammenstellen, die Ihnen gefällt:
your_username : EAP "your_password"
Speichern und schließen Sie die Datei. Nachdem wir die Arbeit mit den VPN-Parametern beendet haben, starten wir den VPN-Dienst neu, damit unsere Konfiguration übernommen wird:
- sudo systemctl restart strongswan-starter
Nachdem der VPN-Server nun sowohl mit den Serveroptionen als auch mit den Anmeldedaten der Benutzer vollständig konfiguriert ist, ist es an der Zeit, mit der Konfiguration des wichtigsten Teils fortzufahren: der Firewall.
Nachdem die Konfiguration von StrongSwan abgeschlossen ist, müssen wir die Firewall so konfigurieren, dass sie VPN-Verkehr durchlässt und weiterleitet.
Wenn Sie dem Tutorial zur Ersteinrichtung des Servers gefolgt sind, sollten Sie eine UFW-Firewall aktiviert haben. Wenn Sie UFW noch nicht konfiguriert haben, sollten Sie zunächst mit dem Hinzufügen einer Regel beginnen, um SSH-Verbindungen durch die Firewall zuzulassen, damit Ihre aktuelle nicht geschlossen wird, wenn Sie UFW aktivieren:
- sudo ufw allow OpenSSH
Aktivieren Sie dann die Firewall durch folgende Eingabe:
- sudo ufw enable
Fügen Sie dann eine Regel hinzu, um den UDP-Verkehr zu den IPSec-Standardports 500
und 4500
zulassen:
- sudo ufw allow 500,4500/udp
Als Nächstes öffnen wir eine der Konfigurationsdateien von UFW, um einige niedrigstufige Richtlinien für das Routing und die Weiterleitung von IPSec-Paketen hinzuzufügen. Zuvor müssen wir jedoch herausfinden, welche Netzwerkschnittstelle auf unserem Server für den Internetzugang verwendet wird. Finden Sie diese Schnittstelle, indem Sie das mit der Standardroute verknüpfte Gerät abfragen:
- ip route show default
Ihre öffentliche Schnittstelle sollte dem Wort „dev“ folgen. Dieses Ergebnis zeigt beispielsweise die im folgenden Beispiel hervorgehobene Schnittstelle eth0
an:
Outputdefault via your_server_ip dev eth0 proto static
Wenn Sie Ihre öffentliche Netzwerkschnittstelle haben, öffnen Sie die Datei /etc/ufw/before.rules
in Ihrem Texteditor. Die Regeln in dieser Datei werden der Firewall vor den übrigen üblichen Eingabe- und Ausgaberegeln hinzugefügt. Sie werden verwendet, um die Netzwerkadressübersetzung (Network Address Translation, NAT) zu konfigurieren, damit der Server Verbindungen zu und von Clients und dem Internet korrekt weiterleiten kann.
- sudo nano /etc/ufw/before.rules
Fügen Sie am Anfang der Datei (vor der Zeile *filter
) den folgenden Konfigurationsblock hinzu. Ändern Sie jede Instanz von eth0
in der obigen Konfiguration so, dass sie mit dem Schnittstellennamen übereinstimmt, den Sie mit ip route
gefunden haben. Die Zeilen *nat
erstellen Regeln, damit die Firewall den Datenverkehr zwischen den VPN-Clients und dem Internet korrekt weiterleiten und manipulieren kann. Die Zeile *mangle
passt die maximale Paketsegmentgröße an, um potenzielle Probleme mit bestimmten VPN-Clients zu verhindern:
*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]
. . .
Fügen Sie als Nächstes nach den Zeilen *filter
und Kettendefinitionen einen weiteren Konfigurationsblock hinzu:
. . .
*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-Datenverkehr) weiterzuleiten, sodass die VPN-Clients eine Verbindung herstellen können. ESP bietet für unsere VPN-Pakete zusätzliche Sicherheit, da sie nicht vertrauenswürdige Netzwerke durchqueren.
Wenn Sie fertig sind, speichern und schließen Sie die Datei, nachdem Sie überprüft haben, dass Sie jede Zeile korrekt hinzugefügt haben. Wenn Sie nano
verwendet haben, drücken Sie STRG+X
, Y
, dann die EINGABETASTE
.
Vor dem Neustart der Firewall werden wir einige Netzwerk-Kernel-Parameter ändern, um die Weiterleitung von einer Schnittstelle zu einer anderen zu ermöglichen. Die Datei, die diese Einstellungen steuert, heißt /etc/ufw/sysctl.conf
. In dieser Datei müssen wir einige Dinge konfigurieren.
Zuerst muss die IPv4-Paketweiterleitung eingeschaltet werden, damit der Datenverkehr zwischen dem VPN und den öffentlich zugänglichen Netzwerkschnittstellen auf dem Server ausgetauscht werden kann. Als Nächstes deaktivieren wir die Path-MTU-Erkennung, um Probleme mit der Paketfragmentierung zu verhindern. Abschließend werden wir weder ICMP-Weiterleitungen akzeptieren noch ICMP-Weierleitungen senden, um Man-in-the-Middle-Angriffe zu verhindern.
Öffnen Sie die Konfigurationsdatei der UFW-Kernel-Parameter in nano
oder Ihrem bevorzugten Texteditor:
- sudo nano /etc/ufw/sysctl.conf
Fügen Sie nun am Ende der Datei die folgende Einstellung net/ipv4/ip_forward=1
hinzu, um die Weiterleitung von Paketen zwischen Schnittstellen zu ermöglichen:
. . .
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:
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
Deaktivieren Sie abschließend die Path-MTU-Erkennung, indem Sie diese Zeile am Ende der Datei hinzufügen:
. . .
net/ipv4/ip_no_pmtu_disc=1
Speichern Sie die Datei, wenn Sie fertig sind. Jetzt können wir alle unsere Änderungen durch Deaktivieren und erneutes Aktivieren der Firewall aktivieren, da UFW diese Einstellungen bei jedem Neustart anwendet:
- sudo ufw disable
- sudo ufw enable
Sie werden dazu aufgefordert, den Vorgang zu bestätigen. Geben Sie Y
ein, um UFW mit den neuen Einstellungen erneut zu aktivieren.
Nachdem nun alles eingerichtet ist, ist es Zeit, es auszuprobieren. Zuerst müssen Sie das von Ihnen erstellte CA-Zertifikat kopieren und auf Ihrem/Ihren Client-Gerät(en) installieren, das/die sich mit Ihrem Server verbindet/verbinden. Am einfachsten geht das, indem Sie sich bei Ihrem Server anmelden und den Inhalt der Zertifikatsdatei ausgeben:
- cat /etc/ipsec.d/cacerts/ca-cert.pem
Sie sehen eine Ausgabe, die dieser ähnelt:
Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----
Kopieren Sie diese Ausgabe auf Ihren Computer, einschließlich der Zeilen --BEGIN CERTIFICATE----
und --END CERTIFICATE--
, und speichern Sie sie in einer Datei mit einem erkennbaren Namen wie ca-cert.pem
. Stellen Sie sicher, dass die von Ihnen erstellte Datei die Erweiterung .pem
hat.
Alternativ können Sie SFTP verwenden, um die Datei auf Ihren Computer zu übertragen.
Sobald die Datei ca-cert.pem
auf Ihren Computer heruntergeladen haben, können Sie die Verbindung zum VPN einrichten.
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 Tools für jeden Schritt. Die zweite Methode verwendet PowerShell-Befehle, die in Skripts geschrieben und an Ihre VPN-Konfiguration angepasst werden können.
Anmerkung: Diese Anweisungen wurden in Windows 10-Installationen getestet, die die Versionen 1903 und 1909 ausführen.
Importieren Sie zunächst das Stammzertifikat, indem Sie die folgenden Schritte ausführen:
Drücken Sie WINDOWS+R
, um das Dialogfeld Ausführen aufzurufen, und geben Sie mmc.exe
zum Starten der Windows Managementkonsole ein.
Navigieren Sie im Menü Datei zu Snap-In hinzufügen oder entfernen, wählen Sie aus der Liste der verfügbaren Snap-Ins Zertifikate aus und klicken Sie auf Hinzufügen.
Wir wollen, dass das VPN mit jedem Benutzer funktioniert, daher wählen wir Computerkonto und klicken auf Weiter.
Wir konfigurieren Dinge auf dem lokalen Computer, daher wählen wir Lokaler Computer und klicken auf Fertigstellen.
Erweitern Sie unter dem Knoten Konsolenstamm den Eintrag Zertifikate (Lokaler Computer), erweitern Sie Vertrauenswürdige Stammzertifizierungsstellen und wählen Sie dann den Eintrag** Zertifikate**: icht.
Wählen Sie im Menü Aktion Alle Aufgaben aus und klicken Sie auf Improtieren, um den Assistenten für den Zertifikatimport anzuzeigen. Klicken Sie auf Weiter, um die Einführung zu überspringen.
Klicken Sie auf dem Bildschirm Zu importierende Datei die Schaltfläche Durchsuchen, stellen Sie sicher, dass Sie den Dateityp von „X.509-Zertifikat (.cer;.crt)“ in „Alle Dateien (.)“ ändern und wählen Sie die Datei ca-cert.pem
, die Sie gespeichert haben. Klicken Sie dann auf Weiter.
Stellen Sie sicher, dass der Zertifikatspeicher auf Vertrauenswürdige Stammzertifizierungsstellen eingestellt ist und klicken Sie auf Weiter.
Klicken Sie auf Fertigstellen, um das Zertifikat zu importieren.
Konfigurieren Sie das VPN dann mit diesen Schritten:
Um das Stamm-CA-Zertifikat mit PowerShell zu importieren, öffnen Sie zunächst eine PowerShell-Eingabeaufforderung mit Administratorberechtigungen. Klicken Sie dazu mit der rechten Maustaste auf das Symbol im Startmenü und wählen Sie Windows PowerShell (Admin)
. Sie können auch eine Eingabeaufforderung als Administrator öffnen und powershell
eingeben.
Als Nächstes importieren wir das Zertifikat mit dem Powershell cmdlet Import-Certificate
. Im folgenden Befehl wird mit dem ersten Argument -CertStoreLocation
sichergestellt, dass das Zertifikat in dem Speicher der Vertrauenswürdigen Stammzertifizierungsstelle des Computers importiert wird, damit alle Programme und Benutzer das Zertifikat des VPN-Servers überprüfen können. Das Argument -FilePath
sollte auf den Speicherort verweisen, in 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.
- Import-Certificate `
- -CertStoreLocation cert:\LocalMachine\Root\ `
- -FilePath C:\users\sammy\Documents\ca-cert.pem
Der Befehl gibt etwas wie das Folgende aus:
Output PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint Subject
---------- -------
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Um nun das VPN mit PowerShell zu konfigurieren, führen Sie den folgenden Befehl aus. Ersetzen Sie den DNS-Namen oder die IP-Adresse Ihres Servers in der Zeile -Serveraddress
. Die verschiedenen Flags stellen sicher, dass Windows korrekt mit den entsprechenden Sicherheitsparametern konfiguriert wird, die den Optionen entsprechen, die Sie in /etc/ipsec.conf
festgelegt haben.
- Add-VpnConnection -Name "VPN Connection" `
- -ServerAddress "server_domain_or_IP" `
- -TunnelType "IKEv2" `
- -AuthenticationMethod "EAP" `
- -EncryptionLevel "Maximum" `
- -RememberCredential `
Wenn der Befehl erfolgreich ist, gibt es keine Ausgabe. Um zu bestätigen, dass das VPN richtig konfiguriert ist, verwenden Sie das cmdlet Get-VPNConnection
:
- 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
Standardmäßig wählt Windows ältere und langsamere Algorithmen. Führen Sie das cmdlet Set-VpnConnectionIPsecConfiguration
aus, um die Verschlüsselungsparameter zu aktualisieren, die Windows für den IKEv2-Schlüsselaustausch verwendet und um Pakete zu verschlüsseln:
- Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
- -AuthenticationTransformConstants GCMAES256 `
- -CipherTransformConstants GCMAES256 `
- -DHGroup ECP384 `
- -IntegrityCheckMethod SHA384 `
- -PfsGroup ECP384 `
- -EncryptionMethod GCMAES256
Anmerkung: Wenn Sie die VPN-Verbindung löschen und mit verschiedenen Optionen neu konfigurieren möchten, können Sie das cmdlet Remove-VpnConnection
ausführen.
- Remove-VpnConnection -Name "VPN Connection" -Force
Das Flag -Force
wird übersprungen und Sie werden aufgefordert, das Entfernen zu bestätigen. Wenn Sie versuchen, die VPN-Verbindung mit diesem Befehl zu entfernen, müssen Sie vom VPN getrennt sein.
Sobald Sie das Zertifikat importiert und das VPN mit einer der beiden Methoden konfiguriert haben, wird Ihre neue VPN-Verbindung unter der Liste der Netzwerke sichtbar. Wählen Sie das VPN und klicken Sie auf Verbinden. Sie werden zur Eingabe Ihres Benutzernamens und Ihres Passworts aufgefordert. Geben Sie sie ein, klicken Sie auf OK, und Sie werden verbunden.
Folgen Sie diesen Schritten, um das Zertifikat zu importieren:
Nachdem das Zertifikat importiert und vertrauenswürdig ist, konfigurieren Sie die VPN-Verbindung nun mit diesen Schritten:
Klicken Sie abschließend auf Verbinden, um sich mit dem VPN zu verbinden. Sie sollten nun mit dem VPN verbunden sein.
Um eine Verbindung von einem Ubuntu-Rechner herzustellen, können Sie StrongSwan als Dienst einrichten und verwalten oder bei jeder gewünschten Verbindung einen einmaligen Befehl verwenden. Für beides stehen Anweisungen zur Verfügung.
Um StrongSwan als Dienst zu verwalten, müssen Sie die folgenden Konfigurationsschritte durchführen.
Aktualisieren Sie zunächst Ihren lokalen Paket-Cache mit apt
- sudo apt update
Installieren Sie als Nächstes StrongSwan und die erforderlichen Plugins für die Authentifizierung:
- sudo apt install strongswan libcharon-extra-plugins
Jetzt benötigen Sie im Verzeichnis /etc/ipsec.d/cacerts
eine Kopie des CA-Zertifikats, damit Ihr Client die Identität des Servers überprüfen kann. Führen Sie den folgenden Befehl aus, um die Datei ca-cert.pem
in den richtigen Speicherort zu kopieren:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
Um sicherzustellen, dass das VPN nur bei Bedarf ausgeführt wird, deaktivieren Sie mit systemctl
die automatische Ausführung von StrongSwan:
- sudo systemctl disable --now strongswan-starter
Konfigurieren Sie als Nächstes den Benutzernamen und das Passwort, das Sie zur Authentifizierung auf dem VPN-Server verwenden werden. Bearbeiten Sie /etc/ipsec.secrets
mit nano oder Ihrem bevorzugten Editor:
- sudo nano /etc/ipsec.conf
Fügen Sie die folgende Zeile hinzu und bearbeiten Sie die hervorgehobenen Werte für Benutzername und Passwort, damit sie mit denen übereinstimmen, die Sie auf dem Server konfiguriert haben:
your_username : EAP "your_password"
Bearbeiten Sie abschließend die Datei /etc/ipsec.conf
, um Ihren Client so zu konfigurieren, dass er mit der Konfiguration des Servers übereinstimmt:
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
Um sich mit dem VPN zu verbinden, geben Sie Folgendes ein:
- sudo systemctl start strongswan-starter
Um sich wieder zu trennen, geben Sie Folgendes ein:
- sudo systemctl stop strongswan-starter
charon-cmd
für einmalige VerbindungenUm StrongSwan als Dienst zu verwalten, müssen Sie die folgenden Konfigurationsschritte durchführen.
Aktualisieren Sie zunächst Ihren lokalen Paket-Cache mit apt
- sudo apt update
Installieren Sie als Nächstes StrongSwan und die erforderlichen Plugins für die Authentifizierung:
- sudo apt install strongswan libcharon-extra-plugins
Jetzt benötigen Sie im Verzeichnis /etc/ipsec.d/cacerts
eine Kopie des CA-Zertifikats, damit Ihr Client die Identität des Servers überprüfen kann. Führen Sie den folgenden Befehl aus, um die Datei ca-cert.pem
in den richtigen Speicherort zu kopieren:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
Zu diesem Zeitpunkt können Sie sich mit charon-cmd
unter Verwendung des CA-Zertifikats des Servers, der IP-Adresse des VPN-Servers und des von Ihnen konfigurierten Benutzernamens mit dem VPN-Server verbinden.
Führen Sie den folgenden Befehl aus, wann immer Sie eine Verbindung mit dem VPN herstellen möchten:
- sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
Geben Sie, wenn Sie dazu aufgefordert werden, das Passwort des VPN-Benutzers ein und Sie werden mit dem VPN verbunden. Um die Verbindung zu trennen, drücken Sie im Terminal Strg+C
und warten Sie, bis die Verbindung geschlossen wird.
Führen Sie die folgenden Schritte aus, um die VPN-Verbindung auf einem iOS-Gerät zu konfigurieren:
Folgen Sie diesen Schritten, um das Zertifikat zu importieren:
Nachdem das Zertifikat nun in die StrongSwan-Anwendung importiert wurde, können Sie die VPN-Verbindung mit diesen Schritten konfigurieren:
Wenn Sie eine Verbindung mit dem VPN herstellen möchten, klicken Sie auf das Profil, das Sie gerade in der Anwendung StrongSwan erstellt haben.
Wenn Sie das Zertifikat nicht importieren können, stellen Sie sicher, dass die Datei die Erweiterung .pem
und nicht .pem.txt
hat.
Wenn Sie keine Verbindung mit dem VPN herstellen können, überprüfen Sie den von Ihnen verwendeten Servernamen oder die IP-Adresse. Der Domänenname oder die IP-Adresse des Servers muss mit dem übereinstimmen, was Sie bei der Erstellung des Zertifikats als Common Name (CN) konfiguriert haben. Wenn sie nicht übereinstimmen, funktioniert die VPN-Verbindung nicht. Wenn Sie beispielsweise ein Zertifikat mit dem CN von vpn.example.com
einrichten, müssen Sie vpn.example.com
verwenden, wenn Sie die VPN-Serverdetails eingeben. Überprüfen Sie den Befehl, den Sie zum Generieren des Zertifikats verwendet haben, und die Werte, die Sie bei der Erstellung Ihrer VPN-Verbindung verwendet haben.
Abschließend überprüfen Sie die VPN-Konfiguration, um sicherzustellen, dass der Wert leftid
mit dem Symbol @
konfiguriert ist, wenn Sie einen Domänennamen verwenden:
leftid=@vpn.example.com
Wenn Sie eine IP-Adresse verwenden, stellen Sie sicher, dass das Symbol @
ausgelassen ist. Stellen Sie außerdem sicher, dass Sie beim Generieren der Datei server-cert.pem
die beiden Flags --san @IP_address
und --san IP_address
eingefügt haben.
In diesem Tutorial haben Sie einen VPN-Server erstellt, der das IKEv2-Protokoll verwendet. Sie haben sich mit den Anweisungen vertraut gemacht, die die linke
und die rechte
Seite einer Verbindung sowohl auf dem Server als auch auf den Clients steuern. Außerdem haben Sie einen Windows-, macOS-, iOS-, Android- oder Linux-Client für die Verbindung mit dem VPN konfiguriert.
Um Benutzer hinzuzufügen oder zu entfernen, führen Sie erneut Schritt 5 aus. Jede Zeile in /etc/ipsec.secrets
ist für einen Benutzer, sodass das Hinzufügen oder Entfernen von Benutzern oder das Ändern von Passwörtern nur die Bearbeitung der Datei erfordert.
Jetzt können Sie sicher sein, dass Ihre Online-Aktivitäten überall und mit jedem Gerät, das Sie für den Zugang zum Internet benutzen, geschützt bleiben.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!