XMPP-Server: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
334 Bytes hinzugefügt ,  12. September 2021
(21 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
=== <wunschname>@bytewerk.org ===
 
Accounts werden auf Zuruf erstellt (siehe oben "Verantwortlich"). Das Passwort kann im XMPP-Client geändert werden.
 
Zusätzlich kann jeder vorhandene Benutzer '''"Invite"-Codes''' erstellen und diesen anderen Personen zuschicken, die sich dann damit einen @bytewerk.org-Account anlegen können:
Das Passwort kann direkt im XMPP-Client geändert werden.
# In [https://xmpp.bytewerk.org/conversejs-bytewerk Converse.js] anmelden
# Links oben auf das Zahnrad klicken
# Auf "Befehle" klicken
# Als Instanz "bytewerk.org" eingeben
# "Verfügbare Befehle auflisten" klicken
# Auf "Create new contact invite" klicken
# Die angezeigte Adresse zur "Invite web page" kopieren und der Einzuladenden zukommen lassen. Der Link ist eine Woche lang gültig.
 
== XMPP-Clients ==
Es kann jeder XMPP-Client verwendet werden. Empfehlenswerte Clients für Android, iOS, Linux, Windows und MacOS sind auf https://xmpp.bytewerk.org/ aufgeführt.
=== Empfehlenswerte native Clients ===
* Android: Conversations.im, Quicksy.im
* iOS: Monal.im
* Windows/Linux/BSD: Gajim
* macOS: PSI
 
=== Webclients ===
* Audio- und Videotelefonie
* Ende-zu-Ende-Verschlüsselung
* Dateiup- und Download (wird auch für Fotos, Sprach- und Videonachrichten verwendet) - Dateigröße derzeit limitiert auf 20100 MByte.
* Gleichzeitiges Verwenden mehrerer Clients
Dateien und Chatverläufe werden nach einem Monat vom Server gelöscht.
 
=== Die Kosten der Freiheit ===
Die oben genannten Funktionen stehen nicht immer zur Verfügung, weil sich die bei der Kommunikation mit einem bestimmten Gesprächspartner zur Verfügung stehenden Funktionen ergeben sich aus der Schnittmenge des Funktionsumfangs der beteiligten XMPP-Server und der XMPP-Clients. ergeben :)
 
Beispiel: Ist mein Gesprächspartner ein Shellskript, das mir eine Nachricht schickt wenn die Waschmaschine fertig ist, werde ich kein Videotelefonat mit dem Skript führen können selbst wenn es mein XMPP-Client und der Server unterstützt.
 
Obacht bei der '''gleichzeitigen Verwendung von mehreren Clients gleichzeitig''': Eine Nachricht gilt als zugestellt, wenn sie an EINEM Client des Empfängers angekommen ist. Das kann bei wackeliger Internetverbindung dazu führen, dass Nachrichten scheinbar nicht zugestellt wurden - sie landen dann nur bei dem Gerät, dass gerade online ist. NichtZwar alleprüfen die meisten XMPP-Clients prüfen beim Wieder-Online-Gehen, ob in der Zwischenzeit Nachrichten eingetroffen sind, dieaber bereitseben annicht einem anderen Client zugestellt wurden. Threema, Whatsapp usw. umgehen das, indem sie weder parallele Nutzung noch Fremd-Clients zulassenalle.
Ebenso ist undefiniert, was passiert, wenn ein Videoanruf gestartet werden soll, der Gesprächspartner aber mit mehreren Clients online ist, von denen nicht alle Videotelefonie unterstützen.
Threema, Whatsapp usw. umgehen das, indem sie weder parallele Nutzung noch Fremd-Clients zulassen.
 
== Fortschritt ==
;2021-02: Implementierung abgeschlossen: Statt 52% jetzt 100% "XMPP Specifications compliance" beim [https://compliance.conversations.im/server/bytewerk.org/ Conversations.im-Compliance-Test], A-Scores beim IM Observatory [https://www.xmpp.net/result.php?domain=bytewerk.org&type=client Client-] und [https://www.xmpp.net/result.php?domain=bytewerk.org&type=server Server]-Test
;2021-02: Bingo-Domäne mit IMAP-Authentifizierung hinzugefügt, Conversejs aktualisiert
;2021-08: Serverkonfiguration auf Ansible umgestellt (siehe https://git.bingo-ev.de/geierb/bytewerk-xmpp-server), dabei kleine Fehler behoben, neue Funktionen hinzugefügt, Conversejs aktualisiert.
 
== Implementierung ==
 
=== Software ===
Auf der VM '''xmpp.bytewerk.org''' läuft:
* [https://www.postgresql.org PostgreSQL]: Datenbank für Benutzer, Kontakte, Gruppen und Chats
* [https://github.com/coturn/coturn Coturn]: TURN und STUN (für Jingle/WebRTC benötigt, d.h. Audio-/Videotelefonie sowie Dateiübertragung von Client zu Client)
* [https://github.com/conversejs/converse.js ConverseJS]: XMPP-Webclient, mit einigen [https://github.com/conversejs/community-plugins Community-Plugins]
* [https://httpd.apache.org/ Apache2] mit mod_php: HTTPS-Reverse-Proxy für File-Up- und -Downloads, ''.well-known''-URLs, BOSH und Websocket, Bereitstellung von ConverseJS. PHP wird für das "share_v2.php"-Skript benötigt, das sich um Datei-Up- und Downloads kümmert.
* [https://github.com/DigitaleGesellschaft/Anonip Anonip]: Wird zum Logging in Apache2 benutzt um in den Access-Logs die letzten Stellen der IP-Adressen auf 0 setzen. Liegt unter ''/usr/local/Anonip.git''
* [https://certbot.eff.org Certbot]: Für TLS-Zertifikatsaktualisierung
* Crond: Um Certbot wöchentlich aufzurufen und um täglich das Fileupload-Verzeichnis aufzuräumen
* [http://etckeeper.branchable.com etckeeper]: Zum Nachverfolgen von Konfigurationsänderungen (git im ''/etc''-Verzeichnis)
 
=== DNS ===
<pre>
xmpp.bytewerk.org. 300 IN A 94.142.219.72 # Prosody-Server, Coturn-Server, Apache2
xmpp.bytewerk.org. 300 IN AAAA 2a02:868:15::72::1
conference.bytewerk.org. 300 IN A 94.142.219.72 # MUC-Component, Apache2
conference.bytewerk.org. 300 IN AAAA 2a02:868:15::72::1
proxy.bytewerk.org. 300 IN A 94.142.219.72 # Proxy65-Component, Apache2
proxy.bytewerk.org. 300 IN AAAA 2a02:868:15::72::1
upload.bytewerk.org. 300 IN A 94.142.219.72 # HTTP-Fileupload, Apache2
upload.bytewerk.org. 300 IN AAAA 2a02:868:15::72::1
pubsub.bytewerk.org. 300 IN A 94.142.219.72 # PubSub-Component, Apache2
pubsub.bytewerk.org. 300 IN AAAA 2a02:868:15::72::1
 
_xmpp-client._tcp.bytewerk.org. 300 IN SRV 0 5 5222 xmpp.bytewerk.org. # VirtualHost XMPP-Server, C2S
<pre>
conference.bingo-ev.de. 300 IN A 94.142.219.72 # MUC-Component, Apache2
conference.bingo-ev.de. 300 IN AAAA 2a02:868:15::72::1
proxy65.bingo-ev.de. 300 IN A 94.142.219.72 # Proxy65-Component, Apache2 ("proxy.bingo-ev.de" ist bereits belegt)
proxy65.bingo-ev.de. 300 IN AAAA 2a02:868:15::72::1
upload.bingo-ev.de. 300 IN A 94.142.219.72 # HTTP-Fileupload, Apache2
upload.bingo-ev.de. 300 IN AAAA 2a02:868:15::72::1
pubsub.bingo-ev.de. 300 IN A 94.142.219.72 # PubSub-Component, Apache2
pubsub.bingo-ev.de. 300 IN AAAA 2a02:868:15::72::1
 
_xmpp-client._tcp.bingo-ev.de. 300 IN SRV 0 5 5222 xmpp.bytewerk.org. # VirtualHost XMPP-Server, C2S
=== Konfiguration Coturn ===
Kommentierte Konfigurationsdatei "/etc/coturn/turnserver.conf"
 
 
=== Fileupload ===
Der in Prosody eingebaute HTTP-Server unterstützt nur den Upload von Dateien <= 10 MByte und funktioniert nicht mit einigen iOS-Clients (z.B. Monal, Siskin).
Um diese Probleme zu umgehen wird das von Prosody empfohlene Modul "mod_http_upload_external" verwendet.
Bei dem Modul funktioniert der Dateiup- und Download über das mitgelieferte PHP-Skript "share_v2.php", das unter dem Apache-vHost "https://upload.bytewerk.org/share_v2.php" (bzw. https://upload.bingo-ev.orgde/share_v2.php) eingebunden ist und hochgeladene Dateien unter "/srv/var/prosody-upload/<DOMAIN>/" abspeichert.
 
Dateien, die älter als ein Monat sind, werden per täglichem Cronjob von root gelöscht.
Ein einfacher Redirect funktioniert nicht, da dieser die von Prosody gesetzten HTTP-CORS-Header zurücksetzt.
 
==Probleme/ToDo==
* Plattenplatz auf VM gering
* <del>keine IPv6-Unterstützung: Die Prosody-VM hat zwar eine IPv6-Adresse, diese ist aber nicht öffentlich erreichbar</del>
* <del>Wenn Coturn als TURN-Server statt "nur" als STUN-Server durch Prosody benutzt wird, funktioniert Audio- und Videotelefonie nur noch mit bytewerk.org-Usern und nicht mehr mit Externen.</del>
* <del>Verbindung mit Websocket funktioniert nicht (und ist darum in Prosody deaktiviert): Verbindung wird aufgebaut, dann gibt's einen Timeout.</del>
* Conversejs ist stellenweise etwas umständlich zu bedienen. So muss z.B. zum Anlegen eines MUC die komplette Domain des eigenen XMPP-Servers eingegeben werden. Um das zu umgehen gibt es jeweils eine Conversejs-URL für @bingo-ev.de und @bytewerk.org, bei der durch entsprechende Vorkonfiguration das Anlegen von MUCs auch ohne Eintippen des Domainnamens funktioniert. Mittelfristig kann Conversejs eventuell durch [https://github.com/movim/movim/ Movim] ersetzt werden. Movim ist allerdings Stand 2/2021 noch zu buggy (siehe Issues [https://github.com/movim/movim/issues/964], [https://github.com/movim/movim/issues/972], [https://github.com/movim/movim/issues/974]).
* VM hat keine IPv6-Unterstützung
 
siehe https://git.bingo-ev.de/groups/xmpp/-/issues
==ToDo==
 
* <del>Testen! Insbesondere: Funktioniert alle XMPP. Funktionen auch mit Nutzern aus anderen Domänen? Verhalten sich Mobilgeräte wie erwartet? (iOS Pushnachrichten, Stromsparmodus, Verzögerungen,...)</del>
=== Routing ===
* Mehr Plattenplatz
Stand 02.09.2021 gibt's ohne folgende Änderungen Routingprobleme mit IPv6:
* <del>Backup</del>
 
* <del>Monitoring</del>
Route Announcements auf dem Interface net-nat ignorieren:
In ''/etc/sysctl.d/ipv6-ignore-ra.conf'':
<pre>
net.ipv6.conf.net-nat.accept_ra=0
net.ipv6.conf.net-nat.autoconf=0
</pre>
 
 
In ''/sysconfig/network/routes'' Default-Route für IPv4 setzen:
<pre>
# target via netmask interface
default 94.142.219.94 0.0.0.0 net-public
</pre>
 
In ''/etc/iproute2/rt_tables'' neue Routingtabelle namens "public" anlegen:
<pre>
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
200 public
</pre>
 
 
Verbindungen von der öffentliche IPv6-Adresse über diese Route laufen lassen. Dazu in ''/etc/sysconfig/network/ifrule-net-public'':
<pre>
ipv6 from 2a02:868:15:72::1/64 table public
</pre>
 
==Files==
AlleDas KonfigurationsdateienAnsible Playbook und das Inventory befinden sich hier: https://git.bingo-ev.de/geierb/bytewerk-xmpp-server
 
 
190

Bearbeitungen

Navigationsmenü