OpenVPN härten: Unterschied zwischen den Versionen

Aus
Zeile 131: Zeile 131:
= Zusammenfassung =
= Zusammenfassung =
Ich habe wie folgt die OpenVPN Konfiguration erweitert, die für meine ds716+, Windows 10 und Android 5.x funktioniert. Eine einbusse der Performance oder erhöhten Batterieverbrauch konnte ich nicht feststellen
Ich habe wie folgt die OpenVPN Konfiguration erweitert, die für meine ds716+, Windows 10 und Android 5.x funktioniert. Eine einbusse der Performance oder erhöhten Batterieverbrauch konnte ich nicht feststellen
'''Server''':
'''Server''':
<pre>
<pre>
Zeile 141: Zeile 142:
</pre>
</pre>


Windows Client:
'''Windows Client:'''
<pre>
<pre>
cipher AES-256-CBC
cipher AES-256-CBC

Version vom 10. Juni 2016, 07:45 Uhr

Einleitung OpenVPN Verbindung

Eine OpenVPN-Verbindung zwischen Server und Client besteht aus zwei Kanälen. Einem Steuer-/Kontrollkanal und einem Datenkanal. Der Client initiiert die Verbindung durch eine TLS-Sitzung innerhalb der Kontrollkanal bei der Anmeldeinformationen ausgetauscht werden. Wurde diese Erfolgreich durchgeführt, wird der Datenkanal etabliert. Im Datenkanal wird sämtlicher Traffic verschlüsselt übertragen.

OpenVPN Standard

Die Standardkonfiguration des OpenVPN auf einem Synology Server ist im Default auf AES 128 (CBC), SHA-1 eingestellt. In der Regel genügt dieser Wert. Will man eine erhöhte Sicherheit, kann man dies härten. Dazu muss man Shell-Zugriff auf seinem Server haben.

Voraussetzungen

  • Umgang mit der Konsole (bei Verwendung des SSH-Zuganges)
  • Grundkenntnisse im Umgang mit Shell (vi, nano usw.)

DSM/Clients

  • getestet mit DS716+ und DS211+ mit installiertem VPN Packets
  • DSM 6.x
  • Windows 10, Android 5.0, OpenVPN 2.3.10

Wichtige Pfade

Folgende Pfade sind für die härtung wichtig, bez. zum testen erforderlich:

OpenVPN starten/neu starten/stoppen:

/bin/sh /var/packages/VPNCenter/target/scripts/openvpn.sh (start|restart|stop)

Konfiguration, hier werden die jeweiligen zuätzlichen Optionen eingetragen:

vi /usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf

1. nobody für den Deamon

Standardmässig läuft der OpenVPN Dienst mit dem User root. Dies ist z.b. bei einem Einbruch ins System ein grosses Problem, da damit der Einbrecher hohe Rechte besitzt. Es empfiehlt sich einen neuen Benutzer „openvpn_server“ zu erstellen oder den User/Gruppe „nobody“ zu verwenden:

Den Benutzer, die Gruppe hinterlegt man in der openvpn.config:

user nobody
group nobody

Nach dem neustart des Dienstes kann man die Berechtigungen kontrollieren:

netstat -tlnp | grep openvpn
tcp 0 0 127.0.0.1:1195 0.0.0.0:* LISTEN 10268/openvpn
ps aux | grep openvpn

Der OpenVPN Server wird neben dem Hauptprozess (als nobody) auch 2 Childprozesse gestartet. Diese werden benötigt um Routing zu löschen, da der Hauptprozess zu wenige Privilegien hat.

2. tls-auth

Mit einer HMAC Signatur werden alle Pakete die bei der TLS Handshake involviert sind signiert. Werden Pakete ohne die richtige HMAC Signatur gesendet/empfangen werden sie auf der Stelle verworfen. Damit verhindert man:

  • DoS- Attacken oder Port-flooding auf dem OpenVPN UDP port.
  • Port scanning um zu verhindern ob der Server UDP Port abhört
  • Buffer overflow Sicherheitslecks in the SSL/TLS-Implementation
  • SSL/TLS Handshake Initiierung eines nicht-autorisierenden Computers (Grundsätzlich wird die Verbindung fehlschlagen, da das Zertifikat falsch sein wird. Mit der tls-auth Methode wird aber die Verbindung schon an einem früheren Zeitpunkt gekappt)

Wir generieren wie folgt eine Signatur:

openvpn --genkey --secret usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key

Auf dem OpenVPN Server tragen wir folgende Zeile ein:

tls-auth /usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key 0

Auf dem OpenVPN Client (Windows) tragen wir folgende Zeile ein:

tls-auth hmac.key 1

3. Cipher (Chiffre)

Der VPN Datenkanal kann auf der Synology (DS716+) problemlos auf AES 256bit, im CBC Modus umgestellt werden. Im Standard wird Blowfish-128, bez. bei Synology AES 128 verwendet. Um generell herauszufinden, welche Cipher verfügbar sind, kann diese mit folgendem Befehl anzeigen lassen:

openvpn --show-ciphers

Auf dem OpenVPN Server/Client tragen wir folgende Zeile ein:

cipher AES-256-CBC

Hinweis: Auf Android Geräten ist AES, Blowfish, und DES Ciphers supportet. Gerade AES ist die beste Wahl für Android mit ARM Prozessoren da sie am effizientesten arbeiten.

4. authentication digest (Kryptologische Hashfunktion)

Es empfiehlt sich die Hashfunktion von SHA-1 auf einen SHA-2 Standard anzuheben. Hier kann man SHA-512 verwenden.

Man kann mit folgenden Befehl alle Digests anzeigen lassen:

openvpn --show-digests

Auf dem OpenVPN Server/Client tragen wir folgende Zeile ein:

auth SHA512


5. tls-cipher (Cipher Suite, Chiffrensammlung)

In der letzten Option legt man die Cipher Suite fest, die der Server unterstützt. Dies hilft dabei, dass man keine unsicheren Methoden verwendet.

Damit man den Kontroll-Kanal mit dem stärksten Chiffrensammlung (cipher suites) einstellen kann muss man sich bewusst sein, das nicht jede Chiffrensammlung in jeder OpenVPN Version verfügbar ist. Die Verschlüsselung AES in GCM Modus mit TLS 1.2 verwendet SHA2, AES und Camellia in CBC Modus verwendet SHA1 über TLS 1.0.

[1] community.openvpn.net

Eine Auflistung aller Cipher Suiten kann man sich mittels folgendem Befehl holen:

openvpn --show-tls

Erklärung:

* CBC = Cipher Block Chaining Mode
* GCM = Galois/Counter Mode
* AES = Advanced Encryption Standard

Folgende Einstellungen habe ich getestet:

OpenVPN 2.3.2 und älter

  • Die Zeile ohne Umbrüche eintragen
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-256-CBC-SHA:
TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA:TLS-DHE-RSA-WITH-AES-128-CBC-SHA:TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA

OpenVPN 2.3.3 und neuer

tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256 

Zusammenfassung

Ich habe wie folgt die OpenVPN Konfiguration erweitert, die für meine ds716+, Windows 10 und Android 5.x funktioniert. Eine einbusse der Performance oder erhöhten Batterieverbrauch konnte ich nicht feststellen

Server:

cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
user nobody
group nobody
tls-auth /usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key 0

Windows Client:

cipher AES-256-CBC
auth SHA512
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
tls-auth hmac.key 1