Sicher durch den Dschungel - Open Source VPN Lösungen Daniel Ehlers 2. Oktober 2009 VPN ? VPN ? I Geräte in privatem Netz können Dienste nutzen VPN ? I Geräte in privatem Netz können Dienste nutzen I Sensible Daten sind geschützt VPN ? VPN ? I Jeder kann Dienste nutzen VPN ? I I Jeder kann Dienste nutzen Erreichbarkeit durch Router (NAT/Firewall) erschwert VPN ? I I I Jeder kann Dienste nutzen Erreichbarkeit durch Router (NAT/Firewall) erschwert Sensible Daten können mitgelesen werden VPN ? Was bietet ein VPN I Nur Teilnehmer köennen auf Dienste zugreifen VPN ? Was bietet ein VPN I Nur Teilnehmer köennen auf Dienste zugreifen I Firewall/NAT Probleme werden umgangen VPN ? Was bietet ein VPN I Nur Teilnehmer köennen auf Dienste zugreifen I Firewall/NAT Probleme werden umgangen I Daten werden verschlüsselt übertragen VPN ? Was bietet ein VPN I Nur Teilnehmer köennen auf Dienste zugreifen I Firewall/NAT Probleme werden umgangen I Daten werden verschlüsselt übertragen I Keine Anpassung an restlicher Software nötig Implementierungsansätze IPSec TLS (SSL) I OpenSwan I OpenVPN I strongSWan I cloudvpn I KAME I tinc Alternative I n2n OpenVPN OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) I Lizenz: GPLv2 OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) I Lizenz: GPLv2 I Platformen: Windows (2000,XP,Vista), Linux,Open,Net,Free.. BSD, Mac OS X, Solaris OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) I Lizenz: GPLv2 I Platformen: Windows (2000,XP,Vista), Linux,Open,Net,Free.. BSD, Mac OS X, Solaris Verschlüsselung: I I Grundlage liefert OpenSSL Bibliothek OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) I Lizenz: GPLv2 I Platformen: Windows (2000,XP,Vista), Linux,Open,Net,Free.. BSD, Mac OS X, Solaris Verschlüsselung: I I I Grundlage liefert OpenSSL Bibliothek Hybrides Kryptosystem mit Zertifizierungsstelle (X.509) OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) I Lizenz: GPLv2 I Platformen: Windows (2000,XP,Vista), Linux,Open,Net,Free.. BSD, Mac OS X, Solaris Verschlüsselung: I I I I Grundlage liefert OpenSSL Bibliothek Hybrides Kryptosystem mit Zertifizierungsstelle (X.509) oder Verifikation mit statischem Schlüssel OpenVPN Eckdaten I Maintainer: OpenVPN Technologies Inc. I WebSeite: http://www.openvpn.net/ I Status: Stable, 2.0.9 (1. Okt. 2009) I Lizenz: GPLv2 I Platformen: Windows (2000,XP,Vista), Linux,Open,Net,Free.. BSD, Mac OS X, Solaris Verschlüsselung: I I I I I Grundlage liefert OpenSSL Bibliothek Hybrides Kryptosystem mit Zertifizierungsstelle (X.509) oder Verifikation mit statischem Schlüssel oder Schlüssel und Benutzer/Passwort Abfrage OpenVPN Topologie I klassisches Server-Client Model OpenVPN Topologie I I klassisches Server-Client Model mehrere Server über Netzwerk Brücken OpenVPN Topologie I I klassisches Server-Client Model mehrere Server über Netzwerk Brücken 1. lokal auf einem System OpenVPN Topologie I I klassisches Server-Client Model mehrere Server über Netzwerk Brücken 1. lokal auf einem System 2. verbindung über vertrauenswürdige Netze OpenVPN Topologie I I klassisches Server-Client Model mehrere Server über Netzwerk Brücken 1. lokal auf einem System 2. verbindung über vertrauenswürdige Netze 3. über VPN Verbindung OpenVPN User Interfaces I Konsolen Tools OpenVPN User Interfaces I Konsolen Tools I NetworkManager Plugin OpenVPN User Interfaces I Konsolen Tools I NetworkManager Plugin I Windows GUI OpenVPN User Interfaces I Konsolen Tools I NetworkManager Plugin I Windows GUI I OS X (Tunnelblick) OpenVPN Konfiguration - Schluesselerstellung 1 2 3 4 5 6 7 8 9 10 11 #ca−h o s t >. . / v a r s #ca−h o s t >./ c l e a n −a l l #ca−h o s t >./ b u i l d −ca #ca−h o s t >./ b u i l d −key−s e r v e r s e r v e r #ca−h o s t >./ b u i l d −dh #ca−h o s t >./ b u i l d −k e y c l i e n t I Skripts erleichtern den Prozess OpenVPN Konfiguration - Schluesselerstellung 1 2 3 4 5 6 7 8 9 10 11 #ca−h o s t >. . / v a r s #ca−h o s t >./ c l e a n −a l l #ca−h o s t >./ b u i l d −ca #ca−h o s t >./ b u i l d −key−s e r v e r s e r v e r #ca−h o s t >./ b u i l d −dh #ca−h o s t >./ b u i l d −k e y c l i e n t I Skripts erleichtern den Prozess I vars ermöglicht ” ” Grundeinstellungen und minimiert die Formalismen OpenVPN Konfiguration - Server 1/2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # s e r v e r type s e t t i n g s local 85.10.215.47 p o r t 1194 p r o t o udp dev tap0 comp−l z o # Keys ca / e t c / openvpn / k e y s / ca . c r t c e r t / e t c / openvpn / k e y s / s e r v e r . c r t k e y / e t c / openvpn / k e y s / s e r v e r . k e y # This file s h o u l d be k e p t s e c r e t dh / e t c / openvpn / k e y s / dh2048 . pem # M a i n t a i n a r e c o r d o f c l i e n t <−> v i r t u a l IP a d d r e s s i f c o n f i g −p o o l−p e r s i s t i p p . t x t # C o n f i g u r e s e r v e r mode f o r e t h e r n e t b r i d g i n g . s e r v e r −b r i d g e 1 0 . 1 0 0 . 1 0 0 . 1 2 5 5 . 2 5 5 . 2 5 5 . 0 1 0 . 1 0 0 . 1 0 0 . 2 1 0 . 1 0 0 . 1 0 0 . 2 5 5 # A l l o w c l i e n t s t o be a b l e t o ” s e e ” e a c h o t h e r . c l i e n t −to−c l i e n t # P e r i o d e s of ping l i k e messages k e e p a l i v e 5 120 # Select a cryptographic cipher . c i p h e r AES−256−CBC # AES Listing 1: server.conf OpenVPN Konfiguration - Server 2/2 30 31 32 33 34 35 36 37 38 39 40 41 42 43 # r e d u c e daemon ’ s p r i v i l e g e s a f t e r i n i t i a l i z a t i o n . u s e r nobody group nogroup # p r e v e n t a c c e s s i n g k e y s when p r i v i l e g e s a r e d r o p p e d p e r s i s t −k e y p e r s i s t −t u n # Output a s h o r t s t a t u s f i l e s t a t u s / e t c / openvpn / openvpn−s t a t u s . l o g # General logging l o g−append / v a r / l o g / openvpn . l o g verb 6 mute 20 Listing 2: server.conf OpenVPN Konfiguration - Client 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # Mark t h i s a s a c l i e n t client config #S e r v e r Type dev tap0 p r o t o udp r e m o t e vpn . p l a g i s . de 1194 nobind p e r s i s t −k e y p e r s i s t −t u n comp−l z o #Key S e t t i n g s ca k e y s / ca . c r t c er t keys / c l i e n t . c r t key keys / c l i e n t . key #C r y p t o c i p h e r AES−256−CBC ns−c e r t −t y p e s e r v e r Listing 3: client.conf OpenVPN Pro I Getestete/Erprobte Software OpenVPN Pro I Getestete/Erprobte Software I Verwendet getestete/erprobte Komponenten OpenVPN Pro I Getestete/Erprobte Software I Verwendet getestete/erprobte Komponenten I Breite Community Akzeptanz OpenVPN Pro I Getestete/Erprobte Software I Verwendet getestete/erprobte Komponenten I Breite Community Akzeptanz I GUI für alle Platformen OpenVPN Contra I Kein Konzept zur Lastverteilung cloudvpn cloudvpn Eckdaten I Maintainer: [exa] cloudvpn Eckdaten I Maintainer: [exa] I Status: Stable, 1.99.8 (12 Sep. 2009) cloudvpn Eckdaten I Maintainer: [exa] I Status: Stable, 1.99.8 (12 Sep. 2009) I Lizenz: GPLv3 cloudvpn Eckdaten I Maintainer: [exa] I Status: Stable, 1.99.8 (12 Sep. 2009) I Lizenz: GPLv3 I Plattformen: Linux, BSD, Win32, OSX (laut git) cloudvpn Eckdaten I Maintainer: [exa] I Status: Stable, 1.99.8 (12 Sep. 2009) I Lizenz: GPLv3 I Plattformen: Linux, BSD, Win32, OSX (laut git) Verschlüsselung: I I Grundlage liefert die gnuTLS Bibliothek cloudvpn Eckdaten I Maintainer: [exa] I Status: Stable, 1.99.8 (12 Sep. 2009) I Lizenz: GPLv3 I Plattformen: Linux, BSD, Win32, OSX (laut git) Verschlüsselung: I I I Grundlage liefert die gnuTLS Bibliothek Hybrides Kryptosystem mit Zertifizierungsstelle cloudvpn Topologie I Erlaubt beliebige Topologien cloudvpn Topologie I Erlaubt beliebige Topologien I Knoten können als load balancer agieren cloudvpn Topologie I Erlaubt beliebige Topologien I Knoten können als load balancer agieren Die eigentlichen Clients verbinden sich zum Mesh durch sog. Gates. I cloudvpn Topologie I Erlaubt beliebige Topologien I Knoten können als load balancer agieren Die eigentlichen Clients verbinden sich zum Mesh durch sog. Gates. I I lokal über Sockets cloudvpn Topologie I Erlaubt beliebige Topologien I Knoten können als load balancer agieren Die eigentlichen Clients verbinden sich zum Mesh durch sog. Gates. I I I lokal über Sockets oder über vertrauenswuerdiges Netz cloudvpn Konfiguration - MeshKnoten 1 2 3 4 5 6 7 8 9 10 11 12 13 #!/ u s r / b i n / c l o u d −@ i n c l u d e ca . / ca . c r t key . / s s l . key cert ./ s s l . crt dh . / dh1024 . pem listen 0 . 0 . 0 . 0 15135 s t a t u s −f i l e . / s t a t u s . t x t s t a t u s −i n t e r v a l 10000000 gate ./ gate . sock Listing 4: host1/darknet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #!/ u s r / b i n / c l o u d −@ i n c l u d e ca . / ca . c r t key . / s s l 2 . key cert ./ ssl2 . crt dh . / dh1024 . pem c o n n e c t 1 7 2 . 1 9 . 3 . 4 2 15135 h e a r t b e a t 10000000 s t a t u s −f i l e . / s t a t u s . t x t s t a t u s −i n t e r v a l 10000000 gate ./ gate . sock Listing 5: host2/darknet cloudvpn Konfiguration - Client Die Clients verbinden sich zum Mesh. 1 2 e t h e r −g a t e / p a t h / t o / s o c k e t & i f c o n f i g tap0 1 0 . 1 0 . 1 0 . 1 cloudvpn Pro I Sehr individual gestaltbares Netz I I Ausfallsicherheit Selbstreparatur cloudvpn Pro I Sehr individual gestaltbares Netz I I I Ausfallsicherheit Selbstreparatur “lightwight Lösung (folgt KISS Prinzip) ” cloudvpn Contra I Keine Konzepte zum konfigurieren des Netzwerks cloudvpn Contra I Keine Konzepte zum konfigurieren des Netzwerks I Nur sehr grundlegend Dokumentiert cloudvpn Contra I Keine Konzepte zum konfigurieren des Netzwerks I Nur sehr grundlegend Dokumentiert I Schlüsselverwaltung mit certtool“ sehr aufwändig ” Keine GUI I tinc tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen I WebSeite: http://www.tinc-vpn.org/ tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen I WebSeite: http://www.tinc-vpn.org/ I Status: stable, 1.0.9 (26 Dez. 2008) tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen I WebSeite: http://www.tinc-vpn.org/ I Status: stable, 1.0.9 (26 Dez. 2008) I Lizenz: GPLv2 tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen I WebSeite: http://www.tinc-vpn.org/ I Status: stable, 1.0.9 (26 Dez. 2008) I Lizenz: GPLv2 I Plattformen: Linux, BSD, Windows (2000,XP,Vista,7) , OSX tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen I WebSeite: http://www.tinc-vpn.org/ I Status: stable, 1.0.9 (26 Dez. 2008) I Lizenz: GPLv2 I Plattformen: Linux, BSD, Windows (2000,XP,Vista,7) , OSX Verschlüsselung: I I Grundlage liefert OpenSSL library tinc - There Is No Cabal Eckdaten I Maintainer: Guus Sliepen I WebSeite: http://www.tinc-vpn.org/ I Status: stable, 1.0.9 (26 Dez. 2008) I Lizenz: GPLv2 I Plattformen: Linux, BSD, Windows (2000,XP,Vista,7) , OSX Verschlüsselung: I I I Grundlage liefert OpenSSL library Hybrides Kryptosystem (Blowfish-128-CBC) tinc Topologie I Erlaubt beliebige Topologien tinc Topologie I Erlaubt beliebige Topologien I Unterscheidet sich von cloudvpn lediglich im Routing tinc Topologie I Erlaubt beliebige Topologien I Unterscheidet sich von cloudvpn lediglich im Routing I Jeder Knoten im Netzwerk ist auch Client tinc Control Tools I (Unix) Konsolen Tools tinc Control Tools I (Unix) Konsolen Tools I (Windows) Konsolen Tools + Service tinc Konfiguration - Grundstruktur Für jedes tinc Netz wird ein Unterordner in /etc/tinc/ angelegt. /etc/tinc/darknet/ /etc/tinc/darknet/rsa_key.priv /etc/tinc/darknet/tinc-up /etc/tinc/darknet/tinc-down /etc/tinc/darknet/tinc.conf /etc/tinc/darknet/hosts/ tinc Konfiguration - Host (Alpha) 1 Name = a l p h a 2 3 ConnectTo = b e t a 4 5 D e v i c e = / de v / n e t / t u n Listing 6: darknet/tinc.conf 1 # The r e a l IP a d d r e s s o f t h i s t i n c h o s t . Can be u s e d by o t h e r t i n c h o s t s . 2 Address = 172.19.3.42 3 4 # Po rt nu mber f o r i n c o m i n g c o n n e c t i o n s . D e f a u l t i s 6 5 5 . 5 P o r t = 655 6 7 # S u b n e t on t h e v i r t u a l p r i v a t e n e t w o r k t h a t i s l o c a l f o r t h i s h o s t . 8 Subnet = 1 9 2 . 1 6 8 . 1 . 0 / 2 4 9 10 # The p u b l i c k e y g e n e r a t e d by ‘ t i n c d −n d a r k n e t −K ’ i s s t o r e d h e r e 11 −−−−−BEGIN RSA PUBLIC KEY−−−−− 12 . . . 13 −−−−−END RSA PUBLIC KEY−−−−− Listing 7: darknet/hosts/alpha 1 #!/ b i n / s h 2 i f c o n f i g $INTERFACE 1 9 2 . 1 6 8 . 1 . 1 netmask 2 5 5 . 2 5 5 . 0 . 0 Listing 8: darknet/tinc-up tinc Konfiguration - Host (Beta) 1 Name = b e t a 2 3 ConnectTo = a l p h a 4 5 D e v i c e = / de v / n e t / t u n Listing 9: darknet/tinc.conf 1 # The r e a l IP a d d r e s s o f t h i s t i n c h o s t . Can be u s e d by o t h e r t i n c h o s t s . 2 Address = 172.19.3.27 3 4 # Po rt nu mber f o r i n c o m i n g c o n n e c t i o n s . D e f a u l t i s 6 5 5 . 5 P o r t = 6500 6 7 # S u b n e t on t h e v i r t u a l p r i v a t e n e t w o r k t h a t i s l o c a l f o r t h i s h o s t . 8 Subnet = 1 9 2 . 1 6 8 . 2 . 0 / 2 4 9 10 # The p u b l i c k e y g e n e r a t e d by ‘ t i n c d −n e x a m p l e −K ’ i s s t o r e d h e r e 11 −−−−−BEGIN RSA PUBLIC KEY−−−−− 12 . . . . 13 −−−−−END RSA PUBLIC KEY−−−−− Listing 10: darknet/hosts/beta 1 #!/ b i n / s h 2 i f c o n f i g $INTERFACE 1 9 2 . 1 6 8 . 2 . 1 netmask 2 5 5 . 2 5 5 . 0 . 0 Listing 11: darknet/tinc-up tinc Konfiguration - Betrieb I Host Dateien verteilen tinc Konfiguration - Betrieb I Host Dateien verteilen I Daemon starten #alpha > tincd -n darknet #beta > tincd -n darknet tinc Konfiguration - Betrieb I Host Dateien verteilen I Daemon starten #alpha > tincd -n darknet #beta > tincd -n darknet I Daten austauschen #alpha > ping 192.168.2.1 tinc Pro I Einfach gehaltenes Konfigurationsprinzip tinc Pro I I Einfach gehaltenes Konfigurationsprinzip Individuell gestallbares Netz I I Ausfallsicherheit Selbstreparatur tinc Pro I I Einfach gehaltenes Konfigurationsprinzip Individuell gestallbares Netz I I I Ausfallsicherheit Selbstreparatur Verwendet getestete/erprobte Komponenten tinc Pro I I Einfach gehaltenes Konfigurationsprinzip Individuell gestallbares Netz I I I Ausfallsicherheit Selbstreparatur Verwendet getestete/erprobte Komponenten tinc Pro I I Einfach gehaltenes Konfigurationsprinzip Individuell gestallbares Netz I I Ausfallsicherheit Selbstreparatur I Verwendet getestete/erprobte Komponenten I Gut dokumentiert tinc Contra I Keine GUI n2n n2n Eckdaten I Maintainer: ntop n2n Eckdaten I Maintainer: ntop I WebSeite: http://www.ntop.org/n2n/ n2n Eckdaten I Maintainer: ntop I WebSeite: http://www.ntop.org/n2n/ I Status: 1.3.3 n2n Eckdaten I Maintainer: ntop I WebSeite: http://www.ntop.org/n2n/ I Status: 1.3.3 I Lizenz: GPLv3 n2n Eckdaten I Maintainer: ntop I WebSeite: http://www.ntop.org/n2n/ I Status: 1.3.3 I Lizenz: GPLv3 I Platformen: Windows, Linux, OS X, FreeBSD n2n Eckdaten I Maintainer: ntop I WebSeite: http://www.ntop.org/n2n/ I Status: 1.3.3 I Lizenz: GPLv3 I Platformen: Windows, Linux, OS X, FreeBSD I Verschlüsselung: Symmetrisches Kryptosystem (TwoFish) n2n Topologie I Benötigt min. einen SuperNode (Server) n2n Topologie I Benötigt min. einen SuperNode (Server) I Edges stellen direkte Verbindung zu kommunikations Partnern her. n2n Topologie I Benötigt min. einen SuperNode (Server) I Edges stellen direkte Verbindung zu kommunikations Partnern her. I NATs werden umschifft. n2n Topologie I Benötigt min. einen SuperNode (Server) I Edges stellen direkte Verbindung zu kommunikations Partnern her. I NATs werden umschifft. I Traffic läuft nur im Notfall über SuperNode n2n User Interfaces I Konsolen Tools n2n User Interfaces I Konsolen Tools I Windows GUI n2n Konfiguration I Starten des SuperNodes #supernode > supernode -l <port> n2n Konfiguration I Starten des SuperNodes #supernode > supernode -l <port> I Verbinden der Edge Knoten #edge node1> edge -a 10.1.2.1 -c linuxTage -k <key> \ -l <supernode>:<port> #edge node2> edge -a 10.1.2.2 -c linuxTage -k <key> \ -l <supernode>:<port> n2n Konfiguration I Starten des SuperNodes #supernode > supernode -l <port> I Verbinden der Edge Knoten #edge node1> edge -a 10.1.2.1 -c linuxTage -k <key> \ -l <supernode>:<port> #edge node2> edge -a 10.1.2.2 -c linuxTage -k <key> \ -l <supernode>:<port> I Daten austauschen #edge node1> ping 10.1.2.2 n2n Pro I Daten werden direkt zwischen Partnern versendet n2n Pro I Daten werden direkt zwischen Partnern versendet I Minimaler Konfigurationsaufwand n2n Pro I Daten werden direkt zwischen Partnern versendet I Minimaler Konfigurationsaufwand I NATs werden umgangen. n2n Contra I Lediglich statischer (pre Shared) Schlüssel unterstützt n2n Contra I Lediglich statischer (pre Shared) Schlüssel unterstützt I Keine authentifizierungs Konzepte Fragen ? Vielen Dank für Ihre Aufmerksamkeit