Sicherheit des Tunnels erhoehen
Aus OpenVPN Wiki
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 mit Server zu 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.
Weitere Informationen auf dieser Seite: Authentifizierung am Server. writing essay
