OpenVPN auf einem Synology NAS härten
OpenVPN auf einem Synology NAS härten

OpenVPN

 OpenVPNOpenVPN ist ein Programm zum Aufbau eines Virtuellen Privaten Netzwerkes (VPN) über eine verschlüsselte TLS-Verbindung. Zur Verschlüsselung werden die Bibliotheken des Programmes OpenSSL benutzt. OpenVPN verwendet entweder UDP oder TCP zum Transport. Die Synology NAS kann durch das Installieren des VPN-Packets 3 VPN Arten: PPTP, OpenVPN und L2TP/IPSec. Dieser Artikel beschäftigt sich ausschliesslich mit dem OpenVPN.

OpenVPN: Ein kleiner technischer Exkurs

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.

Auf der Synology NAS

Folgende Pfade sind für die härtung wichtig, bez. zum testen erforderlich: OpenVPN neu starten, stoppen und neu starten
 /bin/sh /var/packages/VPNCenter/target/scripts/openvpn.sh (start | stop | restart)
Konfiguration
 vi /usr/syno/etc/packages/VPNCenter/openvpn/openvpn.conf

Die Hardware

Die folgenden Einstellungen beziehen sich auf eine ds716+. Bei älteren und nicht-Intel-NAS muss auf jeden Fall getestet werden wie sich die erhöhte Sicherheit auf die Performance/Geschwindigkeit auswirkt. Die ds716+ enthält einen speziellen AES-NI (Befehlssatzerweiterung).

AES-128 vs AES-256

Gegen den AES sind zurzeit keine praktikablen Angriffe bekannt, deshalb kann man sich fragen, ob der Verlust von bis zu 30% der Performance sinnvoll ist. Ein führender Kryptografie-Experte hat in mehreren Artikeln sich für AES-128 ausgesprochen, da AES-256 Designschwächen enthalten. Man spricht davon das AES-128 stärker ist, als AES-256 (Thema „key schedules“ und Zufallszahlengenerator).

Der 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. Hinweis: Bei einem Update des Pakets können Konfigurationen verloren gehen. Es empfiehlt sich immer ein Backup der Einstellungen anzulegen.

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:
 adduser --system --shell /usr/sbin/nologin --no-create-home openvpn_server
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
Prozesse:
 ps aux | grep 10268
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. Sofern man ipkg installiert hat,  kann man via lsof die Benutzten Librarys testen.
 lsof -p 10268
Mit pstree die geöffneten Prozesse
 pstree -s -p -u -g | grep openvpn

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
Diese wird dann auf dem Server/Client hinterlegt. Server:
 tls-auth /usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key 0
Windows Client:
 tls-auth hmac.key 1

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
In der OpenVPN Server/Client tragen wir folgende Zeile ein:
 cipher AES-256-CBC
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.

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
In der OpenVPN Konfiguration wird folgendes hinterlegt:
 auth SHA512

tls-cipher (Cipher Suite, Chiffrensammlung)

In der letzten Option legt man die Cipher Suite fest, die der Server unterstützen wird. 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. https://community.openvpn.net/openvpn/wiki/Hardening#Useof--tls-cipher Eine Auflistung aller Cipher Suiten kann man sich mittels folgendem Befehl holen:
 openvpn --show-tls
  • CBC = Cipher Block Chaining Mode
  • GCM = Galois/Counter Mode

Ich habe folgende Einstellungen getestet:

Für ältere Clients, d.h. vor der Version 2.3.2
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
Die Folgenden Clipher Suiten sind für OpenVPN Version 2.3.3 und höher. Sie ist generell auf TLSv1.2.
 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
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


Nachtrag 26.04.2017

Mit dem Update 1.3.5-2759 kann man den Wert für "auth" und "cipher" direkt über das GUI der Synology NAS eintragen.

Nachtrag 06.04.2018

Der Befehl adduser funktioniert ohne ipkg Packet nicht mehr. Daher einerseits per ipkg nachinstallieren, per Webinterface oder per Befehel synouser

Weitere Informationen

  • 2018/05/04

    Rene Hellmann

    Hallo Daniel,
    auf dsm 6.x (aktuelle Beta) bekomme ich weder
    sudo adduser --system --shell /usr/sbin/nologin --no-create-home openvpn_server
    noch
    sudo openvpn --genkey --secret usr/syno/etc/packages/VPNCenter/openvpn/keys/hmac.key
    ausgeführt ???
    bin per ssh als root auf der diskstation angemeldet
    Was mache ich falsch? (bin kein Linux-Freak!)

    Gruß René

Information

Werbung oder Ähnliches sind nicht erlaubt, daher wird jeder Beitrag geprüft und freigegeben.
Advertising, etc. are not allowed, so any contribution is reviewed and approved.
Facebook-Webadress are not allowed, Facebook als Webadresse ist nicht erlaubt


* Die E-Mail wird nicht veröffentlicht / The email will not be published
** Bitte Zahl eintragen / Please enter the number
Ihr Kommentar
?
?
captcha Image?
?
 

Tippsammlung

Kleine Tippsammlung für mich und dijenige die sich auf meine Webseite verirrt haben.

Archiv

JahrArchiv
Tag(s):