Bohrende Fragen Wireguard
Total Page:16
File Type:pdf, Size:1020Kb
01/2018 VPN mit Wireguard aufsetzen Titelthema Bohrende Fragen Wireguard 38 Wer ein Virtual Private Network 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.linux-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 Wire- 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 Wire guard-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-wireguard. 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. wire guard/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