© by T. Kling This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 2.0 License. To view a copy of this license, visit Virtual Private Network mit OpenVPN
Seite 2 6 Fragen/Aufgaben zum Einstieg: Beschreiben Sie kurz was man unter einem VPN versteht. Warum benötigen wir überhaupt VPNs? Erklären Sie die folgenden Ziele, die man bei einer „sicheren“ Kommunikation verfolgt: Vertraulichkeit Datenintegrität Nachweisbarkeit Authentifikation Was bedeutet: Host-to-Host-, Host-to-Site- und Site-to-Site-VPN Nennen Sie 4 Varianten zur Realisierung (Protokolle) von VPNs und machen Sie sich mit deren prinzipiellen Funktionsweise vertraut. Welche Problemstellungen ergeben sich beim Einsatz von VPNs?
Seite 3 Virtual Private Network ?!? Ziele sicherer Kommunikation: Vertraulichkeit, Authentisierung, Integrität, Nachweisbarkeit VPN verbindet Rechner und/oder Netzwerke miteinander, indem es andere (öffentliche) Netze als Transportweg nutzt. Varianten: RAS PPTP L2TP IPSec SSL-VPN SSH-Tunnel Client VPN-Gateway VPN-Netz Internet Firmennetz
Seite 4 OpenVPN - Übersicht „Dass das freie VPN-Tool einen derat großen Funktionsumfang mit einer simplen Konfiguration bei gleichzeitig hoher Sicherheit kombiniert, scheint wie die Quadratur des Kreises“ ( Linux-Magazin 05/09 ) Implementierung eines SSL-basierten VPN Anwendungsneutralität „Sichere“ Netzwerkerweiterung bzgl. OSI Layer 2 und 3 2 Betriebsmodi: Routing und Bridging Arbeitet über die Transportprotokolle TCP und UDP Authentifizierung erfolgt auf Basis von: Benutzername/Passwort Smartcards PreShared Keys Zertifikatsbasiert
Seite 5 Funktionsweise phy. Verbindung eth eth tun tun Tunnel Verschlüsselung Server Client Entschlüsselung Virtuelle Verbindung Physikalischer Netzwerkadapter Virtueller Netzwerkadapter
Seite 6 Virtuelle Netzwerkschnittstellen: Das Tunnelprinzip Problem der Portierung von VPN-Lösungen, welche die Verschlüsselung und damit Modifikation der Datenpakete im Betriebsystemkern durchführen, auf andere Systeme! Ansatz von OpenVPN: Nutzt die sogenannten virtuellen Netzwerkschnittstellen und verknüpft diese mit einer Verschlüsselung im Userspace. virt. Schnittstellen bilden die Verknüpfung zwischen den über den Tunnel übertragenen Daten, dem OpenVPN-Prozess und dem OS. Protokollverschachtelung in Tunneln mit einem Trick: IP-Paket als Payload eines IP-Pakets. virtuelle Netzwerkschnittstellen sind Endpunkte des Tunnels. IP-Header Anwendungsdaten.... virtuelle Schnittstellephy. Schnittstelle TCP/UDPSSL
Seite 7 Bsp: Einfacher Tunnel ohne Verschlüsselung Server: openvpn --dev tun0 --remote ifconfig Client: openvpn --dev tun0 --remote ifconfig ifconfig eth0Protokoll:Ethernet Hardware Adresse 00:0F:B0:75:76:08 inet Adresse: Bcast: Maske: tun0 Protokoll:UNSPEC Hardware Adresse inet Adresse: P-z-P: Maske: UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1500 Metric:1
Seite 8 Routing und Bridging: tun- und tap-Geräte Betriebsmodus: Routing Tunnel zwischen den Gegenstellen auf OSI-Schicht 3. Gegenstellen erhalten IP-Adressen eines fiktiven Subnetzes. Zugriff auf die hinter den VPN-Gateways liegenden Netze nicht direkt möglich. Jeweiligen Gegenstellen müssen per IP-Forwarding und Einträgen in den Routingtabellen weitervermitteln. Betriebsmodus: Bridging Transparentes Tunneln von Ethernetframes (OSI-Schicht 2). Clients erhalten IP's aus dem Netz hinter dem VPN-Server. Notwendig für Broadcast-basierenden Diensten (NetBIOS, etc.). Verwendete virt. Schnittstelle wir über über eine Netzwerkbrücke mit dem realen Netzwerk verbunden.
Seite 9 Betriebsmodi: Point-to-Point ➢ Für Verbindungen von Host zu Host ➢ spezifische Konfigurationsdatei pro VPN-Verbindung ➢ Default-Modus von OpenVPN Client_1 UDP/119 4 OpenVPN- Prozess UDP/119 4 OpenVPN- Prozess VPN-Server Client_2 UDP/119 5 OpenVPN- Prozess UDP/119 5 OpenVPN- Prozess
Seite 10 Betriebsmodi: Server Mode ➢ Ansatz für Remote-Access-Verbindungen ➢ Ein Prozess auf dem Server verwaltet alle VPN-Verbindungen ➢ Point-to-Multipoint Modus Client_1 UDP/119 4 OpenVPN- Prozess UDP/119 4 OpenVPN- Prozess VPN-Server Client_2 UDP/119 4 OpenVPN- Prozess
Seite 11 PreShared Key Authentifizierung Verwenden einer symmetrische Verschlüsselung! Erzeugen eines gemeinsamen Schlüssels: openvpn –-genkey –-secret static.key „Sicherer“ Austausch dieses Schlüssels!?! Vorteil: Sehr einfache Konfiguration: server.conf: dev tun #remote ifconfig secret static.key client.conf: dev tun remote ifconfig secret static.key
Seite 12 Schlüsselaustausch mit Transport Layer Security Zertifikatsbasierte Authentifizierung über TLS-Protokoll. SSL ursprünglich von Netscape beschriebenes Protokoll: Ziel: Absicherung von HTTP-Verbindungen Versionen SSLv1, SSLv2 bis SSLv3 SSL setzt auf ein verlässliches Transportprotokoll auf (TCP/UDP). SSL besteht aus zwei Verbindungskanälen: SSL Record Protocol SSL Handshake Protocol: ► Gegenseitige Authentifizierung von Server und Client. ► Verschlüsselungsalgorithmus aushandeln und zugehörige Schlüssel austauschen (Diffie-Hellmann Key Exchange). TLS (RFC 2246) basiert auf SSLv3: TLS bietet Fallback auf SSLv3 (Kom. zw. TLS-Hosts und SSL-Clients). Authentifizierung bei TLS gegenüber SSL mit Zertifikaten Pflicht.
Seite 13 Zertifikatserstellung Aufbau einer PKI OpenVPN bietet mit EasyRSA bereits vorgefertigte Skripte zur Erstellung der CA, Server- und Clientzertifikate. (OpenSSL-Paket muß hierfür installiert sein) Vorgehensweise in der Dokumentation unter oder im beschrieben. CA- und Zertifikatserstellung direkt mit OpenSSL. Ein auf OpenVPN ausgerichtetes Tutorial findet sich unter: tutorials.net/security/openssl-tutorial/tutorials-t html tutorials.net/security/openssl-tutorial/tutorials-t html PKI-Verwaltung mit OpenSSL oder entsprechenden grafischen Frontends wie z.B. TinyCA, roCA (Linux BootCD mit TinyCA als Keymanagement unter ).
Seite 14 OpenVPN installieren Installationspakete sind in der Regel in den Softwarerepositories der verschiedenen Linuxdistributionen vorhanden. Installation aus den Sourcedateien von Unterstützung der virt. Netzwerkschnittstellen tun/tap in aktuellen Betriebssystemkernen bereits enthalten. Für Windows/Mac stehen ebenfalls entsprechende Programmpakete (OpenVPN-GUI) zur Verfügung. Diese beinhalten auch den benötigten win32tap-Treiber für die virtuelle Netzwerkschnittstelle. Hilfen zur Installation:
Seite 15 OpenVPN – Konfiguration / Start Erstellen/Editieren einer Konfigurationsdatei: z.B server.conf, client.conf, vpngate-sifi.conf, etc. Starten des VPN-Tunnels mit der entsprechenden Konfig-Datei: openvpn –-config server.conf Verwendung des Network-Managers:
Seite 16 Windows: OpenVPN - GUI Konfigurationsdatei mit Dateiendung *.ovpn im Verzeichnis..openvpn\config\ abspeichern und anschließend aus der Taskleiste heraus starten.
Seite 17 Beispielnetz eth eth ClientServer eth /24 VPN-Netz: /24
Seite 18 Serverkonfiguration server.conf #Benötigte Zertifikate der CA und des Servers selbst ca /etc/openvpn/keys/root.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh1024.pem #Netzwerkeinstellungen – Port, Protokoll, Schnittstelle port 1194 proto udp dev tun #Betriebsmodus Server und IP-Bereich für VPN-Netz mode server server #Server „pingt“ Client alle 10s an (wichtig bei UDP). #Neu-Aufbau der Verbindung nach 120s Inaktivität. keepalive #Logdatei und Log-Level status openvpn-status.log verb 3
Seite 19 Clientkonfiguration client.conf #Benötigte Zertifikate der CA und des Clients ca /etc/openvpn/keys/root.crt cert /etc/openvpn/keys/client.crt key /etc/openvpn/keys/client.key #Netzwerkeinstellungen port 1194 proto udp dev tun remote #Tunneloptionen: Client bezüglich des Server-Mode client
Seite 20 Start des OpenVPN-Prozesses beim Server openvpn --config server.conf Sat Nov 1 08:34: OpenVPN 2.1_rc7 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] built on Jun Sat Nov 1 08:34: Diffie-Hellman initialized with 1024 bit key Enter Private Key Password: Sat Nov 1 08:34: /usr/bin/openssl-vulnkey -q -b m Sat Nov 1 08:34: TLS-Auth MTU parms [ L:1541 D:138 EF:38 EB:0 ET:0 EL:0 ] Sat Nov 1 08:34: TUN/TAP device tun0 opened Sat Nov 1 08:34: TUN/TAP TX queue length set to 100 Sat Nov 1 08:34: ifconfig tun pointopoint mtu 1500 Sat Nov 1 08:34: route add -net netmask gw Sat Nov 1 08:34: Data Channel MTU parms [ L:1541 D:1450 EF:41 EB:4 ET:0 EL:0 ] Sat Nov 1 08:34: Socket Buffers: R=[ >131072] S=[ >131072] Sat Nov 1 08:34: UDPv4 link local (bound): [undef]:1194 Sat Nov 1 08:34: UDPv4 link remote: [undef] Sat Nov 1 08:34: MULTI: multi_init called, r=256 v=256 Sat Nov 1 08:34: IFCONFIG POOL: base= size=62 Sat Nov 1 08:34: Initialization Sequence Completed
Seite 21 Verbindungsaufbau aus Sicht des Servers: Zertifikatsüberprüfung Sat Nov 1 08:35: MULTI: multi_create_instance called Sat Nov 1 08:35: :1194 Re-using SSL/TLS context Sat Nov 1 08:35: :1194 Control Channel MTU parms [ L:1541 D:138 EF:38 EB:0 ET:0 EL:0 ] Sat Nov 1 08:35: :1194 Data Channel MTU parms [ L:1541 D:1450 EF:41 EB:4 ET:0 EL:0 ] Sat Nov 1 08:35: :1194 Local Options hash (VER=V4): '239669a8' Sat Nov 1 08:35: :1194 Expected Remote Options hash (VER=V4): ' b' Sat Nov 1 08:35: :1194 TLS: Initial packet from :1194, sid=80a0f634 0a68125c Sat Nov 1 08:35: :1194 VERIFY OK: depth=1, /C=DE/ST=Baden-Wuerttemberg/L=Sindelfingen/O=GDS2/CN=Tobias_Kling Sat Nov 1 08:35: :1194 VERIFY OK: depth=0, /C=DE/ST=Baden-Wuerttemberg/O=GDS2/CN=Testuser
Seite 22 Verbindungsaufbau aus Sicht des Servers: Verschlüsselungsparameter aushandeln Sat Nov 1 08:35: :1194 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Sat Nov 1 08:35: :1194 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sat Nov 1 08:35: :1194 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Sat Nov 1 08:35: :1194 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Sat Nov 1 08:35: :1194 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
Seite 23 Verbindungsaufbau aus Sicht des Servers: Übergabe der Tunnelparameter an Client Sat Nov 1 08:35: :1194 [Testuser] Peer Connection Initiated with :1194 Sat Nov 1 08:35: Testuser/ :1194 MULTI: Learn: > Testuser/ :1194 Sat Nov 1 08:35: Testuser/ :1194 MULTI: primary virtual IP for Testuser/ :1194: Sat Nov 1 08:35: Testuser/ :1194 PUSH: Received control message: 'PUSH_REQUEST' Sat Nov 1 08:35: Testuser/ :1194 SENT CONTROL [Testuser]: 'PUSH_REPLY,route ,topology net30,ping 10,ping-restart 120, ifconfig ' (status=1)
Seite 24 Verbindungsaufbau aus Sicht des Clients
Seite 25 IP-Konfiguration beim Server ifconfig eth0 Link encap:Ethernet HWaddr 00:0c:29:58:66:9e inet addr: Bcast: Mask: tun0 Link encap:UNSPEC HWaddr inet addr: P-t-P: Mask: UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric: netstat -rn Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface UH tun U eth UG tun UG eth0 ping PING ( ) 56(84) bytes of data. 64 bytes from : icmp_seq=1 ttl=128 time=0.771 ms
Seite 26...und beim Client:
Seite 27 Zugriff auf das Firmennetz hinter dem VPN-Server Notwendige Ergänzung in server.conf #Setzten der Route zum Firmennetz beim Client push „route “ Routing auf dem VPN-Server aktivieren Linux: sysctl -w net.ipv4.ip_forward=1 Windows: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Tcpip\Parameters" setzen auf "IPEnableRouter=1 Im Firmennetz muss eine Route zum virtuellen Tunnelnetz ( ), aus dem ja die Anfragen eines VPN-Clients kommen, existieren.
Seite 28 Managementinterface OpenVPN stellt über einen TCP-Socket ein Managementinterface zur Verfügung, welches externe Programme zur Administration des VPN-Servers nutzen können. Aktivierung in der Konfigurationsdatei: management IP-Adresse Port [passwortdatei] Zugriff: Datenübertragung momentan noch im Klartext (später SSL/TLS) ► Abhilfe: SSH-Tunnel auf Telnet-Interface. telnet Trying Connected to Escape character is '^]'. >INFO:OpenVPN Management Interface Version 1 -- type 'help' for more info
Seite 29 Weitere Features.... ein kleiner Auszug :-) Bandbreitenoptimierung (comp-lzo) Bandbreitenlimitierung (shaper) Benutzerprofile und Adresspools Parameterübergabe/-anforderung an/vom Tunnelpartner (IP-Konfigurationen mit push/pull) push „route “ push „redirect-gateway“ Authentifizierung gegenüber einem RADIUS-Server Redundante VPN-Server Erhöhung der Sicherheit durch Versch. TLS-/Kanalverschlüsselungsoptionen chroot-Umgebung Unterstützung durch Firewalls
Seite 30 Optionen für den TLS-Modus Konfiguration als TLS-Server/Client beim Verbindungsaufbau tls-server bzw. tls-client Akzeptierte CN für Zertifikate festlegen tls-remote Zusätzlich Zertifikatsinformationen abfragen ns-cert-type
Seite 31 OpenVPN im IPCop Mit Zerina ( existiert ein OpenVPN-Plugin für die weit verbreitete Firewall-Lösung IPCop.
Seite 32 Installation/Konfiguration von Zerina ● Aktuelle Version (ZERINA-0.9.5b-Installer.tar.gz) mit WinSCP, etc. in das /tmp-Verzeichnis auf dem IPCop kopieren). ● Dort auspacken: tar -xvzf./ZERINA-0.9.5b-Installer.tar.gz ●..und anschließend mit./install installieren ● Auf der Hompage von Zerina gibt es div. Konfigurations- HOWTO's für unterschiedliche Szenarien. ● Prinzipielle Vorgehensweise: ● Globale Einstellungen vornehmen ● Root/Host-Zertifikat erzeugen. ● Clientzertifikat(e) erzeugen ● ZIP-Paket (Konfigdatei+Zertifikat *.p12) für Clients downloaden ● Entpacken im config-Verzeichnis und Starten der VPN-Verbindung