Sicherheit des Tunnels erhoehen

Aus OpenVPN Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Privilegien senken

Aus Sicherheitsgründen sollte man den Serverprozess anweisen, seine Privilegien nach der Initialisierung (Keys einlesen, TUN öffnen, ifconfig, ...) zu senken. Dies funktioniert momentan nur auf Linux. Dazu muss man zuerst einen eigenen Benutzer und eine eigene Gruppe für OpenVPN erstellen:

$ groupadd openvpn
$ useradd -s /sbin/nologin -d /etc/openvpn openvpn

Danach fügt man folgende Zeilen in die Server/Client.conf ein:

user openvpn
group openvpn

persist-tun
persist-key

(letztere Zeilen führen dazu, dass das TUN Device auch nach einem Reset-Signal offen bleiben und die Keyfiles nicht neu eingelesen werden)

PKI statt Pre-Shared Key

Sogar für nur einen Client lohnt sich der Aufwand einer PKI. Beim Pre-Shared Key wird keine Authentifizierung durchgeführt, weiters ändert sich der Schlüssel nie. Anders bei PKI: Der Schlüssel wird bei jeder Session neu ausgehandelt.

Private Schlüssel der Clients sollten immer mit einem Passwort geschützt werden.

Man-in-the-middle Attacken verhindern

Um Man in the middle Attacken zu verhindern, muss man den Serverkey mit Serverextension erzeugen. Bei EasyRSA geschieht dies automatisch über das build-key-server Script.

Weiters wird in die Konfigurationsdateien der Clients folgendes eingetragen:

ns-cert-type server

Dadurch wird der Client gezwungen, sich nur zu einem OpenVPN Server mit einem Server-Zertifikat verbinden. Ein potentieller Angreifer aus eigenen Reihen kann so nicht sein Client-Zertifikat nutzen, um selbst einen Server zu simulieren.

DoS Attacken verhindern

Dies bedarf einer verteilten TLS-Authentifikations-Datei. Diese kann auf einem Rechner mit dem folgenden Befehl erzeugt werden

openvpn --genkey --secret ta.key

und muss dann sowohl auf Server als auch auf allen Clients präsent sein.

Am Server und Client wird der Schutz in die Konfigurationsdatei durch folgende Zeile aktiviert:

tls-auth ta.key

Als zweiter Parameter kann eine Richtung angegeben werden (z.B. 0 auf dem Server und 1 auf den Clients), ist jedoch nicht erforderlich.

Achtung: Diese zusätzliche Authentifizierung bietet keinen zusätzlichen Verschlüsselungsschutz, sondern signiert lediglich alle TLS Pakete. Dadurch kann der Server schon vor dem Handshake einen unberechtigten Client erkennen und die Verbindung beenden. Es dient daher lediglich als eine Art Firewall.

Nur mit einem Server verbinden

Damit Clients sich wirklich nur mit einem spezifischen Server verbinden, folgende Zeile in der Clientkonfiguration ergänzen:

tls-remote server01

server01 ist dabei der Common Name (CN) des Serverzertifikats.

Ändern des Verschlüsselungsalgorithmus

Es sei zu erwähnen, dass OpenVPN kein Public-Key-Verfahren zur Verschlüsselung der Daten nutzt, sondern damit lediglich Session Keys aushandelt. Diese Session Keys werden für eine symmetrische Verschlüsselung genutzt.

Mit der folgenden Befehlszeile werden alle verfügbaren Algorithmen angezeigt:

openvpn --show-ciphers

Zum Ändern des Algorithmus folgende Zeile in die Server- und Clientkonfigurationen ergänzen:

 cipher ciphername

Standardmäßig wird Blowfish genutzt. Mit none kann die Verschlüsselung komplett deaktiviert werden. (nicht zu empfehlen!)

Mit keysize kann die Größe der verwendeten Session Keys angepasst werden. Es gibt jedoch Limitierungen abhängig vom verwendeten Algorithmus.

Erneuern der Session Keys

In regelmäßigen Abständen werden die Session Keys für die symmetrische Verschlüsselung erneuert. Dieser Wert kann mit der folgenden Konfigurationszeile beeinflusst werden:

reneg-sec 3600

Bedeutet alle 3600 Sekunden (= jede Stunde) die Keys erneuern.

Hinweis: Zu häufiges Erneuern der Schlüssel kann zu einem Verbindungsabbruch führen.

Username/Passwort Authentifikation

OpenVPN kann nach dem TLS-Handshake nach einer Usernamen-Passwort-Kombination fragen. Diese werden dann verschlüsselt an den Server übertragen.

Hinweis: Dies dient lediglich als ein zusätzlicher Schutz und sollte nicht ohne TLS genutzt werden.

Persönliche Werkzeuge