VNC absichern
Auf Linux Servern benutzt man in der Regel SSH zur Anmeldung. Für gewöhnlich ist auf dem System gar keine grafische Oberfläche installiert. Verwendet man den Server aber auch als entfernten Desktop, dann möchte man auf diesem auch arbeiten. Ein sehr beliebtes Service ist dabei VNC. Leider ist dieses sehr unsicher – mit einigen Tricks schafft man aber auch dieses sicher einzurichten. Ich zeige euch wie ihr VNC absichern könnt!
VNC absichern
Ich habe bereits anhand dem Raspberry Pi und einem Debian 8 vServer gezeigt wie man einen VNC Server installiert. Das Tutorial verwendet dabei den TightVNCServer. Das ist einer der populärsten VNC Server unter Linux. Standardmäßig wird der freigegebene Bildschirm auf Port 590X, wobei X der Nummer des Bildschirms entspricht, übertragen. Die Übertragung selbst ist zwar durch Benutzername und Passwort geschützt, läuft aber komplett unverschlüsselt. Es wäre recht einfach die Daten abzuzweigen und so Tastenklicks oder sichtbare Logins und Passwörter abzufragen.
VNC Port nicht offen lassen
Sobald man den VNC Server erstmalig startet wird man gezwungen ein Passwort zu definieren. Unter diesem ist die Übertragung geschützt. Das ist zwar gut, jedoch ist die Passwortlänge auf 8 Zeichen begrenzt und es gibt keinen Schutz dagegen beliebige Passwortkombinationen endlos auszuprobieren. Das macht VNC absichern schon recht schwer. Dieser Basisschutz ist aber sowieso sinnlos, da die Übertragung unverschlüsselt abläuft und man diese im Netzwerk recht einfach abfangen kann. Für einen im Heimnetzwerk stehenden Rechner mag das durchaus kein Problem sein, bei einem Server ist das leider etwas anderes. Falls man wirklich eine ungesicherte Verbindung zulassen will, dann unbedingt nur für einen Benutzer mit eingeschränkten Rechten und niemals Root!
Will man den Standardport nicht verwenden und überhaupt den Zugriff aus dem Internet auf VNC verbieten, dann muss man den Parameter -localhost verwenden. Mit diesem Beispiel wird der VNC Server gestartet und ist nicht wie gewohnt über Port 590X erreichbar, sondern nur lokal:
vncserver :1 -localhost
SSH Tunneling
Der eine oder andere mag fragt sich nun, was ein VNC Server bringt, der nur lokal erreichbar ist. Die Antwort darauf ist folgende: über einen SSH Tunnel kann man eine VNC Verbindung absichern. Dabei wird die komplette Übertragung durch die SSH Verschlüsselung abhörsicher. Um die VNC Verbindung aufzubauen muss man nun auch das Benutzerpasswort eingeben. Erstellen kann man den SSH Tunnel wie folgt:
ssh -L 5901:localhost:5901 -N -f -l benutzername domain.com
oder alternativ über die IP Adresse:
ssh -L 5901:localhost:5901 -N -f -l benutzername 192.168.0.1
VNC Client für SSH Tunnel
Die Qualität eines VNC Client Programms offenbart sich darin, ob es die Option für einen SSH Tunnel anbietet oder nicht. Leider scheiden da sehr viele, auch sehr bekannte Client Programme aus. Ich persönlich verwende da unter Linux Remmina. Dieses Programm funktioniert sehr gut und bietet auch alle nötigen Einstellungen an. Ganz nebenbei kann funktioniert damit auch das RDP Protokoll und man kann damit entfernte Windows Desktops anzeigen lassen. Für einen SSH Tunnel müssen nicht nur die normalen VNC Einstellungen gemacht werden:
dazu kommen auch noch die SSH Einstellungen. Bemerkenswert ist, dass der komplette Funktionsumfang angeboten wird, sogar die Authentifizierung über SSH Keys
Fazit
Mit relativ wenig Aufwand kann man VNC absichern. Der VNC Server Zugriff wird über einen SSH Tunnel drastisch sicherer. Über SSH funktioniert die VNC Verbindung zuverlässig, einziger Nachteil ist, dass zahlreiche VNC Client Programme die zusätzlichen Einstellungen für einen SSH Tunnel nicht erlauben oder anbieten. Im nächsten Teil zeige ich, wie man am Server ein Skript erstellt, welches beim Systemstart automatisch einen VNC Server startet.
Welchen VNC Client verwendet ihr? Wie könnte man die VNC Verbindung noch absichern oder optimieren? Was haltet ihr vom Thema VNC absichern?