Kostenlose VPN-Lösung

OpenVPN mit Linux

16.04.2010 von Jürgen Donauer
Will Ihr Kunde externen Mitarbeitern Zugriff auf das Firmennetzwerk gewähren, müssen Sie für sichere Verbindungen sorgen. Dieser Workshop demonstriert, wie man mit der Open-Source-Lösung OpenVPN einen sicheren Einwahlserver aufsetzt und konfiguriert.

Will Ihr Kunde externen Mitarbeitern Zugriff auf das Firmennetzwerk gewähren, müssen Sie für sichere Verbindungen sorgen. Dieser Workshop demonstriert, wie man mit der Open-Source-Lösung OpenVPN einen sicheren Einwahlserver aufsetzt und konfiguriert.

Per VPN (Virtual Private Network) können Standorte sicher über eine Netzwerkverbindung kommunizieren. Dahinter versteckt sich im Prinzip eine sichere und verschlüsselte Verbindung zwischen zwei Netzwerken, auch Tunnel genannt. Nach dem Herstellen einer solchen Verbindung befindet sich zum Beispiel ein Außendienstmitarbeiter sozusagen im internen Netzwerk seiner Firma. Somit kann er all das tun, was er sonst direkt im Büro erledigt. Beispiele sind Zugriffe auf das Intranet sowie auf interne Mail- und Datei-Server.

Open Source: Das OpenVPN-Projekt steht unter der GPL.

Dieser Artikel demonstriert, dass sich durchaus kostengünstige VPN-Lösungen realisieren lassen. Das Thema ist sehr komplex; es im Gesamten zu behandeln würde den Rahmen des Beitrags sprengen; deshalb werden nur die wichtigsten Punkte angesprochen. Sollten wir zum Beispiel statt Routing Ethernet Bridging verwenden wollen, befinden wir uns plötzlich im Thema Netzwerk. Die Entwickler raten zum Bridging-Einsatz allerdings ohnehin nur in bestimmten Situationen.

Mehr zu dem Thema Netzwerke lesen Sie hier:

Am Ende dieses Workshops werden Sie aber einen funktionierenden VPN-Server konfiguriert haben, auch wenn Sie kein Netzwerkspezialist sind.

Bildergalerie:
Workshop OpenVPN
Das OpenVPN-Projekt steht unter der GPL.
Workshop OpenVPN
Das Kopieren der Beispiele nach /etc/openvpn erleichtert die weitere Konfiguration.
Workshop OpenVPN
TecChannel hat den Schlüssel auf 2048 erhöht und die Landes-Informationen angepasst.
Workshop OpenVPN
Ein Zertifikat ist schnell und mittels nur drei Befehlen erstellt.
Workshop OpenVPN
Der Server-Schlüssel ist ebenso schnell angefertigt wie das Master-Zertifikat.
Workshop OpenVPN
Je nach Hardware kann die Erzeugung dieses Schlüssels (Diffie Hellmann) eine Weile in Anspruch nehmen.
Workshop OpenVPN
Die Beispiel-Datei ist ein guter Ausgangspunkt und ausgezeichnet dokumentiert.
Workshop OpenVPN
Mit dieser Einstellung teilen wir dem Client mit, dass er den gesamten Datenverkehr durch das Virtual Private Network abhandeln soll.
Workshop OpenVPN
Soll jeglicher Datenverkehr durch das VPN gehen, sind Einstellungen am Netzwerk notwendig.
Workshop OpenVPN
Der Administrator muss dafür sorgen, dass sich Server und Client verstehen. Ist die Kompression am Server (comp-lzo) aktiviert, muss der Client das wissen.
Workshop OpenVPN
Von hier aus wird getestet, ob wir alles richtig gemacht haben.
Workshop OpenVPN
Wir können uns einwählen und die Adressen 192.168.150.50 und 192.168.50.1 anpingen.
Workshop OpenVPN
Mit dem Netzwerk-Manager lässt sich die Client-Verbindung schnell einrichten.
Workshop OpenVPN
Das hinzufügen einer VPN-Verbindung ist wirklich ein Kinderspiel.
Workshop OpenVPN
Wenn Sie den Netzwerk-Manager verwenden, haben Sie schnell Zugriff auf die sichere Einwahl.
Workshop OpenVPN
Diese Methode funktioniert eben so gut, wie über die Kommandozeile.
Workshop OpenVPN
Mit nur zwei Mausklicks wählt sich der Client ein.
Workshop OpenVPN
Unter Windows ist die Einwahl ebenfalls ein voller Erfolg.
Workshop OpenVPN
Mit dieser Methode haben Sie einen Schnellzugriff auf die VPN-Verbindung.
Workshop OpenVPN
Ein error 23 sagt uns, dass das Zertifikat gesperrt wurde. Ausgesperrt ist der Anwender allerdings noch nicht.
Workshop OpenVPN
Dieses Zertifikat darf sich nun nicht mehr einwählen und wird abgelehnt.
Workshop OpenVPN
Derzeit ist nur der Nutzer tecchannel auf dem VPN-Server eingewählt.

Kurze Beschreibung der verschiedenen VPN-Lösungen

Im Bereich der VPN-Lösungen gibt es drei großen Familien: SSL, IPSec und PPTP. OpenVPN ist ein SSL-VPN und somit nicht kompatibel zu IPSec, L2TP und PPTP. Das IPSec-Protokoll ist so geschaffen, dass es als Modifikation des IP-Stack im Kernel-Space implementiert wird. Somit benötigt jedes Betriebssystem ein eigenes Einbetten. PPTP hätte den Vorteil, dass es auf Windows-Clients schon vorinstalliert ist. Allerdings sehen Sicherheits-Experten das PPTP-Protokoll als unsicher an. OpenVPN liegt im User-Space der Betriebssysteme und lässt sich daher leicht plattformunabhängig implementieren. Darüber hinaus gilt es als sicher. Aus diesem Grund erfreut sich der Einsatz von OpenVPN immer größerer Beliebtheit. Die kostengünstigste Lösung ist das manuelle Aufsetzen und Konfigurieren eines OpenVPN-Servers unter Linux.

Installation des Servers unter Linux

Das Paket OpenVPN ist mittlerweile fester Bestandteil in den großen Linux-Distributionen. Daher gestaltet sich eine Installation mittels der verfügbaren Paket-Manager in der Regel recht einfach. Sobald OpenVPN installiert ist, läuft die Konfiguration auf den verschiedenen Betriebssystemen sehr ähnlich ab. Lediglich die ausführbaren Programme können unter Linux an verschiedenen Orten liegen. Das ist aber kein Problem.

Nach einem Programm oder einer Datei können Sie mit folgendem simplen Befehl suchen: find / -name “Suchbegriff“. Um für alle Eventualitäten gewappnet zu sein, sollten Sie sowohl das Paket openvpn als auch bridge-utils installieren. Unter Ubuntu würde der Befehl zum Beispiel sudo apt-get openvpn bridge-utils lauten. Das Äquivalent für Red Hat oder CentOS wäre yum install openvpn bridge-utils. Unter CentOS funktioniert das aber nur, wenn Sie eines der Third-Party-Repositories verwenden.

Wichtig: Stellen Sie sicher, dass die Firewall, falls vorhanden, richtig konfiguriert ist und die entsprechenden Ports durchlässt.

Community-Version der OpenVPN-Software auf einem Ubuntu-Server

Vor der Konfiguration müssen wir zum besseren Verständnis einige Variablen fix deklarieren. Der interne Linux-/Einwahl-Server soll die IP-Adresse 192.168.150.50 erhalten. Das Internet-Gateway ist 192.168.150.1. Bei der Wahl des Netzwerks sollten Sie keinen der im öffentlichen Raum meistgenutzten Adress-Pools bemühen, zum Beispiel 192.168.0.0, 192.168.1.0 oder 10.0.0.0, denn dies könnte zu Routing-Konflikten führen. Die externe IP-Adresse des Gateways hängt davon ab, was Ihnen der Provider zur Verfügung stellt. Diese externe Adresse sollte möglichst statisch sein. Ist das nicht der Fall, helfen Dienste wie zum Beispiel DynDNS weiter.

Erzeugung der Schlüssel

Nach einer Installation sollten Sie das Beispiel-Verzeichnis nach /etc/openvpn kopieren. Dies erleichtert die weitere Konfiguration: cp –R /usr/share/doc/openvpn/examples/ /etc/openvpn/. Danach wechseln Sie in das Verzeichnis /etc/openvpn/examples/easy-rsa/2.0 und passen die Datei vars an. Hier können Sie Schlüsselstärke und länderspezifische Angaben einstellen, die später im Master-Zertifikat (CA) verwendet werden.

Nun ist es Zeit, das eigentliche Zertifikat zu erstellen. Rufen Sie hierfür nacheinander die Befehle . ./vars, ./clean-allund ./build-caauf. Achten Sie darauf, dass der erste Befehl tatsächlich Punkt Leerzeichen Punkt Backslash vars geschrieben wird.

Nun erschaffen wir ein Zertifikat und einen privaten Schlüssel für den Server. Rufen Sie hierfür ./build-key-server servernameauf. Die Software wird ähnliche Fragen stellen wie bei der Generierung des CA. Am Ende signieren und bestätigen Sie die Zertifikatsanfrage. Als dritten Schritt erschaffen Sie den Schlüssel für die Clients. Dazu dient der Befehl ./build-key client. Je nach Anzahl der Clients können Sie diese Prozedur beliebig oft wiederholen. Der Parameter client muss logischerweise variieren. Das gilt auch für die Eingabe des Common Name. Wollen Sie passwortgeschützte Schlüssel erzeugen, verwenden Sie statt build-key den Befehl build-key-pass client.

Abschließend erzeugen Sie noch die Diffie-Hellman-Parameter via ./build-dh. Dies kann je nach Hardware einige Zeit in Anspruch nehmen.

Bildergalerie:
OpenVPN - Erzeugung der Schlüssel
Das Kopieren der Beispiele nach /etc/openvpn erleichtert die weitere Konfiguration.
OpenVPN - Erzeugung der Schlüssel
TecChannel hat den Schlüssel auf 2048 erhöht und die Landes-Informationen angepasst.
OpenVPN - Erzeugung der Schlüssel
Ein Zertifikat ist schnell und mittels nur drei Befehlen erstellt.
OpenVPN - Erzeugung der Schlüssel
Der Server-Schlüssel ist ebenso schnell angefertigt wie das Master-Zertifikat.
OpenVPN - Erzeugung der Schlüssel
Je nach Hardware kann die Erzeugung dieses Schlüssels (Diffie Hellmann) eine Weile in Anspruch nehmen.

Hier eine Übersicht der in diesem Kapitel erzeugten Schlüssel und deren Bedeutung.

Dateiname

Verwendet von

Verwendungszweck

Geheim?

ca.crt

Server + allen Clients

Root-CA-Zertifikat

Nein

ca.key

Schlüssel-signierendem Rechner

Root-CA-Schlüssel

Ja

dh<Zahl>.pem

Nur Server

Diffie-Hellman-Parameter

Nein

server.crt

Nur Server

Server-Zertifikat

Nein

server.key

Nur Server

Server-Schlüssel

Ja

client.crt

Nur Client

Client-Zertifikat

Nein

client.key

Nur Client

Client-Schlüssel

Ja

Die Datei server.conf

Diese Datei enthält die Konfiguration des Server-Daemon. Die Entwickler raten, die Beispiel-Datei der server.conf zu nehmen und zu modifizieren. In unserem Beispiel finden Sie diese unter /etc/openvpn/examples/sample-config-files. Sie ist allerdings komprimiert. Mittels gunzip server.conf.gzkönnen Sie die Datei auspacken. Theoretisch können Sie die Datei lassen, wo sie ist. Wir jedoch haben sie nach /etc/openvpn kopiert, und das aus zwei Gründen: Erstens ist das Ganze so übersichtlicher, und zweitens startet der OpenVPN-Server in unserem Test-Szenario bei einem Neustart mit den richtigen Einstellungen von selbst.

Das Benutzen der Beispiel-Datei erzeugt eine TUN-Netzwerkschnittstelle und horcht auf dem offiziellen OpenVPN-Port 1194 (UDP). Ebenso stellt es virtuelle Adressen für sich verbindende Clients aus dem 10.8.0.0/24-Subnetz zur Verfügung. Bevor Sie den Server starten, müssen Sie ihm allerdings mitteilen, wo sich die Schlüsseldateien befinden und mit welcher Verschlüsselungsrate Sie den Diffie-Hellman-Parameter erzeugt haben. In unserem Fall kopieren wir daher die Schlüssel ca.crt, server.crt, server.key und dh2048.pem ebenfalls nach /etc/openvpn. Diese befinden sich in unserem Beispiel unter /etc/openvpn/examples/easy-rsa/2.0/keys. Da wir bei Diffie Hellman 2048 verwendet haben, müssen wir den Parameter dh in der server.conf auf dh2048.pem ändern. Sollten Sie die Zertifikate an anderer Stelle aufheben wollen oder haben Sie diese anders benannt, müssen Sie das ebenfalls ändern. Hierfür sind die Parameter ca, cert und key zuständig.

Serverkonfiguration: Die Beispiel-Datei ist ein guter Ausgangspunkt und ausgezeichnet dokumentiert.

Soll der Server dem Client Zugriff auf weitere Subnetze nach einer Einwahl zur Verfügung stellen, erledigt dies der push-Parameter. In unserem Fall sorgt dafür die Zeile push “route 192.168.150.0 255.255.255.0“. Möchten wir zudem, dass sämtlicher Datenverkehr durch das VPN-Netzwerk abgehandelt wird. müssen wie die Zeile push „redirect-gateway def1 bypass-dhcp“ auskommentieren, indem der Strichpunkt vor dieser Zeile gelöscht wird.

Alles durch VPN: Mit dieser Einstellung teilen wir dem Client mit, dass er den gesamten Datenverkehr durch das Virtual Private Network abhandeln soll.

Wichtig: Sollten Sie den gesamten Datenverkehr durch das VPN leiten wollen, müssen Sie höchstwahrscheinlich einige Einstellungen im Netzwerk vornehmen. In unserem Beispiel benötigten wir eine feste Route im Router: 10.8.0.0/24 -> 192.168.150.50 (Einwahlserver). Des Weiteren muss IP-Forwarding auf dem Server funktionieren. Darüber hinaus mussten wir NAT aktivieren. Ob das IP-Forwarding aktiviert ist, überprüfen Sie mit folgendem Befehl: cat /proc/sys/net/ipv4/ip_forward. Ist das Ergebnis eine 0, so ist es deaktiviert. Temporär anschalten können Sie es mittels: echo 1 > /proc/sys/net/ipv4/ip_forward. Soll IP-Forwarding beim Systemstart aktiviert sein, editieren Sie in unserem Beispiel die Datei /etc/sysctl.conf und löschen das Doppelkreuz vor der Zeile: #net.ipv4.conf.default.forwarding=1. NAT aktivieren Sie mit folgenden zwei Befehlen, gesetzt den Fall, dass eth0 die Netzwerkkarte ist: iptables -P FORWARD ACCEPT und iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE.

Netzwerkeinstellungen: Soll jeglicher Datenverkehr durch das VPN gehen, sind Einstellungen am Netzwerk notwendig.

Bei einigen aktivierten Parametern ist es wichtig, dass diese auch in der Konfigurations-Datei des Clients vorhanden sind. Dies betrifft zum Beispiel die Kompression comp-lzo oder cipher. Unsere Beispiel-Datei weist in solchen Fällen darauf hin. Somit ist anzuraten, die – guten und verständlichen – Kommentare vor der Aktivierung eines Parameters zu lesen.

Die Dateien client.conf und client.ovpn

Die offizielle Dokumentation weist darauf hin, dass die Konfigurations-Datei für Clients unter Windows client.ovpn und unter Linux client.conf heißt. Da es Linux aber egal ist, ob Sie die Endung conf oder ovpn verwenden, raten wir Administratoren zur Verwendung der plattformübergreifenden Lösung, denn dann brauchen sich diese nicht weiter darum zu kümmern, welches Betriebssystem der Einwähler verwendet.

Abgleichen: Der Administrator muss dafür sorgen, dass sich Server und Client verstehen. Ist die Kompression am Server (comp-lzo) aktiviert, muss der Client das wissen.

Ansonsten ist diese Datei recht ähnlich der server.conf aufgebaut. Auch hier gibt es ein gut dokumentiertes Beispiel, das sich ganz leicht an die eigenen Bedürfnisse anpassen lässt. Sollte der Server allerdings anders konfiguriert sein, als der Client dies erwartet, können sich schnell Fehler einschleichen. Deswegen nochmals der Hinweis: Einige Parameter müssen in der server.conf mit denen der client.conf abgestimmt werden. Verwenden Sie am Server als Protokoll tcp, muss dies der Client auch wissen. Gleiches gilt für die Verschlüsselung und die aktivierte Kompression. Die Beispiel-Dateien weisen auf solche Umstände hin.

Einwahl unter Windows und Linux

Nun wollen Sie testen, ob Ihre Konfiguration richtig ist und der Server funktioniert. Um das Ganze so realistisch wie möglich zu machen, besuchen wir das Internetcafé unseres Vertrauens. Dieses bietet einen drahtlosen Zugang mit dem IP-Adressraum 192.168.0.x an. Für den Client benötigen Sie für unser Beispiel zwingend vier Dateien: ca.crt, client.ovpn, <Client-Name>.crt und <Client-Name>.key.

Zunächst versuchen wir unter Linux eine Einwahl via Konsole. Dazu muss man Benutzer root werden oder den Befehl mittels sudo aufrufen. Sonst verweigert das System ein Anlegen des Geräts tun.

Das geht natürlich auch komfortabler mittels grafischer Oberfläche. Dazu brauchen Sie unter Ubuntu das Paket network-manager-openvpn. Dies können Sie mittels Paketmanager installieren. Anschließend importieren Sie die Datei client.ovpn.

Der Netzwerkmanager holt sich alle relevanten Daten aus der ovpn-Datei, und Sie müssen im Prinzip nichts weiter machen. Auf Wunsch können Sie das Passwort hinterlegen. Davon ist allerdings aus Sicherheitsgründen abzuraten.

Bildergalerie:
OpenVPN - Einwahl unter Windows und Linux
Von hier aus wird getestet, ob wir alles richtig gemacht haben.
OpenVPN - Einwahl unter Windows und Linux
Wir können uns einwählen und die Adressen 192.168.150.50 und 192.168.50.1 anpingen.
OpenVPN - Einwahl unter Windows und Linux
Mit dem Netzwerk-Manager lässt sich die Client-Verbindung schnell einrichten.
OpenVPN - Einwahl unter Windows und Linux
Das hinzufügen einer VPN-Verbindung ist wirklich ein Kinderspiel.
OpenVPN - Einwahl unter Windows und Linux
Wenn Sie den Netzwerk-Manager verwenden, haben Sie schnell Zugriff auf die sichere Einwahl.
OpenVPN - Einwahl unter Windows und Linux
Diese Methode funktioniert eben so gut, wie über die Kommandozeile.
OpenVPN - Einwahl unter Windows und Linux
Mit nur zwei Mausklicks wählt sich der Client ein.
OpenVPN - Einwahl unter Windows und Linux
Unter Windows ist die Einwahl ebenfalls ein voller Erfolg.
OpenVPN - Einwahl unter Windows und Linux
Mit dieser Methode haben Sie einen Schnellzugriff auf die VPN-Verbindung.

Anschließend können Sie die Verbindung über den Netzwerkmanager aufrufen. Unter Windows klappt das ebenso. Die Entwickler haben ein Installationspaket zur Verfügung gestellt, das eine GUI bietet. Sobald die Software eingespielt ist, können Sie die Einwahl mittels rechten Mausklicks auf die ovpn-Datei starten.

Unter Windows können Sie auch das kleine Symbol nach dem Start der OpenVPN-GUI verwenden. Dazu müssen Sie die notwendigen Dateien in das Unterverzeichnis config des Installationsverzeichnisses kopieren.

Wichtig: Unter Windows Vista und 7 müssen Sie die OpenVPN-GUI als Administrator aufrufen. Ansonsten kann die Software die virtuelle Netzwerkkarte nicht erzeugen. Sollte es dennoch Schwierigkeiten geben, prüfen Sie die Firewall-Einstellungen des Client-Systems prüfen. Ist Ihnen das zu aufwendig, dann können Sie dem System mitteilen, die entsprechende exe-Datei immer als Administrator zu starten.

Schwarze Liste für Einwahlzertifikate

Selbstverständlich hat der Administrator die Möglichkeit, ein Zertifikat vor dem Ablauf seiner Gültigkeit zu sperren. Dafür kann es mehrere Gründe geben, zum Beispiel, dass ein Anwender die Firma verlässt oder der Verdacht besteht, dass ein spezieller Zugang kompromittiert wurde. Lesen Sie dieses Kapitel bitte bis zum Ende. Der Administrator muss sämtliche Schritte durchführen, um eine unerwünschte Einwahl zu verhindern.

Um das entsprechende Zertifikat unwirksam zu machen, begeben wir uns wieder in das Verzeichnis easy-rsa. In unserem Beispiel ist das /etc/openvpn/examples/easy-rsa/2.0. Dort rufen Sie zunächst wieder . ./vars auf. Wollen Sie nun ein Zertifikat unwirksam machen, geben Sie den Befehl ./revoke-full <client>. Die Ausgabe error 23 am Ende des Scripts ist korrekt, da der Server das Zertifikat nicht mehr findet.

Guter Fehler: Ein error 23 sagt uns, dass das Zertifikat gesperrt wurde. Ausgesperrt ist der Anwender allerdings noch nicht.

Das revoke-Script hat nun eineCRL-Datei (crl.pem - Certificate Revocation List) im Unterverzeichnis keys generiert. Diese kopieren Sie an die Stelle, an der sie der Server lesen kann. In unserem Beispiel nehmen wir /etc/openvpn. Danach sagen Sie dem Server, dass er diese Liste verwenden soll, indem Sie in der Datei server.conf die Zeile crl-verify crl.pem einfügen. Sehr wichtig ist, dass sie den OpenVPN-Dienst nun neu starten, um die Änderungen wirksam zu machen. Erst jetzt verweigert der Server eine Einwahl des unerwünschten Zertifikats.

Rien ne va plus: Dieses Zertifikat darf sich nun nicht mehr einwählen und wird abgelehnt.

Die CRL-Datei wird übrigens jedes Mal ausgelesen, wenn sich ein Client mit dem Server verbindet. Somit können Sie diese Datei aktualisieren, auch wenn der OpenVPN-Server läuft. Sollte der Client, dessen Zertifikat Sie sperren wollen, bereits verbunden sein, haben Sie zwei Möglichkeiten.

Einer ist verbunden: Derzeit ist nur der Nutzer tecchannel auf dem VPN-Server eingewählt.

Entweder Sie starten den OpenVPN-Dienst neu und werfen alle verbundenen Clients raus, oder Sie verbinden sich via telnet zur Managementkonsole und deaktivieren nur den gewünschten Anwender. Wollen sie die Managementschnittstelle nutzen, müssen Sie diese via server.conf und der Syntax management <IP-Adresse> <port> <Passwort-Datei> starten.

Fazit

Einen OpenVPN-Server einzurichten ist gar nicht so schwer, wenn man sich ein wenig damit beschäftigt hat. Bei der Einrichtung sollte man sich Zeit nehmen und die Konfiguration in aller Ruhe vornehmen, denn es existieren einige Fallstricke, die man im Eifer des Gefechts übersehen kann. Ein kleiner Tippfehler beispielsweise oder verschieden eingestellte Parameter in der client.conf, und server.conf können leicht zu Frust führen. Daher sollten Sie langsam konfigurieren und alles zweimal überprüfen. Dann dürfte Ihr eigener Einwahlserver in weniger als einer Stunde betriebsbereit sein.

Diese Stunde Zeit zu investieren zahlt sich aus. OpenVPN ist kostenlos, und somit können Sie auf teure Komplettpakete verzichten. Die hier vorgestellte Einwahllösung gilt als sicher, und ihre Mitarbeiter können bequem von überall auf das interne Netzwerk zugreifen.

Die hier vorgestellte Lösung funktioniert gut und stabil. Es gibt allerdings viele Schrauben, an denen sich drehen lässt. Wenn Sie Ihren OpenVPN-Server einem Finetuning unterziehen wollen, sollten Sie die Dokumentation zu Rate ziehen. Das Handbuch ist gut, allerdings nur in englischer Sprache vollständig. Bei der Suche von Fehlern kann ein Blick in die FAQ ebenfalls nicht schaden. Wer sich gut mit Netzwerken auskennt, tut sich vor allem bei der Fehlersuche wesentlich leichter. (tecchannel; mje) (wl)