XMPP-Server: Unterschied zwischen den Versionen

8.639 Bytes hinzugefügt ,  21. Februar 2021
 
== Implementierung ==
Auf der VM '''xmpp.bytewerk.org''' laufen folgende Diensteläuft:
 
* Prosody[https://prosody.im/ alsProsody]: XMPP-Server
* PostgreSQL[https://www.postgresql.org alsPostgreSQL]: Datenbank
* Coturn[https://github.com/coturn/coturn fürCoturn]: TURN und STUN (für Jingle/WebRTC benötigt, d.h. Audio-/Videotelefonie undsowie Dateiübertragung von Client zu Client)
* [https://github.com/conversejs/converse.js ConverseJS]: Webclient
* ConverseJS als Webclient
* [https://httpd.apache.org/ Apache2]: HTTPS-Reverse-Proxy für File-Up- und -Downloads, .well-known-URLs, BOSH und Websocket, Bereitstellung von ConverseJS
* [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 täglich das Fileupload-Verzeichnis aufzuräumen
* [http://etckeeper.branchable.com etckeeper]: Zum Nachverfolgen von Konfigurationsänderungen (git im /etc-Verzeichnis)
 
=== DNS ===
XMPP-Clients nutzen die SRV-Records, um anhand der JID-Domäne eines Nutzer den Server, die Components und deren Ports zu herauszufinden.
 
XMPP-Server nutzen die SRV-Records, um den zu einer Component gehörenden Server samt Ports herauszufinden.
 
Die A/AAAA-Einträge werden zum Erstellen der TLS-Zertifikate gebraucht.
 
==== Auszug aus dem Zonefile von bytewerk.org ====
<pre>
xmpp.bytewerk.org. 300 IN A 94.142.219.72 # Prosody-Server, Coturn-Server, Apache2
 
conference.bytewerk.org. 300 IN A 94.142.219.72 # MUC-Component, Apache2
proxy.bytewerk.org. 300 IN A 94.142.219.72 # Proxy65-Component, Apache2
upload.bytewerk.org. 300 IN A 94.142.219.72 # HTTP-Fileupload, Apache2
pubsub.bytewerk.org. 300 IN A 94.142.219.72 # PubSub-Component, Apache2
 
_xmpp-client._tcp.bytewerk.org. 300 IN SRV 0 5 5222 xmpp.bytewerk.org. # VirtualHost XMPP-Server, C2S
_xmpps-client._tcp.bytewerk.org. 300 IN SRV 0 5 5223 xmpp.bytewerk.org. # VirtualHost XMPP-Server, C2S Legacy SSL auf Port 5223
_xmpp-server._tcp.bytewerk.org. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # VirtualHost XMPP-Server, S2S
_xmpp-server._tcp.conference.bytewerk.org. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # MUC-Component, S2S
_xmpp-server._tcp.proxy.bytewerk.org. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # Proxy65-Component, S2S
_xmpp-server._tcp.pubsub.bytewerk.org. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # PubSub-Component, S2S
 
_xmppconnect.bytewerk.org. 300 IN TXT "_xmpp-client-xbosh=https://xmpp.bytewerk.org/http-bind" # BOSH
_xmppconnect.bytewerk.org. 300 IN TXT "_xmpp-client-websocket=wss://xmpp.bytewerk.org/xmpp-websocket" # Websocket
</pre>
 
==== Auszug aus dem Zonefile von bingo-ev.de ====
<pre>
conference.bingo-ev.de. 300 IN A 94.142.219.72 # MUC-Component, Apache2
proxy65.bingo-ev.de. 300 IN A 94.142.219.72 # Proxy65-Component, Apache2 ("proxy.bingo-ev.de" ist bereits belegt)
upload.bingo-ev.de. 300 IN A 94.142.219.72 # HTTP-Fileupload, Apache2
pubsub.bingo-ev.de. 300 IN A 94.142.219.72 # PubSub-Component, Apache2
 
_xmpp-client._tcp.bingo-ev.de. 300 IN SRV 0 5 5222 xmpp.bytewerk.org. # VirtualHost XMPP-Server, C2S
_xmpps-client._tcp.bingo-ev.de. 300 IN SRV 0 5 5225 xmpp.bytewerk.org. # VirtualHost XMPP-Server, C2S Legacy SSL auf Port 5225
_xmpp-server._tcp.bingo-ev.de. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # VirtualHost XMPP-Server, S2S
_xmpp-server._tcp.conference.bingo-ev.de. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # MUC-Component, S2S
_xmpp-server._tcp.proxy65.bingo-ev.de. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # Proxy65-Component, S2S
_xmpp-server._tcp.pubsub.bingo-ev.de. 300 IN SRV 0 5 5269 xmpp.bytewerk.org. # PubSub-Component, S2S
 
_xmppconnect.bingo-ev.de. 300 IN TXT "_xmpp-client-xbosh=https://xmpp.bytewerk.org/http-bind" # BOSH
_xmppconnect.bingo-ev.de. 300 IN TXT "_xmpp-client-websocket=wss://xmpp.bytewerk.org/xmpp-websocket" # Websocket
</pre>
 
=== Subdomains und Zertifikate ===
'''''Prosody''''' benötigt Zertifikate für ALLE beteiligten Domains, also auch von bytewerk.org und bingo-ev.de. Components ohne Zertifikat funktionieren nicht mit externen Usern.
Mit "prosodyct check" kann geprüft werden ob alle Zertikate passend zu den DNS-Einträgen und zu den Components vorhanden sind (Ausnahme: Legacy-SSL).
Für Feinheiten lohnt sich ein Blick in "/var/log/prosody/prosody.err", besonders mit eingeschaltetem "debug"-Loglevel.
 
'''''Coturn''''' benötigt nur das Zertifikat von xmpp.bytewerk.org
 
'''''Apache2''''' betreibt vHosts für folgende Hostnamen und benötigt die entsprechenden Zertifikate:
* xmpp.bytewerk.org
* conference.bytewerk.org, pubsub.bytewerk.org, proxy.bytewerk.org, upload.bytewerk.org
* conference.bingo-ev.de, pubsub.bingo-ev.de, proxy65.bingo-ev.de, upload.bingo-ev.de
 
==== Zertifikat für bytewerk.org und bingo-ev.de ====
Das bytewerk.org- und das bino-ev.de-Zertifikat wird nur von Prosody (nicht Apache2, nicht Coturn) benötigt.
Bei Änderungen/Aktualisierungen müssen sie manuell auf den Server kopiert und User "prosody" übereignet werden.
Danach muss Prosody mit "prosodyctl reload" neu geladen werden.
 
===== bytewerk.org: =====
* /etc/prosody/certs/bytewerk.org/privkey.pem
* /etc/prosody/certs/bytewerk.org/fullchain.pem
 
===== bingo-ev.de: =====
* /etc/prosody/certs/bingo-ev.de/privkey.pem
* /etc/prosody/certs/bingo-ev.de/fullchain.pem
 
===== Alle anderen Zertifikate =====
Alle Zertifikate außer dem von bytewerk.org und bingo-ev.de werden von LetsEncrypt-Certbot erstellt und liegen unter ''/etc/letsencrypt''.
Das Renewal wird per wöchentlichem Cronjob von root mit ''/usr/bin/certbot renew'' durchgeführt.
 
Zertifikate:
* xmpp.bytewerk.org
* conference.bytewerk.org, pubsub.bytewerk.org, proxy.bytewerk.org, upload.bytewerk.org
* conference.bingo-ev.de, pubsub.bingo-ev.de, proxy65.bingo-ev.de, upload.bingo-ev.de
 
Nach einem erfolgten Renewal führt Certbot die Post-Renewal-Hooks ''/etc/letsencrypt/renewal-hooks/post/'' aus:
* apache2.sh: Apache2 neu laden
* coturn.sh: Zertifikate nach ''/etc/coturn/certs/'' kopieren, Rechte anpassen und Coturn neu starten
* prosody.sh: Zertifikate nach ''/etc/prosody/certs/'' kopieren, Rechte anpassen und Prosody neu laden
 
 
=== 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 empfiehlt Prosody, stattdessen das Modul "mod_http_upload_external" zu verwenden.
Bei dem Modul wird dazu das PHP-Skript "share_v2.php" benutzt, das unter dem Apache-vHost "https://upload.bytewerk.org/share_v2.php" (bzw. https://upload.bingo-ev.org/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.
 
=== XEP-0368: .well-known-URLs ===
Der Webserver bytewerk.org muss per Reverse Proxy für die URL https://bytewerk.org/.well-known/host-meta(.json) auf http://xmpp.bytewerk.org/.well-known/... verweisen. Ein Redirect reicht nicht, da die CORS_Header in Prosody konfiguriert und gesetzt werden. Gleiches gilt für den bingo-ev.de-Webserver.
 
 
=== Prosody ===
Kommentierte Konfigurationsdatei "/etc/prosody/prosody.cfg.lua"
 
Da beim Prosody-Paket von OpenSuse eine Menge benötigter Module fehlen, wurden die Module direkt aus dem Prosody-Mercuriual-Repository nach "/usr/local/lib/prosody-modules/" geklont
Zum Aktualisieren einfach "/usr/local/sbin/update-prosody-modules.sh" ausführen und Prosody mit "prosodyctl reload" neu laden.
 
 
=== Apache2 ===
vHosts in "/etc/apache2/vhosts.d/" angelegt, sonst keine Änderungen.
* 01-set-servername.conf: Hostname auf xmpp.bytewerk.org setzen
* conference.bytewerk.org.conf: Nur Platzhalter für Certbot
* proxy.bytewerk.org.conf: Nur Platzhalter Certbot
* pubsub.bytewerk.org.conf: Nur Platzhalter Certbot
* upload.bytewerk.org.conf: Fileupload per mod_http_upload_external + share_v2.php
* xmpp.bytewerk.org.conf: Reverse-Proxy für BOSH, Websocket und für die von mod_http_altconnect erstellte .well-known-URIs
 
Alle vHosts außer upload.bytewerk.org leiten auf https://jabber.bytwerk.org um.
 
Für bingo-ev.de gibt es entsprechende vHosts.
 
=== Coturn ===
Kommentierte Konfigurationsdatei "/etc/coturn/turnserver.conf"
 
==Benutzerzugänge==
190

Bearbeitungen