Server für Open-Source-Fernhilfe selbst betreiben | ct (2023)

Gesprächsvermittler

Die TeamViewer- und AnyDesk-Alternative RustDesk verheiratet Clients über einen Server, den Sie auch selbst betreiben können. Die mächtige Fernwartungssoftware MeshCentral bringt stattdessen eine Weboberfläche mit, die als Sprungbrett in entfernte Rechner dient. Wir zeigen, wie Sie die Backend-Software für die Open-Source-Fernhilfe aufsetzen und zur Hilfe schreiten.

Von Niklas Dierking

Drei quelloffene Werkzeuge zur Fernhilfe haben wir auf Seite 80 vorgestellt: RustDesk, MeshCentral und Remotely. Allen gemein ist, dass Sie einen Server brauchen, um Clients bekannt zu machen, eine Weboberfläche bereitzustellen oder als Relay zu fungieren und Daten durchzureichen. Sie müssen etwas Arbeit investieren, kontrollieren dafür aber Ihre Daten und bleiben von Einschränkungen oder Werbung verschont, die Ihnen nahelegt, ein kostenpflichtiges Abo abzuschließen.

Wenn Sie PC-Doktor im Familien- und Freundeskreis sind und TeamViewer oder AnyDesk kennen, finden Sie sich bei RustDesk am schnellsten zurecht. Auch die Installation der Serversoftware ist am einfachsten, die eine verschlüsselte Punkt-zu-Punkt-Verbindung zwischen Helfer- und Geholfenem-Client herstellt. Wer RustDesk-Clients in einem geschlossenen Netz ohne Internetzugriff einsetzt, kann auf den Server verzichten und im Direct-IP-Modus Zugriff auf einen anderen Rechner anfordern.

Als professioneller Helfer könnten Sie dagegen an MeshCentral Gefallen finden mit seinen Managementfunktionen, dem ausführlichen Logging und der Rechteverwaltung. Auf Systemen, für die Fernhilfe geleistet werden soll, muss dafür ein Software-Agent oder der eingeschränkte MeshCentral-Assistent laufen. MeshCentral ist eine umfangreiche Software, mit der Admins große Flotten von PCs managen und fernsteuern, optional sogar ohne Software-Agent, indem die Fernwartung am Betriebssystem vorbei über Intel AMT erfolgt (Active-Management-Technik).

Remotely kommt im Vergleich zu MeshCentral mit einer abgespeckten Weboberfläche, hat aber in unserem Vergleichstest weniger gut abgeschnitten. Außerdem war die offizielle Webseite von Remotely während des gesamten Testzeitraums offline, was uns skeptisch stimmt in Bezug auf die Langlebigkeit des Open-Source-Projekts. In der folgenden Anleitung beschränken wir uns deswegen auf RustDesk und MeshCentral. Die Installation der Serversoftware setzt Linux- und Docker-Grundkenntnisse voraus. Wer Remotely trotzdem ausprobieren möchte, findet eine Docker-Compose-Vorlage für Remotely und den Reverse-Proxy Caddy im GitHub-Repository zu diesem Artikel (siehe ct.de/ywxm).

System vorbereiten

Wir haben die Serversoftware von RustDesk und MeshCentral jeweils als Docker-Container auf einem schmalen Mietserver mit einem virtualisierten CPU-Kern und 2 GByte RAM installiert. Beide Serveranwendungen haben sich in unseren Tests als ressourcensparsam erwiesen, sodass Sie mit den kleinsten Serverkonfigurationen auskommen sollten. Der Server, den wir zum Test angemietet haben, kostet etwa 4 Euro im Monat. Sie können die Fernwartungssoftware Ihrer Wahl aber auch auf einem NAS, Heimserver oder Raspberry Pi in Ihrem Heimnetz installieren, müssen in der Weboberfläche Ihres Routers dann aber die nötigen TCP- und UDP-Ports an das Zielsystem durchreichen. Das sind die TCP-Ports 21115, 21116, 21118 und der UDP-Port 21116 bei RustDesk, TCP-Ports 80 und 443 für MeshCentral. Beim Betriebssystem haben wir uns für Ubuntu 22.04 LTS entschieden, die Software sollte aber auf jeder Linux-Distribution mit Docker funktionieren. Wenn Ihr Hoster den Server hinter einer Cloud-Firewall versteckt, dann müssen Sie ebenfalls die nötigen Ports freigeben.

Bringen Sie das frische Ubuntu zunächst auf den neuesten Stand:

sudo apt updatesudo apt upgrade

Für eine reproduzierbare Installation von RustDesk und MeshCentral auf dem Linux-Host greifen wir zu Docker und dem Hilfswerkzeug Docker-Compose. In einem GitHub-Repository zum Artikel (ct.de/ywxm) stellen wir Docker-Compose-Vorlagen zur Verfügung, die Sie sich wie einen Bauplan vorstellen können, in dem Container-Images, Netzwerke, Ports und Volumes für persistente Daten definiert sind. Wie Sie Docker installieren, halten wir online in einem laufend aktualisierten Artikel fest, den Sie unter ct.de/ywxm finden. Eine ausführliche Docker-Einführung lesen Sie in [1]. Docker-Einsteiger installieren die Container-Engine am einfachsten über ein Skript, das Sie in einem Texteditor prüfen können, bevor Sie es ausführen:

curl -fsSL https://get.docker.com \-o get-docker.shsh get-docker.sh

Installation von RustDesk

Mit unserer Vorlage geht die Installation von RustDesk leicht von der Hand. Wer Größeres vorhat und sich nur für MeshCentral interessiert, kann zum Absatz springen, der mit „Installation von MeshCentral“ überschrieben ist. Die Serversoftware von RustDesk besteht aus dem Relay- (hbbr) und dem Signalserver (hbbs). Letzterer wird auch ID- oder Rendezvous-Server genannt, denn er versucht, eine direkte Verbindung zwischen den Desktop-Clients des Helfenden und des Geholfenen herzustellen (TCP-Hole-Punching). Wenn keine direkte Verbindung zustande kommt, springt der Relayserver hbbr ein und reicht Nutzereingaben und das VP9-codierte Videosignal durch. Legen Sie mit dem Befehl mkdir -p ~/rustdesk zunächst ein Verzeichnis für persistente RustDesk-Daten und die docker-compose.yaml-Datei an. Öffnen Sie die Vorlage dann mit einem Texteditor:

version: '3'networks: rustdesk-net: external: falseservices: hbbs: command: hbbs -r rustdesk.example.:21117 -k _ volumes: - ./data:/root

Sie müssen wie im obigen Ausschnitt in der Zeile, die mit command beginnt, die IP-Adresse Ihres RustDesk-Servers oder eine Domain wie rustdesk.example.com eintragen, die auf ihn verweist. Der Parameter -k _ erzwingt eine verschlüsselte Verbindung. Es ist dann nicht möglich, mit einem Client, der nicht den passenden Schlüssel vorweisen kann, eine Verbindung über Ihren Vermittlungsserver herzustellen.

Speichern Sie die Datei und starten Sie dann die hbbs- und hbbr-Container mit folgendem Befehl:

sudo docker compose up -d

Im Verzeichnis ~/rustdesk/data finden Sie einen privaten und einen öffentlichen Schlüssel. Lesen Sie den Inhalt des öffentlichen Schlüssels aus:

cat ~/rustdesk/data/id_ed25519.pub

Sie brauchen ihn im nächsten Schritt, um mit den RustDesk-Clients auf Helfer- und Zielrechner eine verschlüsselte Verbindung herzustellen. Clients für Windows, Linux und macOS laden Sie von der RustDesk-Webseite oder bei GitHub herunter (ct.de/ywxm). Apps für iOS und Android gibt es im Apple App Store, respektive Google Play Store und bei F-Droid. Wenn Sie den RustDesk-Client das erste Mal starten, stellt er eine Verbindung zum RustDesk-Netzwerk her und greift dafür auf einen der sechs öffentlichen ID-Server zurück, die nicht unter Ihrer Kontrolle stehen. Der Client zeigt am unteren Rand des Fensters an „Bereit, Für eine schnellere Verbindung, richten Sie bitte Ihren eigenen Verbindungsserver ein“.

Um den Client auf Ihren Server zu verweisen, klicken auf die drei senkrechten Punkte neben Ihrer ID und öffnen das Menü „ID/Verbindungsserver“. Tragen Sie jetzt die IP-Adresse oder die Domain Ihres Servers im Feld „ID Server“ ein. Das Feld „Verbindungsserver Server“ müssen Sie nur ausfüllen, wenn hbbr unter einer anderen Adresse zu erreichen ist. Kopieren Sie als letzten Schritt den öffentlichen Schlüssel, den Sie aus der Datei ~/rustdesk/data/id_ed25519.pub ausgelesen haben, in das Feld „Key“. Die Aufforderung, einen eigenen Server aufzusetzen, verschwindet jetzt. Mit den Befehlen docker logs hbbr und docker logs hbbs prüfen Sie, ob die Clients beim Relay- oder ID-Server vorstellig werden.

Die Adresse des Servers und den öffentlichen Schlüssel müssten Sie prinzipiell allen Hilfesuchenden zukommen lassen, die Sie über Ihren RustDesk-Server unterstützen wollen, es geht aber auch einfacher: Windows-Nutzern nehmen Sie Arbeit ab, indem Sie die portable Version des RustDesk-Clients herunterladen, entpacken und dann die Adresse des RustDesk-Servers und den Schlüssel an den Namen der Datei rustdesk.exe anhängen, beispielsweise rustdesk-host=rustdesk.example.com,key=xfdsfsd32=32.exe. Die Datei verteilen Sie an alle Nutzer, die Sie um Hilfe bitten. Der so modifizierte Client steuert automatisch Ihren Server an.

RustDesk Stolpersteine

In unseren Tests nahm RustDesk nur in Ausnahmefällen den Umweg über den Relayserver, beispielsweise beim Helfen von einem Linux-Client unter Fedora 37 zu einem macOS-Client unter Ventura 13.1. Wir konnten bei der indirekten Verbindung keinen Nachteil entdecken, außer, dass ein wenig zusätzlicher Traffic über Ihren Server geleitet wird. Für RustDesk brauchen Sie nicht zwingend eine Domain, es mag allerdings für Hilfesuchende einfacher sein, im ID-Server-Menü eine Adresse wie rustdesk.example.com einzutragen als eine IP-Adresse.

Probleme gab es in unseren Tests, wenn unser RustDesk-Server neben einer IPv4- auch eine IPv6-Adresse hatte, für die wir einen AAAA-Record gesetzt hatten. Dann konnten wir weder eine direkte noch eine indirekte Verbindung zwischen zwei entfernten Rechnern herstellen. Als Workaround kann man die IPv4-Adresse statt der Domain im Client eintragen oder an die rustdesk.exe anhängen. Laut den spärlichen Release-Notes des RustDesk-Projekts sollten hbbr und hbbs ab Version 1.1.7 auch mit IPv6-Clients funktionieren, aber in unseren Tests kam keine Verbindung zustande, auch nicht mit der Entwicklerversion, den frischen „Nightly“-Builds der RustDesk-Clients.

Neben den Desktop-Clients steht auch ein Web-Portal auf web.rustdesk.com in einer Beta zur Verfügung, das jedoch unverschlüsselt über HTTP ausgeliefert wird. Wir raten davon ab, das Portal zu benutzen, dessen Quelltext anders als die Desktop-Clients und hbbs- und hbbr-Server nicht auf GitHub eingesehen werden kann. Gut möglich, dass der RustDesk-Hauptentwickler, ein Entwickler aus Singapur, der öffentlich auch als Purslane Ltd. auftritt, sich an einem Premium-Produkt für zahlende Kunden versucht.

Für Fernhilfe auf Linux-Systemen, deren Desktopumgebung im Wayland-Modus läuft, eignet sich RustDesk zurzeit nicht. Der normale Client verweigert komplett die Verbindung. Mit der Entwicklerversion kommt es zwar zur Verbindung, gut helfen kann man aber trotzdem nicht.Läuft der Desktop im Wayland-Modus, kann man dem Hilfesuchenden zwar über die Schulter schauen, nachdem dieser die Bildschirmaufzeichnung über ein Bestätigungsfenster (xdg-desktop-portal) autorisiert hat. Eingaben sendet RustDesk nicht. Das reicht gerade mal, um sich ein Problem demonstrieren zu lassen.

Installation von MeshCentral

MeshCentral ist eine Open-Source-Komplettlösung zur Verwaltung und Fernsteuerung ganzer PC-Flotten, die sich auch zur Fernhilfe nutzen lässt. Durch den Software-Agent oder den MeshCentral-Assistent auf den entfernten Geräten müssen, wie bei der Fernhilfe mit RustDesk, keine manuellen Änderungen an einer Firewall vorgenommen werden. Der ehemalige Intel-Mitarbeiter und Hauptentwickler von MeshCentral, Ylian Saint-Hilaire, bezeichnet die Software im GitHub-Repository des Projekts als „full computer management web site“. Administratoren und Nutzer können Gerätegruppen samt ausgeklügelter Rechteverwaltung erstellen. Außer den Remote-Desktop-Funktionen und der On-Demand-Hilfe bietet es auch Terminal- und Dateizugriff. MeshCentral erfasst alle Verbindungen und Aktionen in einem ausführlichen Log, sodass genau nachvollzogen werden kann, wer sich wann mit welchem System verbunden hat. Das Projekt stellt eine Demo-Instanz auf meshcentral.com/login zur Verfügung, mit der Sie die Software ausprobieren können, um zu entscheiden, ob sich die Installation für Sie lohnt.

Anders als bei RustDesk brauchen Sie für die Installation von MeshCentral eine Domain, für die Sie DNS-Einträge vornehmen können. Setzen Sie zunächst einen A-Record, beispielsweise meshcentral.example.com, der auf die IP-Adresse Ihres Servers verweist. Wenn es sich um einen frischen Server handelt, installieren Sie zunächst Docker wie oben beschrieben und legen Sie ein Verzeichnis für das Projekt an:

mkdir -p ~/meshcentral

Für MeshCentral stellen wir ebenfalls eine Docker-Compose-Datei als Container-Bauplan in einem GitHub Repository zur Verfügung, das wir unter ct.de/ywxm verlinkt haben. Speichern Sie die Datei im angelegten Verzeichnis und passen dann die Werte im folgenden Ausschnitt an:

 environment: - NODE_ENV=production - HOSTNAME=mesh.example.com - USE_MONGODB=false - REVERSE_PROXY=false - REVERSE_PROXY_TLS_PORT= - IFRAME=false - ALLOW_NEW_ACCOUNTS=false - WEBRTC=false - ALLOWPLUGINS=false - LOCALSESSIONRECORDING=false - MINIFY=true

Unsere Vorlage nutzt das offizielle MeshCentral-Image und verzichtet auf die optionale MongoDB-Datenbank, die laut Dokumentation nötig ist, sobald man mehr als hundert Rechner verwalten und fernsteuern möchte. Eine alternative Vorlage mit MongoDB-Datenbank finden Sie im GitHub-Repository des Projekts. Tragen Sie beim Punkt HOSTNAME= Ihre Domain für MeshCentral ein. Die Werte für REVERSE_PROXY und REVERSE_PROXY_TLS_PORT= können Sie frei lassen, es sei denn, Sie wollen MeshCentral über einen bestehenden Reverse-Proxy wie zum Beispiel Traefik ausliefern. Wenn Sie MeshCentral mit einem Team benutzen wollen, dann ändern Sie den Wert bei ALLOW_NEW_ACCOUNTS= von false auf true und machen die Änderung rückgängig, wenn alle an Bord sind.

Starten Sie den Container mit dem Befehl docker compose up -d. Nach ein bis zwei Minuten können Sie Ihre Domain meshcentral.example.com im Browser ansteuern und den Administatoraccount anlegen. Der Browser meckert jedoch noch wegen des selbst signierten Zertifikats, für das Sie eine Ausnahme hinzufügen müssen.

Praktisch: MeshCentral verfügt über einen eingebauten Mechanismus, um Zertifikate von Let’s Encrypt zu besorgen und vor Ablauf automatisch zu verlängern. Wechseln Sie nach dem Start der Zusammenstellung in das Verzeichnis ~/meshcentral/meshcentral-data/data und bearbeiten mit einem Texteditor Ihrer Wahl die Datei config.json, die größtenteils durch die Umgebungsvariablen vorausgefüllt ist. Schlüssel, denen der Unterstrich (_) vorangestellt wird, werden von MeshCentral ignoriert. Entfernen Sie die drei Unterstriche im letzten Abschnitt vor "letsencrypt", "email" und "names". Tragen Sie Ihre E-Mail-Adresse und Ihre MeshCentral-Domain ein und ändern Sie den Wert des Schlüssels "production" von false auf true:

 }, "letsencrypt": { "email": "mail@example.com", "names": "mesh.example.com", "production": true }}

Speichern Sie die Datei und starten Sie den MeshCentral-Container neu:

docker restart meshcentral

Nach kurzer Zeit hat MeshCentral ein kostenloses Zertifikat von Let’s Encrypt besorgt. Ihr Browser sollte jetzt keine Sicherheitswarnung mehr anzeigen. Den Status des Zertifikats können Sie auch in der MeshCentral-Weboberfläche prüfen. Rufen Sie aus der Seitenleiste auf der linken Seite das Menü „Mein Server“ auf und klicken dann auf den Reiter „Konsole“. Der Befehl le informiert über Speicherort und Ablaufdatum des Zertifikats.

Helfende Hand ausstrecken

Für Fernzugriff und Fernhilfe auf Zielsysteme bietet MeshCentral unterschiedliche Möglichkeiten. Zur Ad-hoc-Hilfe dient der komfortable MeshCentral-Assistent. Der MeshCentral-Agent ist für dauerhaften und unbeaufsichtigten Zugriff gedacht. Auf Zielrechnern mit Intel AMT (Active Management Engine), können Sie sogar am Betriebssystem vorbei auf den Rechner zugreifen. Der braucht dafür einen Prozessor mit Intel-Core-vPro-Features, deswegen klammern wir das Thema in dieser Anleitung aus.

Der Assistent ist für die klassische Fernhilfe die beste Wahl, jedoch nur für Windows und nicht für Linux und macOS verfügbar, wo man auf den Software-Agent zurückgreifen muss. Mit ein paar Einstellungen können Sie den Agent immerhin so konfigurieren, dass standardmäßig kein unbeaufsichtigter Zugriff möglich ist, dazu später mehr.

Um Hilfesuchenden den MeshCentral-Assistent zukommen zu lassen, wählen Sie im Menü „Meine Geräte“ zunächst den Eintrag „Gerätegruppe hinzufügen“ und vergeben einen Namen. Die Vorauswahl „Mittels Software Agent verwalten“ ist korrekt, auch wenn Sie den MeshCentral-Assistent zur Ad-hoc-Hilfe benutzen wollen. Klicken Sie dann auf „Einladen“, wählen den Eintrag MeshCentral-Assistent und legen fest, wann der Link ablaufen soll. Den Downloadlink verteilen Sie dann an Nutzer, denen Sie bei PC-Problemen helfen.

Wenn der Nutzer die signierte Datei ausführt, legt der Assistent ein Icon im Infobereich der Windows-Taskleiste ab, über das der Anwender Hilfe anfordern kann. In der Weboberfläche von MeshCentral erscheint dann eine Benachrichtigung und das Gerät taucht in der zuvor angelegten Geräteliste auf. Jetzt kann der Helfer den Desktop steuern, Terminalbefehle abschicken und auf Dateien zugreifen, bis der Hilfesuchende die Schaltfläche „Hilfeanfrage abbrechen“ betätigt. Das Gerät bleibt zwar in der Liste der bekannten Geräte, Zugriff ist aber nicht mehr möglich.

Agenten anleinen

Für Fernhilfe auf Linux- und macOS-Systemen muss der Software-Agent installiert werden, der MeshCentral-Admins und -Nutzern standardmäßig dauerhaften Zugriff auf das System gewährt. Das mag zwar für Remotezugriff auf eigene Rechner prima sein, ist für Ad-hoc-Fernhilfe jedoch ungeeignet und bietet zudem großes Missbrauchspotenzial. Um dem vorzubeugen, können Sie für einzelne Geräte und für ganze Gerätegruppen festlegen, dass der Nutzer am entfernten Rechner explizit den Zugriff auf das System autorisieren muss. Leider funktioniert MeshCentral nicht auf Linux-Systemen, deren Desktop im Wayland-Modus läuft.

Wählen Sie dazu ein Gerät aus der Geräteliste und klicken Sie dann auf „Benutzereinwilligung kein(e)“. Hier legen Sie fest, dass Nutzer Zugriff auf Desktop, Terminal und Dateien zustimmen müssen und darüber benachrichtigt werden. Wenn Sie auf Nummer sicher gehen wollen, dann machen Sie diese Regeln für die gesamte MeshCentral-Installation verpflichtend. Dazu fügen Sie der Datei ~/meshcentral-data/data/config.json folgende Parameter im Abschnitt domain hinzu:

 "userConsentFlags": { "desktopnotify": true, "terminalnotify": true, "filenotify": true, "desktopprompt": true, "terminalprompt": true, "fileprompt": true, "desktopprivacybar": true }

Sie müssen den MeshCentral-Container neu starten, damit die Änderungen wirksam werden. Welche Verbindungen MeshCentral-Nutzer zu entfernten Systemen hergestellt haben, können Sie als MeshCentral-Admin im Menü „Meine Ereignisse“ einsehen. Es lassen sich auch Zugriffsberichte für Nutzer, Geräte oder Gerätegruppen erstellen.

Für Angreifer ist eine MeshCentral-Instanz ein lohnendes Ziel, denn die können leicht das Vertrauen missbrauchen, das die Hilfesuchenden Ihnen als PC-Doktor entgegenbringen und so großen Schaden anrichten. Das ist auch den Entwicklern klar, die Möglichkeiten eingebaut haben, den Login der Weboberfläche mittels Zwei-Faktor-Authentifizierung zusätzlich abzusichern. Als Verfahren können Sie zwischen FIDO2 und TOTP (Time-based One-time Password), beispielsweise mit dem Google-Authenticator, wählen. Machen Sie unbedingt davon Gebrauch.

Fazit

Mit RustDesk und MeshCentral stehen Ihnen als PC-Doktor des Vertrauens praktische und kostenlose Werkzeuge zur Seite, bei denen die Daten nicht über fremde Server fließen. Sie tragen jedoch auch die Verantwortung, Ihren Fernhilfe-Server abzusichern und die Software aktuell zu halten. Erlauben Sie beispielsweise nur den SSH-Zugriff mit dem passenden Schlüssel und lassen Sie sich beim Aktualisieren der Container von Watchtower (siehe ct.de/ywxm) unter die Arme greifen. (ndi@ct.de)

Dokumentationen der Projekte, GitHub-Repository zum Artikel: ct.de/ywxm

Top Articles
Latest Posts
Article information

Author: Lidia Grady

Last Updated: 08/07/2023

Views: 5405

Rating: 4.4 / 5 (65 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Lidia Grady

Birthday: 1992-01-22

Address: Suite 493 356 Dale Fall, New Wanda, RI 52485

Phone: +29914464387516

Job: Customer Engineer

Hobby: Cryptography, Writing, Dowsing, Stand-up comedy, Calligraphy, Web surfing, Ghost hunting

Introduction: My name is Lidia Grady, I am a thankful, fine, glamorous, lucky, lively, pleasant, shiny person who loves writing and wants to share my knowledge and understanding with you.