Wie in anderen Beiträgen im Blog bereits beschrieben ist es möglich, mobile Endgräte unter Android oder LineageOS sehr Datensparsam einzurichten. Durch den Verzicht auf die offiziellen, bzw. FOSS Google Apps (gapps) gibt es dadurch eine Einschränkung im Bereich der Push Benachrichtigungen.
Dazu muss man wissen, dass mobile Endgeräte die Push-Benachrichtigungen von Apps durch die Server von Google oder Apple senden. Damit ergeben sich, auch wenn gute Apps darüber nur “Aufwecknachrichten” senden, massive Meta Daten bei den großen Datensilos.
Um keine Daten an Dritte weiterzugeben wurden in den anderen Artikel bereits umfangreiche Vorkehrungen getroffen ( /am-android-tablet-oder-smartphone-mit-lineageos-fuer-sicherheit-und-privatsphaere-sorgen/ ) .
Nun fehlte noch eine selbst gehosteter Push-Notification Server und nach langer Suche fiel die Entscheidung auf Gotify. Durch den mit Plugins erweiterbaren Push-Server können Matrix Push Benachrichtigungen genauso gesendet werden, wie Push-Benachrichtigungen per wget, PHP, und anderen Tools und Programmiersprachen. Damit ist es auch möglich das Nagios Real Time Monitoring auf einen neuen Level zu heben.
Viele Muster zum Senden von Nachrichten finden sich hier: https://gotify.net/docs/more-pushmsg .
Der Gotify Server ist in Go Programmiert und läuft damit auf vielen Betriebssystemen. Das Project stellt auch ein Docker Image. Ich selbst bevorzuge Bare-Install und virtualisiere mit Proxmox.
Zusätzlich war eine Voraussetzung, dass der Push-Server nicht als Root und ohne Reversed-Proxy, in Verbindung mit SQLite läuft. Damit kann mit einem statischen Binary und der Datenbank im Unterordner der gesamte Server als non-privileged Benutzer betrieben werden.
Das Setup
- Installieren von Go wie üblich
- Go muss im PATH sein
- pkg install yarn
- git clone https://github.com/gotify/server.git && cd server
- export GO111MODULE=on
- make download-tools
- go get -d
- cd ui
- yarn
- cd ..
- (cd ui && yarn build)
- go run hack/packr/packr.go
- export LD_FLAGS="-w -s -X main.Version=$(git describe --tags | cut -c 2-) -X main.BuildDate=$(date "+%F-%T") -X main.Commit=$(git rev-parse --verify HEAD) -X main.Mode=prod";
- go build -ldflags="$LD_FLAGS" -o gotify-server
Erstelle ./config.yaml
Speziell
In unserem Fall wurden die Standard Ports auf High-Ports gelegt, damit kann der Gotify Server ohne root Berechtigungen gestartet werden. Ich habe eine eigene lokale CA und damit die Zertifikate erstellt.
Viele Details zur eigenen CA finden sich hier: https://digitalbooks24.com/de/product/my-own-certificate-authority-epub/
Kurzinfo zum Hinzufügen der eigenen CA als vertrauenswürdige Ausstellerinstanz
openssl x509 -noout -hash -in ca.crt > ca.crt.hash
ln -s ca.crt `cat ca.crt.hash`.0
echo "copy ca.crt and `cat ca.crt.hash`.0 to /etc/ssl/certs"
Testen:
openssl s_client -connect gotify.server.tld:PORTNUMBER | grep -i -e verify
Start- und Prüfscript
Dieses Script am besten in der Crontab mit dem jeweiligen Benutzer, alle 5 Minuten laufen lassen. Benötigt etc/Runs/nagios/plugins/check_tcp , welches sich in den Nagios-Plugins findet.
!/bin/sh
RUNAS=gotify
MAILTO=root
MAIL=/usr/bin/mail
GETUSERNAME=`/usr/bin/whoami`
if [ "${GETUSERNAME}" != "${RUNAS}" ]; then
echo "####################################################"
echo "ERROR: This script must be run as ${RUNAS}, exiting"
echo "TIP : use su -m ${RUNAS} -c command"
echo "####################################################"
echo "ERROR: This script must be run as ${RUNAS}, exiting" | \
${MAIL} -s "ERROR: MATRIXBOT start exited with error on `hostname`" ${MAILTO}
exit 1
fi
if (! /etc/Runs/nagios/plugins/check_tcp -p 4080 -H 127.0.0.1 2>&1 >/dev/null); then
echo "Service MATRIXGOTIFY not running"
echo "Service MATRIXGOTIFY not running" | mail -s "`hostname` Service MATRIXGOTIFY not running RESTARTET" root
cd /home/gotify && \
/home/gotify/gotify-server &
fi
Testen Gotify Server
Dazu meldet man sich am Web Interface an, bzw, installiert am besten auch die App am mobilen Gerät.
#!/bin/sh
token="ACepUABC5Vornq."
subject="wget"
message="Test Message to Mobile via WGET"
priority=5
PORTNUMBER=443 # Set your non standard port here, if used!
wget --no-check-certificate "https://localhost:$PORTNUMBER/message?token=$token" --post-data "title=$subject&message=$message&priority=$priority" -O /dev/null
Danach sollten im Web und in der App die Nachricht auftauchen.
Nun kann das Matrix Plugin für Gotify kompiliert werden
- git clone https://gitlab.com/Sorunome/matrix-gotify
- cd matrix-gotify
- make download-tools
- go build -mod=readonly -a -installsuffix cgo -ldflags "$LD_FLAGS" -buildmode=plugin -o build/matrix-gotify.so
- Das build/matrix-gotify.so in den Plugin Ordner beim Gotify Server kopieren.
Betrieb
Zum Betrieb von Matrix-Push Benachrichtigungen müssen wir am Matrix Synapse Server noch einen Pusher für den Benutzer einrichten.
Muster
Registrieren Pusher
/usr/local/bin/curl -H 'Authorization: Bearer ACCESS_TOKEN' -H 'Content-Type: application/json' -X POST -d '{"lang": "en","kind": "http","app_display_name": "Gotify","device_display_name": "Gotify","pushkey": "SECRET-SET-IN-WEB-IF-PLUGIN","app_id": "de.sorunome.gotify","data": {"url": "https://SERVER.TLD:PORTNUMBER/plugin/2/custom/FROM_LINK_IN_PLUGIN/hook","format": "full_event"}}' https://MATRIX_SERVER_TLD/_matrix/client/r0/pushers/set
Löschen Pusher
/usr/local/bin/curl -H 'Authorization: Bearer ACCESS_TOKEN' -H 'Content-Type: application/json' -X POST -d '{"lang": "en","kind": "null","app_display_name": "Gotify","device_display_name": "Gotify","pushkey": "SECRET-SET-IN-WEB-IF-PLUGIN","app_id": "de.sorunome.gotify","data": {"url": "https://SERVER.TLD:PORTNUMBER/plugin/2/custom/FROM_LINK_IN_PLUGIN/hook","format": "full_event"}}' https://MATRIX_SERVER_TLD/_matrix/client/r0/pushers/set
Pushers auflisten
/usr/local/bin/curl -H 'Authorization: Bearer ACCESS_TOKEN' -X GET https://MATRIX_SERVER_TLD/_matrix/client/r0/pushers
Bei eigener CA muss jeder Beteiligte Server, Gotify und Matrix die eigene CA im OpenSSL eingerichtet haben.
Mit der Installation ist nun ein selbst gehosteter Push Server verfügbar, der verschlüsselt, ohne Daten an Dritte zu senden, Push Benachrichtigungen unter Android und LineageOS ermöglicht. Apple verbietet Web-Socket Verbindungen, dadurch gibt es auch keine APP für IOS. Mit Android und LineageOS ist aber einen großflächige Marktabdeckung, speziell bei smarten Benutzern mit hohem Interesse an Privatsphäre gegeben.
Enterprise Support and Setup
- https://cts-solutions.at Wir arbeiten auch als Level2 und Level 3 Remote Support!
Links zum Artikel
- https://github.com/gotify/
- https://gotify.net/docs/more-pushmsg
- https://gitlab.com/Sorunome/matrix-gotify
- https://f-droid.org/de/packages/com.github.gotify/
Go Programmiersprache
Matrix Doc
- https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-pushers-set
- https://matrix.org/docs/spec/client_server/latest#def-pushers
Sample Payload
E-Books
EURAFRI Gruppenchat in der Matrix
Wir freuen uns über ein rege Teilnahme am EURAFRI Projekt und ersuchen auch die EURAFRI Rezeption in der Matrix zu besuchen.
https://matrix.to/#/#eurafri-reception:matrix.ctseuro.com
Euer EURAFRI TEAM
Autor: Karl M. Joch