Fernwartung mit Freier Software

Grundlagen

Ein wichtiger Bestandteil der lernstick-Infrastruktur ist die Fernwartung, da es immer wieder Anwender gibt, die bei der Installation oder der Benutzung Hilfe brauchen.

Der erste Impuls, eine einfache und etablierte Software in die lernstick-Distribution zu integrieren, scheiterte daran, dass es leider bis jetzt noch keine wirklich einfache und etablierte Software zur Fernwartung im Open-Source-Umfeld gibt. Auch proprietäre (und trotzdem kostenlose) Software, wie z.B. TeamViewer, liess sich nicht auf dem lernstick integrieren, da entweder die jeweiligen Hersteller die Weitergabe ihrer Software nicht gestatteten oder in der (kostenlosen) Unterstützung von lernstick-Anwendern einen kommerziellen Einsatzzweck sahen und aus diesem Grund auf sehr heftigen Lizenzzahlungen bestanden. Also mussten wir wieder einmal eine Lösung auf Basis der bereits vorhandenen Open-Source-Komponenten aufbauen…

Bei der Recherche stellt man schnell fest, dass die meisten Open-Source-Programme, die Funktionen zur Fernwartung bereitstellen, VNC verwenden. VNC ist eine Client-Server-Software, bei der der Server die Bildschirmausgaben liefert und der Client die Bildschirmausgaben empfängt und die Maus- und Tastatureingaben des Benutzers an den Server schickt:

Wie so häufig im Open-Source-Umfeld gibt es in Debian (der Basis für den lernstick) verschiedene Softwarepakete für VNC. Wir haben uns für den VNC-Server x11vnc und für den VNC-Client xtightvncviewer entschieden.

Wenn man nun per VNC einem Anwender helfen möchte, so muss der Client auf unserer Seite mit folgendem Aufruf gestartet werden:

xtightvncviewer -listen

Ein Hilfe suchender Anwender muss die Verbindung zu uns mit folgendem Aufruf herstellen:

x11vnc -connect <unsere IP-Adresse>

Damit die Fernwartung auch über das Internet funktioniert, benötigen wir also für unsere eigene Supportstation eine öffentliche IP-Adresse. Wer über keine statische öffentlich IP verfügt, kann sich auch mit einer Kombination aus DynDNS und Portweiterleitung behelfen:

Mobile Supporter

Das ganze funktioniert wunderbar, hat jedoch einen entscheidenden Nachteil: Um Anwender zu unterstützen, müssen wir uns physisch immer direkt an der Supportstation befinden. Also brauchen wir noch eine Lösung, um von überall her auf den Bildschirm unserer Supportstation zugreifen zu können. Und das geht… wieder mit VNC!

Auf unserer Supportstation muss also ständig ein VNC-Server laufen. Dieser wird durch folgenden Aufruf gestartet:

x11vnc -forever

Jetzt könnte man unterwegs auch wieder einen VNC-Client starten, um auf die Supportstation zuzugreifen. Allerdings hat man nicht immer und überall eine VNC-Client-Software zur Verfügung. Aus diesem Grund haben wir auf der Supportstation Guacamole installiert, einen einfachen VNC-Client, der auf HTML5 basiert. Guacamole haben wir dann so konfiguriert, dass er auf den lokalen VNC-Server zugreift. So benötigt ein mobiler Supporter nur noch einen Browser und eine funktionierende HTTP-Verbindung zur Supportstation, um einem Anwender helfen zu können:

Absicherung

Im obigen Szenario werden alle Daten im Klartext übertragen, was gravierende Vertraulichkeitsprobleme (z.B. Mitschneiden von Bildschirminhalten, Passwörtern, …) mit sich bringen kann. Aus diesem Grund müssen beide Verbindungen durch Verschlüsselung der Daten abgesichert werden. Die Verbindung zum Supporter kann einfach abgesichert werden, indem anstatt HTTP die sichere Variante HTTPS verwendet wird. Dazu reicht es, Apache Tomcat, die Ausführungsumgebung von Guacamole, nach folgender Anleitung entsprechend zu konfigurieren: http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html

Zur Absicherung der VNC-Verbindung verwenden wir stunnel, ein universeller SSL-Tunneling-Dienst. Zunächst müssen wir auf der Supportstation ein Zertifikat erzeugen, z.B. mit openssl:

openssl req -x509 -nodes -day 36500 -subj /C=/ST=/L=/CN=tmp -newkey rsa:1024 \
-keyout zertifikat.pem -out zertifikat.pem

Dieses Zertifikat kann dann verwendet werden, um einen sicheren Tunnel an einem bestimmten Port anzubieten, der alle Daten an den VNC-Client weiterleitet (der an Port 5500 lauscht). Beispiel für einen sicheren Tunnel an Port 50000:

stunnel -f -P '' -p zertifikat.pem -d 50000 -r 5500

Der Anwender muss dann den Aufruf zum Verbindungsaufbau um die Option “-ssl TMP” ergänzen:

x11vnc -connect <unsere IP-Adresse> -ssl TMP

Jetzt wird eine verschlüsselte Verbindung zwischen Anwender und Supportstation aufgebaut. Somit sind beide Verbindungen gegen passives Abhören abgesichert:

Da die involvierten Zertifikate in diesem Szenario weder vom Supporter noch vom Anwender überprüft werden, ist die Verbindung nicht gegen Man-in-the-middle-Angriffe sicher. Die erforderlichen Massnahmen zur Absicherung gegen solche aktiven Angriffe würden jedoch den Rahmen dieses Artikels sprengen.

Vereinfachung

Da die benötigten Befehle recht kompliziert sind, haben wir eine grafische Oberfläche entwickelt, die sowohl für den Supporter als auch für den Anwender die syntaktischen Details versteckt. Der Supporter kann neben den sicheren Portnummern auch Bildeigenschaften wie Kompression, Qualität und Farbtiefe spezifizieren:

Da wir nicht die einzige Stelle sind, die Unterstützung für den lernstick anbietet, kann der Anwender aus einer Liste von Anbietern auswählen und diese Liste auch bearbeiten. Ausserdem kann er angeben, mit welcher Skalierung das Bild verkleinert wird, bevor es zum Supporter übertragen wird. Das kann z.B. dann sinnvoll sein, wenn der Supporter einen kleineren Bildschirm als der Anwender hat oder die Bandbreiten sehr gering sind.

Fazit und Ausblick

Die bisher entwickelte Lösung funktioniert sehr zufriedenstellend. Sie besteht ausschliesslich aus Freier Software und die Vertraulichkeit der Fernwartungsverbindungen ist sehr hoch, da die Daten nur zwischen den Anwendern und Supportern und nicht über die Infrastruktur eines Anbieters von Fernwartungssoftware ausgetauscht werden.

Wir haben allerdings auch Anwender, deren Computer sich hinter sehr restriktiven Firewalls befinden, die z.B. nur HTTP-Verkehr zulassen. Dort funktioniert die Fernwartung bisher nicht. Also müssen wir die Lösung irgendwann noch um eine Komponente erweitern, die Firewalls “austrickst” und das VNC-Protokoll über HTTP tunnelt. Das klingt doch nach einer ziemlich spannenden Aufgabe! :-)

About these ads

2 Antworten zu Fernwartung mit Freier Software

  1. u2ix sagt:

    Sehr guter Artikel, danke!
    Ist das Tool am Schluss (“Vereinfachung”) auch irgendwo als OpenSource veröffentlicht?

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ photo

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Follow

Erhalte jeden neuen Beitrag in deinen Posteingang.

%d Bloggern gefällt das: