01/2018

VPN mit Wireguard aufsetzen Titelthema Bohrende Fragen Wireguard

38 Wer ein einrichten möchte, kämpft oftmals mit einer nicht ganz simplen Konfiguration.

Wireguard verspricht, dass der Tunnelbau auch einfacher und flinker gelingen kann. Falko Benthin www.-magazin.de

Quelltext und setzt auf starke Verschlüs- selungsalgorithmen, wofür Donenfeld Trevor Perrins Noise Protocol Framework [9] ins Boot nimmt. Für Zertifikate setzt das Wireguard-Protokoll auf Ed25519, für den Schlüsselaustausch auf Curve25519 (ECDHE) und für den Datentransport auf Chacha20-poly1305. Wireguard unterstützt allerdings nur eine kryptografische Suite, die sich je- doch bei Problemen ohne Weiteres aus- tauschen lässt. Anwender müssen ihre Verschlüsselungs-Suite also nicht mehr aus verschiedenen Chiffren selbst zusam- menbasteln. Das reduziert die Komple- xität und vermindert das Risiko von Si- cherheitslücken. Wireguard arbeitet aus

© Péter Gudella, 123RF © Péter Sicht des Administrators zustandslos und bringt einen integrierten Schutz gegen VPNs (Virtual Private Networks) gelten In freien Wildbahn treffen Admins - Denial-of-Service-Attacken mit. als sichere Nummer, wenn es darum guard bislang noch eher selten an. Das geht, das Home Office mit dem Firmen- dürfte vor allem daran liegen, dass das Installation und netz, Firmensitze mit der Zentrale oder Projekt noch nicht im offiziellen Linux- Inbetriebnahme Geschäftsreisende mit ihrer Kundenda- Kernel steckt und aktuell nur für Linux tenbank zu verbinden. Privatnutzer ver- und OS X verfügbar ist. Daneben feh- Die Repositories zahlreicher Distributio- wenden VPNs, um beispielsweise sicher len Sicherheits-Audits und das Protokoll nen bieten Wireguard bereits an, sodass über das Internet auf die heimische Wet- kann sich noch ändern. Experimentierfreudige es leicht mit Hilfe terstation mit angeschlossenem Daten- Trotzdem haben es manche VPN-Provi- der entsprechenden Paketverwaltung in- bankserver zuzugreifen. der wie Azirevpn [7] oder Mullvad [8] stallieren. Auf der Webseite des Projekts Unter Linux gibt es mehrere Lösungen für bereits in ihr Portfolio integriert. Entwick- finden sich diverse Installationsanleitun- Virtual Private Networks. Zu den populä- ler Donenfeld zeigt sich zudem optimis- gen [10]. Debianer brauchen lediglich ren Vertretern zählen Open VPN [1] und tisch, dass Wireguard in der ersten Hälfte das Unstable-Repository (Listing 1). solche, die auf dem IPsec-Protokoll [2] des kommenden Jahres im Mainline-Ker- Anwender, die stets den neuesten Code aufbauen, wozu etwa Libre Swan [3], nel landen wird. wünschen, übersetzen das Kernelmodul Open Swan [4] und Strong Swan [5] und die Wireguard-Tools einfach hän- gehören. Seit etwas mehr als einem Jahr Schlüsselfrage disch. Eventuell sind in beiden Fällen wird mit Wireguard [6] an einer dritten noch die entsprechenden Kernelheader VPN-Lösung gefeilt, die der Artikel näher Wireguard arbeitet ausschließlich auf der erforderlich. in Augenschein nimmt. Schicht 3 des OSI-Modells (IPv4, IPv6, Ist die Installation geglückt und hat An Wireguard (Fast and Secure Kernel- IPv4-over-IPv6 und IPv6-over-IPv4). Es der Kernel das frisch übersetzte Kernel­ space VPN) arbeitet seit 2015 der Sicher- gilt als weniger kompliziert als der VPN- modul geladen, legt der Admin mit den heits-Forscher und ‑Consultant Jason Do- Platzhirsch IPsec und zeigt sich perfor- »iproute2«-Werkzeugen ein virtuelles nenfeld mit seiner Firma Edge Security. manter als Open VPN. Die VPN-Software Wireguard-Interface­ an und bestückt es Er hat es unter der GPLv2 veröffentlicht. besteht aus weniger als 4000 Zeilen mit einer IP-Adresse. Im nächsten Schritt 01/2018 Titelthema erzeugt das Wireguard-Kommandozeilen- anlegt. Im obigen werkzeug die für die Authentifizierung Fall in Listing 2 nötigen Schlüssel und bindet den priva- betrifft dies das ten an die Netzwerkschnittstelle. gesamte Netz

Bei den Schlüsseln handelt es sich um die »192.168.10.0/24«. Wireguard schon erwähnten Curve25519-Keys. Sie Die Angabe der sind 32 Byte lang, allerdings als Base64 Endpunkte ist op- kodiert und entsprechend größer. Hat tional. Ohne End- 39 der Admin das Interface mit »ip link set punkt fügt Wire­ wg0 up« aktiviert, macht er den Rechner guard automatisch mit seinen zum VPN gehörigen Peers be- die externe IP und

kannt. Beispielhaft für zwei Server (»gra- den UDP-Port des www.linux-magazin.de sovka« und »zubrowka«) zeigt Listing 2 Peers hinzu, der Abbildung 1: Wer »wg« ohne weitere Optionen aufruft, sieht, wie es um die Tun­ das Verfahren. sich erfolgreich nel steht. Die Attribute lassen sich bei Bedarf filtern und farblich anpassen. Zu jedem Peer gehören dessen öffent- authentifiziert. licher Schlüssel, den Wireguard über Der Datentransfer zwischen zwei Wire­ aktualisiert sie den Endpunkt und UDP- »wg pubkey < Private.key« vom priva- guard-Peers funktioniert so: Ein Peer Port der Gegenseite und entschlüsselt das ten Schlüssel ableitet und ausgibt, so- schickt ein Paket im Klartext an die Wire­ Paket. Dann untersucht sie, ob es sich um wie eine Reihe von IP-Adressen. Beide guard-Schnittstelle. Die prüft, ob es für ein IP-Paket handelt und die Quell-IP in kommen für das Kryptokey-Routing zum die Ziel-IP einen Public Key gibt. Falls der Kryptokey-Routingtabelle auftaucht. Einsatz. Will ein Client eine Verbindung nicht, löscht sie das Paket und gibt ein Trifft beides zu, schiebt sie das Klartext- über das Wireguard-Interface aufbauen, ICMP-Type3-Paket („No route to host“) paket in die Empfangsqueue der »wg«- identifiziert ihn die Zielschnittstelle an- und ein »‑ENOKEY« (kein Schlüssel ge- Schnittstelle. Fällt die Prüfung negativ hand seines öffentlichen Schlüssels und funden) zurück. Andernfalls verschlüs- aus, verwirft sie es. prüft, ob die zugehörige IP-Adresse in selt Wireguard das Paket per Chacha20- Funktioniert der Pakettransfer innerhalb der Kryptokey-Routingtabelle auffindbar poly1305 mit einem symmetrischen des VPN zufriedenstellend, möchte der ist. Ist dies nicht der Fall, verwirft Wire- Schlüssel und einem Nachrichtenzähler gewöhnliche Nutzer das Setup vielleicht, guard die Pakete. Anderenfalls handeln (zum Schutz gegen Replay-Angriffe), be- beide Seiten Sessionkeys aus, die jeweils stückt es mit einem Header und überträgt Listing 1: Wireguard installieren für zwei Minuten gültig sind, und der es via UDP an die Zieladresse. 01 # als root Datenaustausch kann beginnen. Die Gegenseite lauscht am vorgegebenen 02 echo "deb http://deb.debian.org/debian/ unstable UDP-Port und identifiziert bei empfan- main" > /etc/apt/sources.list.d/unstable‑. Peersönlich genen Paketen anhand des Headers den list sendenden Peer. Sie prüft, ob der Nach- 03 printf 'Package: *\nPin: release a=unstable\n Mittels »wg« holen sich Anwender Infor- richtenzähler gültig ist, und versucht die Pin‑Priority: 150\n' > /etc/apt/preferences.d/ mationen auf den Schirm. Sie erfahren gesicherte Sitzung zu authentifizieren limit‑unstable etwa, wie ein Interface konfiguriert ist und zu entschlüsseln. Schlägt das fehl, 04 apt‑get update 05 apt‑get install wireguard‑dkms wireguard‑tools und wie viel Traffic Peers ausgetauscht löscht sie die Pakete. Ist alles in Ordnung, haben (Abbildung 1). Die Informations- flut lässt sich mit »wg show Interface [At- Listing 2: VPN mit Peers verknüpfen tributes]« auch auf bestimmte Schnittstel- 01 # Als root 15 sysctl ‑w net.ipv4.ip_forward=1 len und Attribute beschränken, was die 02 # Auf grasovka, mit wg für Wireguard 16 iptables ‑t nat ‑A POSTROUTING ‑o eth0 ‑j

Sache bei mehreren Wireguard-Tunneln 03 wg genkey > wgprivate_grasovka.key MASQUERADE

übersichtlicher gestaltet. 04 chmod 700 wgprivate_grasovka.key 17  05 # Public Key anzeigen Der Peer-Eintrag für den Host Grasovka 18 # auf Zubrowka enthält die zusätzliche Option »per- 06 wg pubkey < wgprivate_grasovka.key 19 wg genkey > wgprivate_zubrowka.key sistent‑keepalive 25«. Bei dem Server 07  20 chmod 700 wgprivate_zubrowka.key handelt es sich um ein VPN-Gateway, 08 ip link add dev wg0 type Wireguard 21 wg pubkey < wgprivate_zubrowka.key das hinter einem Router hängt und den 09 ip address add dev wg0 192.168.222.1/24 dev wg0 22  Zugriff auf das heimische Netzwerk er- 10 wg set wg0 private‑key ./wgprivate_grasovka.key 23 ip link add dev wg0 type Wireguard laubt. So lassen sich aus der Ferne Dru- 11 ip link set wg0 up 24 ip address add dev wg0 192.168.222.2/24 dev wg0 cker ansteuern oder die abgeschotteten 12 # Peer definieren 25 wg set wg0 private‑key ./wgprivate_zubrowka.key Smarthome-Geräte bedienen. Das setzt 13 wg set wg0 peer 26 ip link set wg0 up aktiviertes IP-Forwarding voraus. fAoJ02w4ravlkLbcaiIl8bbQ6svlAZXJ3mUO3XR4u0g= 27 wg set wg0 peer OUFbJXQMARaZQVfaIzpIfMcfib/ Die Seite des Servers Zubrowka benö- allowed‑ips 192.168.222.2/32 endpoint 188.xxx.xx.xx:36448 persistent‑keepalive 25 uZduyxePr8WAnSWE= allowed‑ips 192.168.222.1/32, tigt zusätzlich die IP-Adressen im Peer- 14 # IP‑Forwarding aktivieren 192.168.10.0/24 endpoint 91.7.52.20:46602 Eintrag, damit Wireguard die Route 01/2018 Titelthema Nach der Konfigu- Mit nur knapp 4000 Zeilen Quelltext prüft rationsdatei sucht und ändert ein Admin den Wireguard- »wg‑quick« stan­ Code deutlich einfacher, als es Open VPN dardmäßig in dem ermöglicht, dessen Quelltext laut [11]

Wireguard Verzeichnis »/etc/ 292 182 Codezeilen umfasst. wireguard/­ interfa- Auch Ersteinrichtung und Inbetrieb- ce.conf«. Der Be- nahme gehen mit Wireguard deutlich 40 fehl »wg down flotter von der Hand und machen ge- wg0« macht indes fühlt mehr Freude als mit Open VPN. genau das, was Schon die schnell erzeugten Schlüssel- nun bestimmt paare sind verglichen mit der bei Open Abbildung 2: »wg showconf« gießt bestehende Tunnel in eine Konfigurations­ www.linux-magazin.de viele bereits ver- VPN nötigen Public-Key-Infrastruktur ein datei. Die lässt sich bei Bedarf schnell wieder herstellen. muten, nämlich Traum. Hinzu kommen die ziemlich hohe ein Wireguard-In- Verschwiegenheit von Wireguard, der in- in der Regel sogar ganz bestimmt, fest- terface abräumen. Eine Beispiel-Konfigu- tegrierte Schutz gegen DoS-Angriffe und zurren. Die Wireguard-Einstellungen ein- rationsdatei zeigt Listing 3. die optionale Möglichkeit, PSK-Keys zu zelner Hosts gießt er in diesem Fall fix in Der Eintrag »SaveConfig = true« sorgt verwenden. Letztere hat Donenfeld im- Konfigurationsdateien. dafür, die aktuelle Konfiguration zu spei- plementiert, um möglichen Fortschritten Mit dem Befehl »wg showconf« gibt chern, sobald das Interface stirbt. Läuft im Quantencomputing zu begegnen und Wireguard­ die aktuelle Konfiguration im alles und will der Admin das Wireguard- weiterhin die verschlüsselte Kommunika- richtigen Format aus (Abbildung 2). So Interface künftig beim Booten automa- tion sicherzustellen. lässt sich mit Hilfe einer Pipe eine gül- tisch erzeugen lassen, genügt es (zumin- Gegen Wireguard spricht, dass es sich tige Konfigurationsdatei erzeugen, zum dest unter Debian und Ubuntu), im Block um ein noch relativ junges Protokoll Beispiel »/etc/wireguard/wg0.conf«, die mit dem entsprechenden physischen In- mit nur einem Entwickler handelt. Zur der Admin später mit »wg setconf wg0 terface die Zeile »post‑up wg‑quick up Zeit unterstützt es außer Linux und OS /etc/wireguard/wg0.conf« einlesen kann. wg0« zu ergänzen. X keine weiteren Betriebssysteme, wes- halb sich das Tunnelprotokoll noch nicht Betriebsbereit Wireguard gegen Open VPN für heterogene Netze und mobile Geräte eignet. So lange Wireguard nicht im Unter den Wireguard-Tools befindet Verglichen mit Open VPN möchte Wire­ Mainline-Kernel steckt, dürften Admins sich auch das Bash-Skript »/usr/bin/ guard in vielen Bereichen punkten. wenig Lust zeigen, das Modul mit jedem wg‑quick«. Das macht es möglich, Wire- Dazu zählen – neben der fixen krypto- neuen Kernel zu aktualisieren. Auch das guard-Schnittstellen einfach in Betrieb zu grafischen Suite – der kompakte Code ausstehende Audit ist im professionellen nehmen beziehungsweise abzuschalten. des Kernelmoduls und höhere Übertra- Umfeld ein echtes Hindernis. Existiert für die gewünschte Wireguard- gungsgeschwindigkeiten. Die bestätigten Schnittstelle eine Konfigurationsdatei, sich auch in einem kurzen Test. Dessen Fazit legt das Kommando »wg up Interface« Resultate listet Tabelle 1 auf, die Messun- das virtuelle Netzwerkinterface an, ord- gen zeigen die Abbildungen 3 und 4. Als Wireguard präsentiert sich als vielver- net ihm eine IP-Adresse zu und setzt Testumgebung diente ein Netzwerk mit sprechende VPN-Alternative, die im pri- weitere IP-Adressen sowie gegebenenfalls einem Raspberry Pi 2 als VPN-Gateway vaten homogenen Netz bereits viel Spaß auch Routen und DNS-Einträge. Darüber sowie einem EEE-PC 901, einem Open- macht und überzeugt. Es lohnt sich, die hinaus führt es zusätzliche »pre«- und VPN-Point-to-Point-Setup mit Tun-Dev Technologie im Auge zu behalten und »post‑up«-Skripte aus. und symmetrischen Schlüsseln. – wenn möglich – die Entwicklung und den Einsatz aktiv mit voranzutreiben. Listing 3: Wireguard-Konfiguration Das Konzept ist ebenso spannend wie

01 [Interface] 09 [Peer] 02 Address = 192.168.222.1/24 10 PublicKey = Tabelle 1: Geschwindigkeitstest 03 SaveConfig = true fAoJ02w4ravlkLbcaiIl8bbQ6svlAZXJ3mUO3XR4u0g= VPN Zeit/Durchsatz​ 04 PostUp = sysctl ‑w net.ipv4.ip_forward=1 && 11 AllowedIPs = 192.168.222.2/32 Ping-Zeiten (Durchschnitt) iptables ‑t nat ‑A POSTROUTING ‑o eth0 ‑j 12 Endpoint = 188.xxx.xx.xx:36448 Ohne VPN 0,64 ms MASQUERADE 13 PersistentKeepalive = 25 Mit Wireguard 1,48 ms 05 PreDown = iptables ‑t nat ‑D POSTROUTING ‑o eth0 14  Mit Open VPN 1,92 ms ‑j MASQUERADE && sysctl ‑w net.ipv4.ip_forward=0 15 [Peer] 06 ListenPort = 46602 16 PublicKey = IhtXHhqeAJujdNTqAgWI/gfOxu/ Datenübertragung mit »scp« (173 MByte) 07 PrivateKey = YMO3RHNWE1zroMaidnLEsg+lMpsbu+TAh aq2aKI2fcReWfXEY= Ohne VPN 9,74 MByte/​s TFQd/yPjHo= 17 AllowedIPs = 192.168.222.3/32 Mit Wireguard 7,15 MByte/​s 08  18 Endpoint = 192.168.10.9:44449 Mit Open VPN 4,24 MByte/​s 01/2018 Titelthema der Umstand, dass die VPN-Lösung dem- nächst im Kernel landen könnte. Verglichen mit anderen VPNs sind Wire­ guard-Tunnel kinderleicht und schnell

einzurichten. Das klare Konzept und die Wireguard wenigen Konfigurationsmöglichkeiten bieten kaum Raum für fehlerhaft einge- richtete VPNs, und die Pakete sind im 41 Netz flink unterwegs. Zu guter Letzt sei noch auf die umfassende Dokumentation und das Whitepaper [12] verwiesen, die

Funktionsweise und Implementierung www.linux-magazin.de recht detailliert beschreiben. (kki) n

Infos [1] Open VPN: [https://​­openvpn.​­net] Abbildung 3: Weniger ist besser: Auch beim Pingtest hat Wireguard leicht die Nase vorn. [2] IPsec-Protokoll: [http://​­www.​­unixwiz.​­net/​ ­techtips/​­iguide‑.​­html] [3] Libre Swan: [https://​­libreswan.​­org] [4] Open Swan: [https://​­www.​­openswan.​­org] [5] Strong Swan: [https://​­strongswan.​­org] [6] Wireguard: [https://​­www.​­wireguard.​­com] [7] Azirevpn: [https://​­www.​­azirevpn.​­com/​­Wireguard] [8] Mullvad: [https://​­mullvad.​­net/​­guides/​ ­our‑vpn‑servers/​­#​­Wireguard‑servers] [9] Perrins Noise Protocol Framework: [https://​­noiseprotocol.​­org] [10] Wireguard-Installationsanleitung: [https://​­www.​­wireguard.​­com/​­install/] [11] Codezeilen in Open VPN: [https://​­www.​­openhub.​­net/​­p/​­openvpn] [12] Wireguard Whitepaper: [https://​­www.​ ­wireguard.​­com/​­papers/​­wireguard.​­pdf] Abbildung 4: Weniger ist besser: Wireguard kopierte Daten im Test deutlich schneller als Open VPN.