OpenVPN

Overview

  • eingelebter Standard als VPN Protokoll
  • Open Source & transparente Entwicklung
  • Nutzt PKI & SSL/TLS für den Schlüsselaustausch
  • Für viele Plattformen verfügbar
  • Ermöglicht Authentifizierung & Sicherung der Integrität

Authentifizierungsmethoden

  • Static Key / Pre-Shared-Key (PSK)
  • Zertifikate mittels PKI (Public Key Infrastructure)
  • Benutzername & Passwort (nicht empfohlen)

Static Key (PSK) Modus

Hierbei wird ein Schlüssel erzeugt, der vom Server und Client gleichermaßen genutzt wird.

  • Kein PKI notwendig
  • Zügig eingerichtet
  • Verbindet zwei Endpunkte miteinander (site to site VPN)
    • Nur 1 Client & 1 Server
    • Kein Multi-User Setting
  • Bietet kein Perfect Forward Secrecy (PFS)

TLS Modus

Hier wird ein gemeinsames Zertifizierungsinstitut (CA) genutzt durch die für den Server und die Clients Zertifikate (Certs) ausgestellt werden.

  • Hoher Maß an Sicherheit
  • Jedes Peer benötigt ein eigenes Cert/Key Paar
  • Alle Certs sind vom selben CA signiert
    • Ansonsten kein TLS-Handshake und keine TLS-Verbindung möglich

Zertifikate können mittels OpenVPN easy-rsa erstellt und widerrufen werden.

Benutzername & Passwort

  • Klassische Authentifizierung via Benutzername & Passwort (mit verify-client-cert none|optional|require im Server)
  • Ab OpenVPN 2.0 sichere & verschlüsselte Übertragung der Zugangsdaten
  • Integrierbar mit bereits existierenden Systemen wie LDAP oder SAML
  • TLS Zertifikat als zweiten Faktor möglich

Multi Factor Authentication

Auch Multi Factor Authentication z.B. mittels TOTP und OKLA sind weitere Möglichkeiten, die zusätzlich eingebunden werden können.1

Konfiguration

Eine gute Grundlage zur Konfiguration bieten die Beispeilkonfigurationen unter /usr/share/doc/openvpn bzw. /usr/share/doc/packages/openvpn. Hier findet man sowohl einen server.conf als auch client.conf. Dort sind lediglich die entsprechenden Parameter anzupassen.

1. Zertifikate generieren

Hier benutzen wir OpenVPN easy-rsa. Alternativ ist es auch möglich andere Tools wie bspw. OpenSSL für die Public Key Infrastruktur zu nutzen. Auch easy-rsa nimmt hier Gebrauch von OpenSSL, bietet jedoch die für OpenVPN relevanten Funktionen benutzerfreundlicher in dem easy-rsa Tool gebündelt an.

CA einrichten

$ ./easyrsa init-pki
$ ./easyrsa build-ca

CSR auf Client-System

Das Kommando nicht auf dem selben System wie das CA ausführen

$ ./easyrsa init-pki
$ ./easyrsa gen-req ClientName

Client CSR importieren

$ ./easyrsa import-req /tmp/client-csr.req ClientName

Client CSR signieren

$ ./easyrsa sign-req client ClientName

DH Parameter generieren

$ ./easyrsa gen-dh

Zertifikat für den Server erstellen

$ ./easyrsa build-server-full server

Statische IP für den Nutzer Falls erforderlich, die Konfigurationsdatei server.conf bearbeiten, um einem CLient eine persistente statische IP zuzuweisen. In dem Fall gehe wie folgt vor:

$ mkdir /etc/openvpn/ccd
$ chmod 744 /etc/openvpn/ccd
$ chown -R nobody:nogroup /etc/openvpn/ccd
$ vim /etc/openvpn/ccd/ClientName

In der Datei /etc/openvpn/ccd/ClientName folgendes notieren:

#ifconfig-push Client-IP   Server-IP
ifconfig-push   10.24.1.12  10.24.1.1

Bei einer tap Verbindung kann auch folgende Schreibweise verwendet werden im CCD:

ifconfig-push 10.24.1.2 255.255.255.0

Routen mitteilen

Dem Client können mittels entsprechender Einträge in der server.conf bzw. in der CCD Datei bestimmte Routen mitgeteilt werden:

#    route  Netz-ID    Netzmaske     Gateway   Metrik
push "route 192.168.1.0 255.255.255.0 192.168.1.1 1"
push "route 0.0.0.0     0.0.0.0       10.24.1.1   0"
push "route-ipv6 2000::/3"
2. Server starten

Beispielkonfiguration entsprechend bearbeiten und Server starten:

$ sudo openvpn --config server.conf
3. Client verbinden

Beispielkonfiguration entsprechend bearbeiten und Client verbinden:

Linux

$ sudo openvpn --config client.conf

bzw. eine .ovpn Konfiguration.

macOS

Hier nutzt man am besten das Tool Tunnelblick. Anschließend auf die .ovpn doppelt klicken. Falls Tunnelblick nach Zugangsdaten fragt, den Benutzernamen & Passwort des lokalen Accounts auf dem MacBook eingeben. Anschließend auf das Tunnelblick Icon oben klicken und mit dem geladenen VPN-Profil verbinden.

Windows

Das OpenVPN Client herunterladen & installieren. Dabei möglichst die Default-Werte beibehalten. Bei Bedarf kann unter Netzwerkgeräten in der Systemsteuerung der Gerätename des TAP-Win32 Adapters umbenannt werden. Anschließend einfach auf das .ovpn Profil doppelt klicken und mit dem geladenen VPN Profil verbinden.

Server / Client als Dienst starten (Linux)

Mittels systemctl ist es möglich, Dienste zu konfigurieren. Ein Beispiel-Dienst könnte wie folgt aussehen:

/usr/lib/systemd/system/openvpn@server.service

[Unit]
Description=%i OpenVPN tunnel
Before=systemd-user-sessions.service
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /dir/to/server.conf --daemon --writepid /run/openvpn/%i.pid --status /run/openvpn/%i.status
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/openvpn/%i.pid
KillMode=process
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
DeviceAllow=/dev/net/tap rw
RestartSec=5s
Restart=on-failure

[Install]
WantedBy=multi-user.target

Nun kann der Dienst mittels systemctl <status | start | restart | stop> openvpn@server.service verwaltet werden.