ADMIN

2023

02

2023-01-31T12:00:00

Endpoint Security

PRAXIS

056

Open-Source-Tipp

Kommunikation

Push-Nachrichten mobil empfangen

Informiert bleiben

von Thorsten Scherf

Veröffentlicht in Ausgabe 02/2023 - PRAXIS

Der Dienst ntfy.sh erlaubt das Versenden und Empfangen von Nachrichten ohne großen Aufwand. Dies funktioniert mit der richtigen App auch auf dem Smartphone – ein ideales Werkzeug, um beliebige Systemmeldungen an Admins unterwegs zu versenden. Wir beleuchten den Dienst und zeigen, wie sich dieser für Push-Nachrichten nutzen lässt.

Das Open-Source-Werkzeug ntfy.sh [1] stellt einen Nachrichtenservice auf HTTP-Basis zur Verfügung. Das Design basiert auf der sogenannten Publisher- und Subscriber-Architektur. Hierbei findet der Austausch von Nachrichten nicht zwischen einzelnen Entitäten statt, stattdessen kann durch das Versenden einer einzelnen Nachricht eine Vielzahl an Empfängern erreicht werden, vergleichbar mit IP-Multicast [2]. Ein Unterschied besteht jedoch darin, dass ntfy.sh einen Webservice einsetzt, der sozusagen als Proxy zwischen dem Sender und den Empfängern der Nachricht agiert. Auch diese Variante dürfte den meisten Lesern bereits unter dem Namen Message Broker oder Eventbus bekannt sein. Die D-Bus-Architektur [3] auf einem Linux-System arbeitet beispielsweise auf Basis eines solchen Modells.
Konkret bedeutet das nun, dass auf der einen Seite der Kommunikation jemand eine Nachricht mit einem bestimmten Pattern versendet und auf der anderen Seite jedermann diese Nachrichten empfangen kann, solange dort das Pattern bekannt ist. Wie dieses Muster genau aussieht, bestimmt der Sender. Das Pattern selbst dient dabei als eine Art Passwort und sollte daher mit Bedacht gewählt werden. Jeder, der dieses Muster kennt, kann sämtliche Nachrichten, die mit diesem versehen sind, mitlesen.
Nachrichten senden
Zum Versenden einer Nachricht über den ntfy.sh-Webservice existiert nun eine Vielzahl an Möglichkeiten. Im einfachsten Fall versenden Sie eine HTTP-Anfrage mithilfe von curl. Das folgende Beispiel verwendet für die POST-Anfrage an den Webdienst ein Datenfeld mit dem Inhalt "Backup erfolgreich". Die Anfrage geht an den öffentlichen ntfy.sh-Webservice und verwendet den String "tscherf-backup" als Pattern:
Das Open-Source-Werkzeug ntfy.sh [1] stellt einen Nachrichtenservice auf HTTP-Basis zur Verfügung. Das Design basiert auf der sogenannten Publisher- und Subscriber-Architektur. Hierbei findet der Austausch von Nachrichten nicht zwischen einzelnen Entitäten statt, stattdessen kann durch das Versenden einer einzelnen Nachricht eine Vielzahl an Empfängern erreicht werden, vergleichbar mit IP-Multicast [2]. Ein Unterschied besteht jedoch darin, dass ntfy.sh einen Webservice einsetzt, der sozusagen als Proxy zwischen dem Sender und den Empfängern der Nachricht agiert. Auch diese Variante dürfte den meisten Lesern bereits unter dem Namen Message Broker oder Eventbus bekannt sein. Die D-Bus-Architektur [3] auf einem Linux-System arbeitet beispielsweise auf Basis eines solchen Modells.
Konkret bedeutet das nun, dass auf der einen Seite der Kommunikation jemand eine Nachricht mit einem bestimmten Pattern versendet und auf der anderen Seite jedermann diese Nachrichten empfangen kann, solange dort das Pattern bekannt ist. Wie dieses Muster genau aussieht, bestimmt der Sender. Das Pattern selbst dient dabei als eine Art Passwort und sollte daher mit Bedacht gewählt werden. Jeder, der dieses Muster kennt, kann sämtliche Nachrichten, die mit diesem versehen sind, mitlesen.
Nachrichten senden
Zum Versenden einer Nachricht über den ntfy.sh-Webservice existiert nun eine Vielzahl an Möglichkeiten. Im einfachsten Fall versenden Sie eine HTTP-Anfrage mithilfe von curl. Das folgende Beispiel verwendet für die POST-Anfrage an den Webdienst ein Datenfeld mit dem Inhalt "Backup erfolgreich". Die Anfrage geht an den öffentlichen ntfy.sh-Webservice und verwendet den String "tscherf-backup" als Pattern:
curl -d "Backup erfolgreich" ntfy.sh/tscherf-backup
Der Service erlaubt den Einsatz von weiteren Informationen im Header der Anfrage. So können Sie beispielsweise die Nachricht mit einem Titel oder Icons und Emojis versehen, um die Dringlichkeit der Meldung hervorzuheben:
curl \
      -H "Title: Backup fehlgeschlagen" \
      -H "Priority: urgent" \
      -H "Tags: warning" \
      -d "Backup auf System $(hostname) ist fehlgeschlagen." \
      ntfy.sh/tscherf-backup
Eine Übersicht der zur Verfügung stehenden Icons und Tags finden Sie in der sehr guten Dokumentation [4] zum Webservice.
Zeitversetztes Versenden
In dieser finden Sie auch Informationen darüber, welche weiteren Header Sie verwenden können. Ganz spannend ist beispielsweise die Möglichkeit, eine Nachricht zeitversetzt zu versenden. Die folgenden curl-Aufrufe veranschaulichen die grundsätzliche Funktionsweise:
curl \
      -H "At: today at 2:15pm" \
      -H "Tags: warning" \
      -d "Milch einkaufen nicht vergessen." \
      ntfy.sh/tscherf-reminder
curl \
      -H "Tags: partying_face" \
      -H "In: 30min" \
      -d "Zeit für eine Kaffeepause." \
      ntfy.sh/tscherf-reminder
Apps und Self-Hosting
Neben dem Versenden von Nachrichten mittels curl können Sie auch auf ein Webinterface [5] zurückgreifen, eine Handy-App für iOS und Android [6] verwenden oder einfach das ntfy-Tool [7] einsetzen, das für verschiedene Plattformen zur Verfügung steht. Letzteres unterstützt neben Linux auch Windows und macOS.
Ergänzend zum Client stellt die Software auch eine Serverkomponente zur Verfügung, falls Sie den Webservice in der eigenen Umgebung betreiben möchten. Hierfür können Sie dann sogar auf fertige Container-Images zurückgreifen.
Das Setup hierfür ist ebenfalls ausführlich in der Dokumentation beschrieben. Unsere Beispiele verwenden den öffentlichen ntfy.sh-Webdienst. Zu beachten ist hierbei, dass die öffentliche Instanz aktuell noch keine Ende-zu-Ende-Verschlüsselung unterstützt, sodass die Daten im Klartext fließen.
Die Software setzt auch einen Cache für die Nachrichten ein, sodass diese auf der Serverseite für einen Zeitraum von zwölf Stunden in unverschlüsselter Form vorliegen. Wer dabei Bauschmerzen verspürt, sollte sich überlegen, besser eine eigene Instanz des Dienstes zu betreiben.
Bild 1: Der Webservice stellt sowohl für iOS als auch Android eine App zur Verfügung, um bequem Nachrichten versenden und empfangen zu können.
Nachrichten empfangen
Für den Empfang von Nachrichten stehen Ihnen ebenfalls unterschiedliche Optionen zur Verfügung. Am interessantesten dürfe natürlich das Abonnieren von Nachrichten über die Handy-App oder das Webinterface sein.
In Bild 1 sehen Sie ein Beispiel für die iOS-Variante der App. Genauso wie auch die Android-Version ist diese quelloffen und der Code steht auf GitHub [8, 9] zur Verfügung. Abschließend noch ein Beispiel, wie der Versand und Empfang der Nachrichten aussieht, wenn hierfür das ntfy-Tool zum Einsatz kommt. Mit diesem ist es dann auch ein Leichtes, ganze Dateien zu übertragen:
ntfy pub --file hello tscherf-attachements
Über die Web-App können Sie dann einen Download der Nachricht inklusive des Anhangs durchführen. Über das Kommandozeilentool ist jedoch auch ein Abonnieren von Nachrichten möglich:
ntfy pub hello
 
{"id":"mdyGyIyBxSIi","time":1669719265,"event":"message","topic":"tscherf-attachements","message":"You received a file: hello","attachment":{"name":"hello","type":"text/plain; charset=utf-8", "size":15,"expires":1669730065,"url":"https://ntfy.sh/file/mdyGyIyBxSIi.txt"}}
Rufen Sie nun die URL aus der Empfangen Nachricht aus, erhalten Sie Zugang zu der übertragenen Datei:
curl -s https://ntfy.sh/file/mdyGyIyBxSIi.txt
Bild 2: Natürlich besteht auch die Möglichkeit, die Nachrichten über eine Web-App zu versenden oder zu empfangen.
Fazit
Administratoren müssen unter Umständen Systemmeldungen auch unterwegs empfangen. Die Open-Source-Software ntfy.sh stellt einen Webservice zur Verfügung, mit dem es sehr einfach und ohne irgendeine Form der Registrierung möglich ist, Nachrichten zu versenden und auf dem Smartphone oder anderen Geräten zu empfangen. Wer möchte, kann den Service aus Datenschutzgründen auch innerhalb der eigenen Umgebung betreiben, um sensible Daten zwischen Sender um Empfänger sicher auszutauschen. Auch wenn die Ende-zu-Ende-Verschlüsselung bereits geplant ist, mag die fehlende Unterstützung hierfür aktuell noch ein Problem für so machen Nutzer der öffentlichen Dienstinstanz darstellen.
(dr)
Link-Codes
[1] ntfy.sh-Webservice: https://ntfy.sh/
[4] Dokumentation zum ntfy.sh-Webservice: https://docs.ntfy.sh/
[5] ntfy.sh-Webinterface: https://ntfy.sh/app
[9] ntfy.sh-Android-App-Code: https://github.com/binwiederhier/ntfy-android