OpenVPN (deutsch)

From
Jump to navigation Jump to search

Einleitung: OpenVPN ist eine leicht zu implementierende und zu wartende VPN-Applikation, die bis auf das notwendige TUN- bzw. TAP-Device komplett im Userspace arbeitet. Dieses Dokument beschreibt die Installation sowohl des Servers (VPN-Gateway) als auch der Clients unter den verbreiteten Betriebssystemen Windows, Linux, Mac OS X und OpenBSD.


Was wird gebraucht?

  • OpenVPN-Programm
  • TUN/TAP-Schnittstelle
  • Konfigurationsdatei für OpenVPN (optional, aber empfohlen)
  • PKI = Public-Key-Infrastruktur (optional, für größere Installationen empfohlen)


Funktionsweise

Grundlage des OpenVPN-Tunnels ist das openvpn-Programm, welches sowohl auf Server als auch auf Clientseite auf einem UDP-Port läuft und mit Hilfe des tun/tap-Treibers eine virtuelle Netzwerkschnittstelle anlegt, welche jeweils ein Ende des Tunnels darstellt. Im Gegensatz zum PPP, welches ähnlich arbeitet, kann der gesamte Netzwerkverkehr auf Grundlage von OpenSSL verschlüsselt werden.

Zur Authentifizierung von Server und Client können zwei Verfahren verwendet werden:

  • Shared-Secret-Authentifizierung (auch Static-Key-Authentifizierung)
  • Zertifikatbasierte Authentifizierung

Shared-Secret-Authentifizierung

Die Shared-Secret-Authentifizierung basiert auf einem symmetrischen Verschlüsselungsverfahren. Dabei müssen die Kommunikationspartner den gemeinsamen Schlüssel (shared key) zuvor über einen sicheren Kanal austauschen. Der gesamte Tunnel-Netzwerkverkehr wird dann mit diesem Schlüssel verschlüsselt und kann von jedem, der ebenfalls den Schlüssel besitzt entschlüsselt werden. Daher muss der Schlüssel bei Kompromittierung auf allen beteiligten Systemen ausgetauscht werden.

Zertifikatbasierte Authentifizierung

Die Zertifikatbasierte Authentifizierung basiert auf einem asymmetrischen Verschlüsselungsverfahren, über welches ein sicherer Kanal erzeugt wird. Da die asymmetrische Verschlüsselung erheblich langsamer im Vergleich zur symmetrischen Verschlüsselung ist, wird ein temporärer symmetrischer Zufallsschlüssel von einem Kommunikationspartner erzeugt und über den sicheren Kanal an sein Gegenüber geschickt. Bei Kompromittierung brauch dann nur noch das entsprechende Zertifikat gesperrt werden (siehe ). Allerdings ist für das Aufsetzen der Public-Key-Infrastruktur ein größerer Konfigurationsaufwand erforderlich.

Siehe auch:


Zertifizierungsstelle (CA) und Public-Key-Infrastruktur (PKI)

Certificate Revocation List (CRL) - Schwarze Liste mit ungültigen Zertifikaten

Installation

Zur Installation von Server und Client wird das openvpn-Programm und ein paar Bibliotheken benötigt. Da diese auf Server- und Clientseite die gleichen sind, reicht es eine Seite zu beschreiben. Auf der anderen Seite - also dem anderen Tunnelende - wird dann entsprechend nur die conf-Datei sowie der Schlüssel und die Zertifikate ausgetauscht.

Die Installationshinweise sind teilweise http://openvpn.sourceforge.net/install.html entnommen.

Windows

Zuerst wird das Installationspaket für OpenVPN und den TUN/TAP-Treiber von:

geholt.


Linux

Die Installation wird am Beispiel von SuSE-Linux beschrieben, sollte aber vom fähigen Systemadministrator auch auf andere Distributionen übertragen werden können.

SuSE-Distributionspaket (alt, unterstützt nur pre-shared Keys)

yast -i lzo openssl openvpn

OpenVPN 2.0 aus den Quellen installieren (besser, notwendig für PKI-Auth)

SuSE Linux

yast -i openssl-devel 
yast -i lzo-devel (ab SuSE 9.0)
(vor SuSE 9.0 - keine lzo-Bibliothek)
wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
tar xzf lzo-1.08.tar.gz
cd lzo-1.08
./configure
make
make install
# Die Version von OpenVPN ist evtl. anzupassen
# (mit Browser unter http://openvpn.sourceforge.net/beta/ herausfinden)
wget http://openvpn.sourceforge.net/beta/openvpn-2.0_beta15.tar.gz

tar xzf openvpn-2.0_beta15.tar.gz
cd openvpn-2.0_beta15

# Bei selbstübersetzter lzo-Bibliothek müssen die beiden Pfade angegeben werden:
#./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
./configure

make
make install

Als unprivilegierter Benutzer starten

Da OpenVPN Änderungen an den Netzwerkeinstellungen vornimmt (ifconfig/route), muss das Programm mit root-Rechten ausgeführt werden. Um den normalen Benutzern nicht das root-Passwort geben zu müssen, kann man statt dessen sudo verwenden. Als root nimmt man mit visudo folgenden Eintrag vor:

# Komma-separierte Liste der VPN-Nutzer
User_Alias  VPNUSER=vpnuser1, vpnuser2

# Zum testen des VPN sollte man das --daemon weglassen,
# um evtl. Fehler auf stdout zu erhalten.
Cmnd_Alias  OPENVPN=/usr/local/sbin/openvpn --config /etc/openvpn/SAR-VPN.ovpn --daemon
Cmnd_Alias  KILLOPENVPN=/usr/bin/killall openvpn

# NOPASSWD ist optional.
# Soll der Nutzer sein Passwort eingeben muessen lautet der Eintrag wie folgt:
#VPNUSER ALL=OPENVPN
#VPNUSER ALL=KILLOPENVPN
VPNUSER ALL=NOPASSWD:OPENVPN
VPNUSER ALL=NOPASSWD:KILLOPENVPN

In diesem Beispiel wird angenommen, dass die Konfigurationsdatei unter /etc/openvpn/SAR-VPN.ovpn und das openvpn-Programm unter /usr/local/sbin/openvpn zu finden ist.

Der Tunnel kann dann mit

sudo /usr/local/sbin/openvpn --config /etc/openvpn/SAR-VPN.ovpn --daemon

gestartet und mit

sudo killall openvpn

beendet werden.

Mac OS X

Die Installation erfolgt analog zu Linux (bei fehlender lzo-Bobliothek). Die Developer-Tools müssen installiert sein! (C-Compiler, make, openssl-devel, etc.) Da Mac OS X (aka Darwin) kein TUN-Device zur Verfügung stellt, muss es nachinstalliert werden. Hier findet man eine detailierte Installationsbeschreibung und ein vorkompiliertes kext-file: http://chrisp.de/en/projects/tunnel.html

wget http://www.oberhumer.com/opensource/lzo/download/lzo-1.08.tar.gz
# (oder mit Safari holen, falls wget nicht verfügbar)

tar xzf lzo-1.08.tar.gz
cd lzo-1.08
./configure
make
make install
# Die Version von OpenVPN ist evtl. anzupassen
# (mit Browser unter http://openvpn.sourceforge.net/beta/ herausfinden)
wget http://openvpn.sourceforge.net/beta/openvpn-2.0_beta15.tar.gz
# (oder mit Safari holen, falls wget nicht verfügbar)

tar xzf openvpn-2.0_beta15.tar.gz
cd openvpn-2.0_beta15
./configure --with-lzo-headers=/usr/local/include --with-lzo-lib=/usr/local/lib
make
make install


OpenBSD

Andere UNIX-Systeme (ohne TUN-Device)

Frontends


Konfiguration

Grundsätzlich können alle Konfigurations-Parameter dem openvpn-Programm an der Kommandozeile in der Form --parameter=wert mitgegeben werden. Alternativ kann man die Konfigurations-Parameter in eine Datei zeilenweise in der Form parameter wert schreiben und den Dateinamen mit dem Parameter --config Dateiname an der Kommandozeile mitgeben, z.B.:

openvpn --config openvpn.conf

Der erste Test

Zum Testen der OpenVPN-Installation sollte man zunächst eine Shared-Secret-Authentifizierung wählen, da diese einfach zu konfigurieren ist. Mit:

openvpn --genkey --secret static.key

erstellt man einen gemeinsamen Schlüssel (static.key), den man auf die beiden OpenVPN-Rechner mit den späteren Tunnelenden kopiert.


Angenommen, der Server hat die reale IP-Adresse 192.168.0.1 und der Client die IP-Adresse 192.168.0.2 kann man folgendermaßer eine erste Testverbindung aufbauen:

auf dem Server

openvpn --dev tun0 --remote 192.168.0.2 --ifconfig 192.168.10.1 192.168.10.2 --secret static.key


auf dem Client

openvpn --dev tun0 --remote 192.168.0.1 --ifconfig 192.168.10.2 192.168.10.1 --secret static.key


Der Server sollte dann durch den Tunnel vom Client aus über die virtuelle IP-Adresse 192.168.10.1 ansprechbar sein:

ping 192.168.10.1

analog ist der Client über die virtuelle IP-Adresse 192.168.10.2 erreichbar.

Szenarien

Außendienst-Mitarbeiter (Netz-zu-Host)

random

Transparente Fillialanbindung (Netz-zu-Netz)

Literatur