Menu

Eigener XMPP Server mit Prosody auf Uberspace

Prosody ist ein leichtgewichtiger XMPP Server der relativ einfach zu installieren und konfigurieren ist. XMPP ist ein offenes Kommunikationsprotokoll und wird zum Datenaustausch sowie Instant Messaging eingesetzt. Das Protokoll wird beispielsweise von WhatsApp eingesetzt, bildet da aber ein geschlossenens System und erlaubt es nicht, das WhatsApp-Benutzer mit anderen XMPP-Benutzern kommunizieren können. Natürlich ist Prosody kostenlos und Opensource und für die meisten Linux Distributionen, BSD, Mac OS sowie für Windows verfügbar. In diesem Beitrag werde ich zeigen, wie ihr euch Prosody auf eurem Uberspace installieren könnt. Zuerst möchte ich mich aber noch bei Alexander Hof bedanken der auf seinem Blog cosmofox ein super Tutorial zu der Installation geschrieben hat. Da ich an einigen Stellen von dem Tutorial abgewichen bin, habe ich mich entschieden ein eigenen Beitrag zu verfassen.

Update 05. Juni 2017:Empfehlung für öffentliche XMPP Server angepasst. Link zum IM Observatory gefixt.
Update 21. Januar 2017:Seit Prosody 0.9.12 kann luasec 0.6 verwendet werden. Mehr Infos im Prosody Blog.
Update 22. November 2016: Das Problem der hohen CPU Auslastung ist seit März behoben. Die Lösung ist in diesem Issue dokumentiert. Danke an Adoa Coturnix für den Hinweis.
Update 26. Februar 2016: Komplette Überarbeitung des Artikels. Ich hatte mit Prosody auf Uberspace immer wieder Probleme mit extrem hoher CPU Auslastung. Da ich diese leider nicht in den Griff bekommen habe, bin ich mit Prosody auf einen eigenen Server umgezogen. Die Konfiguration sollte aber weiterhin ohne Probleme unter Uberspace funktionieren. Wenn jemand einen Lösungsansatz für das CPU-Problem hat, wäre ich dafür sehr dankbar.
Update 08. Dezember 2015: Konfigurationshinweise für SSL Zertifikate und DNS hinzugefügt, Testmöglichkeiten für die Konfiguration

1 OpenSSL aktualisieren

Damit für die Transportverschlüsselung starke Cipher genutzt werden können wird eine aktuelle Version von OpenSSL benötigt. Zuerst solltet ihr prüfen, welche Version in eurem Uberspace aktiv ist.

  1. openssl version

Die aktuelle Version ist OpenSSL 1.0.2d 9 Jul 2015, wird bei euch eine ältere angezeigt werden solltet ihr OpenSSL aktualisieren. Dafür gibt es zwei Möglichkeiten. Entweder ihr installiert euch mit toast die aktuelle Version lokal in eurem Uberspace oder ihr verwendet die Version die Uberspace bereitstellt (danke an Moritz von Uberspace für den Hinweis). Ich werde hier auf die zweite Variante eingehen da ich mir so das Updaten von OpenSSL erspare. Dazu ist lediglich eine kleine Anpassung an der Datei .bash_profile nötig.

  1. nano ~/.bash_profile
  2. ========================================
  3. export PATH=/package/host/localhost/openssl/bin:$PATH

Damit die Änderung wirksam wird, müsst ihr euch neu anmelden oder mit dem Befehl

  1.  source ~/.bash_profile

das Profil neu laden.

2 Lua vorbereiten und Module installieren

Auch hier solltet ihr als erstes überprüfen, welche Version in eurem Uberspace verwendet wird.

  1. lua -v

Es sollte die Version 5.1.* installiert sein, dabei belassen wir es auch weil Lua 5.2 von Prosody noch nicht unterstützt wird.

Im nächsten Schritt installieren wir mittels luarocks die benötigten Module. Vorbereitend müssen aber noch LUA_PATH und LUA_CPATH in .bash_profile eingetragen werden, damit lua den Pfad zu den lokal installierten Moduln kennt.

  1. nano ~/.bash_profile
  2. ==================================
  3. export LUA_PATH='/home/UUSER/.luarocks/share/lua/5.1/?.lua;/home/UUSER/.luarocks/share/lua/5.1/?/init.lua;./?.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/home/UUSER/.luarocks/share/lua/5.1/?.lua;/home/UUSER/.luarocks/share/lua/5.1/?/init.lua;./?.lua;/usr/lib64/lua/5.1/?.lua;/usr/lib64/lua/5.1/?/init.lua;/home/UUSER/.luarocks/share/lua/5.1/?.lua;/home/UUSER/.luarocks/share/lua/5.1/?/init.lua;./?.lua'
  4. export LUA_CPATH='/home/UUSER/.luarocks/lib/lua/5.1/?.so;/usr/lib/lua/5.1/?.so;/home/UUSER/.luarocks/lib/lua/5.1/?.so;./?.so;/usr/lib64/lua/5.1/?.so;/usr/lib64/lua/5.1/loadall.so;/home/UUSER/.luarocks/lib/lua/5.1/?.so'

UUSER muss anschließend noch durch euren Uberspace-Namen ersetzt werden.

  1.  sed "s/UUSER/$USER/g" -i ~/.bash_profile

Auch hier muss das Profil neu geladen werden.

  1.  source ~/.bash_profile

Jetzt können wir die Module installieren. Besonders wichtig ist das Modul luasec, da dies für Perfect Forward Security (PFS) benötigt wird. Kurze Zwischeninfo: PFS verhindert das nachträgliche Entschlüsseln aufgezeichneter verschlüsselter Kommunikation, da nach dem Beenden einer Sitzung der Sitzungsschlüssel aus dem geheimen Langzeitschlüssel nicht mehr rekonstruiert werden kann. Das aber nur am Rande. Achtet beim Modul luasec darauf, dass ihr bei OPENSSL_DIR das richtige Verzeichnis angebt. luasec 0.6 ist nicht kompatibel mit Prosody 0.9, ihr müsst also zwingend die Version 0.5.1 installieren.

  1. luarocks install luasocket --local
  2. luarocks install luaexpat --local
  3. luarocks install luafilesystem --local
  4. luarocks install luasec 0.5.1 --local OPENSSL_DIR=/package/host/localhost/openssl

Ob alles korrekt installiert wurde, kann man mit folgendem Befel überprüfen.

  1. luarocks list
  2.  
  3. Installed rocks:
  4. ----------------
  5. luaexpat
  6.    1.3.0-1 (installed) - /home/UUSER/.luarocks/lib/luarocks/rocks
  7. luafilesystem
  8.    1.6.3-1 (installed) - /home/UUSER/.luarocks/lib/luarocks/rocks
  9. luasec
  10.    0.5-2 (installed) - /home/UUSER/.luarocks/lib/luarocks/rocks
  11. luasocket
  12.    3.0rc1-2 (installed) - /home/UUSER/.luarocks/lib/luarocks/rocks

3 Prosody installieren

Prosody lässt sich relativ schnell per toast installieren. Schaut bitte auf der Webseite von Prosody nach der aktuellen Version und ändert diese gegebenenfalls in der folgenden Anweisung.

  1. toast arm https://prosody.im/downloads/source/prosody-0.9.10.tar.gz

Wer es lieber mag, kann Prosody auch aus den Quellen per Hand installieren.

4 Prosody konfigurieren

Zuerst legen wir ein paar Verzeichnisse an, die wir später noch benötigen.

  1. mkdir -p ~/var/prosody/data
  2. mkdir -p ~/var/prosody/ssl
  3. mkdir -p ~/var/log/prosody
  4. mkdir -p ~/var/prosody/community-modules

4.1 TLS Konfiguration

Für die Transportverschlüsselung mittles TLS werden Zertifikate benötigt. Prinzipiell ist es natürlich möglich, selbstsignierte Zertifikate zu verweden. Dabei gibt es aber immer wieder Probleme mit einigen Clients und der Kommunikation mit anderen XMPP Servern. Aus diesem Grund empfehle ich ein signiertes Zertifikat zu kaufen oder einfach ein kostenloses signiertes Zertifikat beispielsweise von StartSSL oder Let's Encrypt zu verwenden.

Ich hatte bereits mehere Anfragen von Nutzern die Probleme bei der Einbindung von StartSSL Zertifikaten hatten. Deshalb möchte ich an dieser Stelle noch kurz darauf eingehen. Neben eurem privaten (private.key) und öffentlichen (public.crt) Schlüssel benötigt ihr noch das root Zertifikat der Zertifizierungsstelle sub.class1.server.ca.pem. Legt alle drei Dateien am besten direkt im Ordner ~/var/prosody/ssl ab. Abschließend müssen public.crt und sub.class1.server.ca.pem noch kombiniert werden:

  1. cat sub.class1.server.ca.pem >> public.crt

Wenn ihr euren Server zusätzlich mit PFS sichern wollt, benötigt ihr noch ein Diffie-Hellmann-Parameter. Es wird aktuell eine Stärke von mindestens 2048 bit empfohlen, Uberspace rät in seinem Wiki sogar zu 4096. Werdet während der Generieung nicht unruhig, es ist vollkommen normal das dieser Vorgang mehrere Minuten dauert. Aus Kompatibilitätsgründen mit Java-Clients wie Jitsi verwende ich ein 2048 bit Parameter.

  1. cd ~/var/prosody/ssl/
  2. openssl dhparam -out dh-2048.pem 2048

Eure Zertifikate und den DH-Parameter könnt ihr theoretisch in einem beliebigen Ordner ablegen, ich verwende dafür ~/var/prosody/ssl/prosody_domain.tld.crt.

4.2 Ports einrichten

Für die von mir vorgestellte Konfiguration werden fünf Ports benötigt:
  • Server-to-Server Port
  • Client-to-Server Port
  • PROXY65 Port - Wird für den Dateitransfer benötigt
  • HTTP Port - Wird für den HTTP-Server von Prosody benötigt
  • HTTPS Port - Wird für den HTTP-Server von Prosody benötigt
Der build-in HTTP Server von Prosody wird für einige Module wie zum Beispiel BOSH benötigt. Ich benötige ihn hauptsächlich für den Dateitransfer mittels http_upload da in Muli-User-Chats (MUC) der Dateiaustausch mittels PROXY65 nicht funktioniert.

Mittlerweile gibt es bei Uberspace ein Script mit dem ihr selbst Ports in der Firewall öffnen uns wieder schließen könnt ohne eine Mail an den Support zu schreiben. Wie das funktioniert findet ihr im Wiki.

4.3 Prosody Community Modules

Einige von mir verwendete Module sind in dem offiziellen Repository nicht vorhanden. Aus diesem Grund muss noch das Community-Repo heruntergeladen werden.

  1. hg clone https://hg.prosody.im/prosody-modules/ ~/var/prosody/community-modules

Als nächstes müssen wir noch ein PID-File anlegen.

  1. touch ~/var/prosody/prosody.pid

4.4 Serverkonfiguration

Jetzt kopieren wir die mitgelieferte Config als Backup und erzeugen uns eine eigene die wir später verwenden wollen. Unser Config-File legen wir unter ~/etc/prosody ab, damit es bei Updates von Prosody nicht überschrieben wird.

  1. touch ~/var/prosody/prosody.pid
  2. mkdir -p ~/etc/prosody
  3. cp ~/.toast/armed/etc/prosody/prosody.cfg.lua ~/etc/prosody/prosody.cfg.lua.stock
  4. nano ~/etc/prosody/prosody.cfg.lua

Damit unsere Konfiguration auch verwendet wird, müssen wir noch einen symbolischen Link im richtigen Verzeichnis erstellen.

  1. rm ~/.toast/armed/etc/prosody/prosody.cfg.lua
  2. ln -s ~/etc/prosody/prosody.cfg.lua ~/.toast/armed/etc/prosody/prosody.cfg.lua

Die Konfiguration die ich verwende sieht wiefolgt aus. Hier ist natürlich wieder UUSER durch euren Uberspace-Namen zu ersetzten.

  1. ---------- Server-wide settings ----------
  2. -- Settings in this section apply to the whole server and are the default settings
  3. -- for any virtual hosts
  4.  
  5. -- This is a (by default, empty) list of accounts that are admins
  6. -- for the server. Note that you must create the accounts separately
  7. admins = { "admin@example.com" }
  8.  
  9. -- Path to community modules
  10. plugin_paths = { "/home/UUSER/var/prosody/community-modules" }
  11.  
  12. -- This is the list of modules Prosody will load on startup.
  13. modules_enabled = {
  14.     "roster"; -- Allow users to have a roster. Recommended
  15.     "saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.
  16.     "tls"; -- Add support for secure TLS on c2s/s2s connections
  17.     "dialback"; -- s2s dialback support
  18.     "disco"; -- Service discovery
  19.     "private"; -- Private XML storage (for room bookmarks, etc.)
  20.     "vcard"; -- Allow users to set vCards
  21.     "privacy"; -- Support privacy lists
  22.     "version"; -- Replies to server version requests
  23.     "uptime"; -- Report how long server has been running
  24.     "time"; -- Let others know the time here on this server
  25.     "ping"; -- Replies to XMPP pings with pongs
  26.     "pep"; -- Enables users to publish their mood, activity, playing music and more
  27.     "register"; -- Allows users to register new accounts and change passwords
  28.     "admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands
  29.     "admin_telnet"; -- Opens telnet console interface on localhost port 5582
  30.     "http"; -- Build-In http Server, needed for http_upload
  31.     "posix"; -- POSIX functionality, sends server to background, enables syslog, etc.
  32.     "welcome"; -- Welcome users who register accounts
  33.     "proxy65"; -- It allows the server to proxy file transfers between 2 clients
  34.     "http_upload"; -- Implements XEP-0363, which lets clients upload files over HTTP
  35.     "blocking"; -- Communications Blocking
  36.     "smacks"; -- Stream Management
  37.     "carbons"; -- shared and synchronized view of all conversations across all online clients and devices
  38.     "csi"; -- Implements Client State Indication
  39.     "throttle_presence"; -- see https://modules.prosody.im/mod_throttle_presence.html
  40. };
  41.  
  42. -- mod_welcome
  43. welcome_message = "Hallo $username! Willkommen auf dem XMPP Server $host.";
  44.  
  45. -- Disable account creation by default, for security
  46. allow_registration = false;
  47.  
  48. -- Force clients to use encrypted connections
  49. c2s_require_encryption = true
  50.  
  51. -- Force certificate authentication and encryption for server-to-server connections
  52. s2s_require_encryption = true
  53. s2s_secure_auth = true
  54.  
  55. -- Select the authentication backend to use.
  56. authentication = "internal_hashed"
  57.  
  58. -- Location of the Prosody data storage directory
  59. data_path = "/home/UUSER/var/prosody/data";
  60.  
  61. -- POSIX configuration
  62. pidfile = "/home/UUSER/var/prosody/prosody.pid";
  63. -- IMPORTANT for daemontools! DO NOT EDIT!
  64. daemonize = false;
  65.  
  66. -- Logging configuration
  67. log = {
  68.         info = "/home/UUSER/var/log/prosody/prosody.log";
  69.         --error = "/home/UUSER/var/log/prosody/prosody.err";
  70.         --debug = "/home/UUSER/var/log/prosody/prosody.debug";
  71. }
  72. -- If you want logging by daemontools use this part instead
  73. -- You can also change 'info' to debug or error
  74. -- log = { info = "*console" }
  75.  
  76. -- PROXY65
  77. proxy65_ports = { XXXX }
  78.  
  79. -- Build-in http Server
  80. http_ports = { XXXX }
  81. https_ports = { XXXX }
  82.  
  83. -- Server to Server
  84. s2s_ports = { XXXX }
  85. -- Client to Server
  86. c2s_ports = { XXXX }
  87.  
  88. -- TLS default settings
  89. ssl = {
  90.         key = "/home/UUSER/var/prosody/ssl/private.key";
  91.         certificate = "/home/UUSER/var/prosody/ssl/cert.crt";
  92.         dhparam = "/home/UUSER/var/prosody/ssl/dh-2048.pem";
  93. }
  94. -- it is NOT recommended to change cipher or options because default settings are good
  95. -- for more informations see http://http://prosody.im/doc/advanced_ssl_config
  96. -- default configuration gives you also a A/A rating on IM Observatory
  97.  
  98.  
  99. ----------- Virtual hosts -----------
  100. VirtualHost "example.com"
  101.  
  102. ------ Components ------
  103. ---Set up a MUC (multi-user chat) room server
  104. Component "conference.example.com" "muc"
  105.         name = "Prosody Chatrooms"
  106.         restrict_room_creation = false
  107.         -- Enables pastebin. For more informations see https://modules.prosody.im/mod_pastebin.html
  108.         modules_enabled = { "pastebin" }
  109.         pastebin_trigger = "!paste"
  110.  
  111. -- Set up a SOCKS5 bytestream proxy for server-proxied file transfers
  112. Component "proxy.example.com" "proxy65"
  113.         proxy65_acl = { "example.com" }
  114.  
  115. -- Set up a http file upload because proxy65 is not working in muc
  116. Component "upload.example.com" "http_upload"

4.5 Service anlegen

Damit wir Prosody starten können, benötigen wir noch einen daemontool-service. Wenn ihr noch keinen Service angelegt habt müsst ihr daemontools noch einrichten an sonsten könnt ihr diesen Schritt überspringen.

  1. uberspace-setup-svscan

Jetzt legen wir einen Service für Prosody an. Weitere Details zu daemontools findet ihr im Uberspace-Wiki.

  1. uberspace-setup-service prosody ~/.toast/armed/bin/prosody

Wer in der Konfiguration das Logging über daemontoos eingerichtet hat, kann sich das Lesen der Logfiles etwas einfacher zu machen indem die Datei .bashrc um eine Funktion erweitert wwird

  1. nano ~/.bashrc
  2. ================================
  3. readlog(){
  4.         if [ -n "$1" ]; then
  5.                 cat ~/service/$1/log/main/* | tai64nlocal | less;
  6.         else
  7.                 echo "Usage: readlog <daemonname>";
  8.         fi;
  9. }

Vergesst nicht, auch diese Änderung durch eine Neuanmeldung oder source zu aktivieren. Anschließend könnt ihr das Logfile mit so auslesen:

  1. readlog prosody

4.6 Benutzerkonto anlegen

Was jetzt noch fehlt ist ein Benutzeraccount. Dieser lässt sich wiefolgt erstellen.

  1. prosodyctl adduser admin@domain.tld

5 DNS Einträge

Da Prosody auf Uberspace nicht auf den Standardports läuft, müsst ihr in eurem DNS noch SRV Records anlegen. Der Eintrag für conference.example.com ist nicht zwingend erforderlich, er wird nur benötigt, wenn auch Benutzer anderer Server Chaträumen beitreten sollen. Die SRV Records sehen prinzipiell so aus:

  1. _xmpp-client._tcp.example.com. 18000 IN SRV 0 5 PORT xmpp.example.com.
  2. _xmpp-server._tcp.example.com. 18000 IN SRV 0 5 PORT xmpp.example.com.
  3. _xmpp-server._tcp.conference.example.com. 18000 IN SRV 0 5 PORT xmpp.example.com.

Praktisch ist es aber so, dass jeder DNS die Einträge in einer anderen Reihenfolge haben wil, die Parameter sind aber grundsätzlich die gleichen.

Außerdem werden für folgende Subdomains A-Records benötigt:
  • example.com
  • proxy.example.com
  • upload.example.com

6 Konfiguration testen

Zwei gute Möglichkeiten um die DNS und SSL Konfiguration zu testen sind check.messaging.one und kingant.net.

7 Clients

Zum Schluss möchte ich noch eine kleine Empfehlung für Clients geben. Ich verwende Conversation unter Android und Gajim unter Linux. Beide Clients untersstützen OTR und OMEMO für die Verschlüsselung die relativ einfach zu benutzen sind. Insbesondere müssen bei diesen Methoden keine Schlüssel oder Dateien händisch ausgetauscht werden. Für Gajim musste ich unter Linux Mint noch das Paket python-pyasn1 nachinstallieren, da sonst das Zertifikat nicht geprüft werden kann.

Damit sind wir auch am Ende angekommen. Ihr habt jetzt einen funktionierenden XMPP Server und eine Benutzeracount und könnt mit anderen Benutzern über euren aber auch über alle anderen Jabber Server chatten.

Wer den Aufwand einer eigenen Installation scheut, kann sich einfach ein Account auf einem der freien Jabber Server zum Beispiel trashserver.net (Thomas Leister) oder pimux.de (Finn Christiansen) anlegen. Wer Anregungen oder Fragen hat oder einfach nur mal "Hallo" sagen möchte erricht mich ab sofot unter geeklabor@rknet.org :-)

Euch hat der Beitrag gefallen, ihr habt Fragen oder Anregungen? Hinterlasst mir einen Kommentar oder diskutiert im OSBN-Chat.

Kommentare

Linear Verschachtelt
tux.

tux.

  1. Prosody läuft bei mir unter OpenBSD, ziemlich stabil. Gibt also noch mehr Systeme als nur Linsux und Windows.

  2. Nein, bitte nicht aus Angst vor der Installation einfach auf jabber.ccc.de aufspringen. Hier steht, wieso.

  3. Unter Windows empfehle ich den Client Miranda NG, unter Android Xabber.
tux.

tux.

Meh, Links gehen nicht.

Robert Kaussow

Hi,
Links sollten generell funktionieren ich schau da bei Gelegenheit aber nochmal rein.
zu 1. Sorry das ich BSD vergessen habe. Ich habe BDS und Mac OS im Beitrag ergänzt.
zu 2. Nicht jeder will oder kann sich selbst einen Server installieren, der CCC betreibt seinen Server weiterhin empfielt aber andere Server zu benutzen. Diese Aussage erschließt sich mir nicht ganz. Es sollte auch nur ein genereller Hinweis sein, dass es reichlich Jabber Server im Netz gibt.

tux.

tux.

"Diese Aussage erschließt sich mir nicht ganz" => Die Aussage ist folgende: XMPP kann nur funktionieren, wenn möglichst viele Leute ihren eigenen Server betreiben. Wer blind denen vertrauen möchte, die "sowieso gratis" einen betreiben, der kann auch bei Skype bleiben; oder muss halt hoffen, dass der Betreiber nicht zwischendrin mal keinen Bock mehr hat.

Robert Kaussow

Mir ist durchaus bewusst, dass es dabei um Dezentralität geht und da bin ich auch klar dafür. Nur gibt es eben Menschen die das nicht können bzw. sich nicht zutrauen oder eben einfach nicht wollen. Der Satz vom CCC ging übrigens noch weiter "... empfehlen wir allen Nutzern ... sich einen Account auf anderen Servern zu klicken." und darum ging es mir. Warum nicht dann beim CCC einen Account anlegen?
"Wer blind denen vertrauen möchte, die "sowieso gratis" einen betreiben, der kann auch bei Skype bleiben;" Mit solchen Aussagen mach man es sich für meinen Geschmack ein wenig einfach. Mir ist nicht bekannt das Skype End-to-End Encyption implementiert hat, außerdem gibt es meines Wissens nach bei Syke in der kostenlosen Version Limitierungen bei Gruppen-Chats, im Windows Client bekomme ich Werbung eingeblendet, ich muss für die Registrierung meine Email angeben und zu guter letzt... Skype gehört zu Microsoft. Wem man jetzt mehr Vertrauen möchte, das muss jeder für sich entscheiden ;-) Ich im Zweifel eher einem Serverbetreiber den ich vlt. sogar persönlich kenne. Aus diesem Grund habe ich für alle die keinen eigenen Jabber Server betreiben wollen darauf hingewiesen, dass es auch öffentliche Server gibt die man gern nutzen darf. Wie ich finde wesentlich besser als Skype und Co. gerade wenn man Wert auf OpenSource legt.
Links werden jetzt korrekt umgewandel. Danke für den Hinweis :-)

MM

MM

Ich habe deinen Beitrag mal als Anlass genommen erneut mich mit einem eigenen XMPP-Server zu beshäftigen. Allerdings war es auch diesmal wieder nicht erfolgreich (Andere Nutzer können mich nicht hinzufügen).

Sein wir ehrlich, derzeit scheint es IMHO selbst für ambitionierte Nutzer kaum möglich zu sein einen sauber konfigurierten Server in überschaubarer Zeit hinzustellen. Zu viele Fehler die man bei DNS, Certs, Konfiguration und XEPs machen kann und zu viel was dann doch mal einige Clients aus dem Tritt bringt. Hinzu kommt, keine gute Diagnosemöglichkeit, welche auch mal die eigentliche Funktionalität testet... Schade :-/

Robert Kaussow

Hi,
also ganz so drastisch würde ich das nicht sehen :-) ich gebe dir vollkommen recht es gibt ein paar Fallstricke. Ich kann jetzt nur für Prosody sprechen, hab selbst noch keinen anderen XMPP Server installiert, aber ich hatte den Server nach gut einem Tag fertig eingerichtet. Seit dem läuft er ziemlich stabil und ich hatte keine größeren Schwierigkeiten. Mit welchem Server hast du es denn probiert? Ich bin auch kein Experte aber wenn du magst können wir gern zusammen probieren deinen Server zum laufen zu bekommen. Ich würde mich auch als Testuser zur verfügung stellen um zu schauen ob alles läuft :-) Das von dir beschrieben Problem klingt für mich stark nach DNS Problemen, läuft dein Server auf den Standardports für s2s und c2s? Ich hatte gerade bei den DNS Einträgen auch etwas Frickelarbeit weil jeder DNS die Einträge anders haben will. Also wenn du Unterstützung brauchst sag bescheid.

MM

MM

Ich habs nun nochmal probiert, aber komme einfach nicht zu einem funktionierenden Setup. Vielleicht hilft es ja wirklich mal zusammen drauf zu schauen :-)

MM

MM

Danke nochmal für deine Hilfe Robert! Nun funzt es ja endlich,das Problem waren also doch Zertifikate und SSL ;-)

Robert Kaussow

Kein Problem. Immer wieder gern :-)

Ralf

Ralf

Hallo Robert Kaussow,

ich bleib an dem Punkt der Installation hängen wo ich die Konfigurationdatei "prosody.cfg.lua" bearbeiten soll. Bei abspeichern der Konfigurationsdatei sagt mir nano ich hätte dazu keine Berechtigung. Ich kann mir das überhaupt nich erklären, hast du vielleicht eine Idee wieso ich keine Berichtigung dazu habe.

Vielen Dank

Ralf

Robert Kaussow

Hallo Ralf,
bist du dir sicher, dass du im richtigen Verzeichnis bist? Hast du den Befehl nano ~/etc/prosody/prosody.cfg.lua kopiert oder abgetippt? Wichtig ist hier das ~ welches auf dein home-Verzeichnis verweist. Ansonsten wechsel doch mal mittels cd in den Ordner ~/etc/prosody/ und führe dann nano prosody.cfg.lua aus. Wenn es immer noch Probleme gibt, bitte gern wieder melden.

Benedikt

Benedikt

Ich habe nach deiner Anleitung, auf dem Uberspace eingerichtet und kann mich auch dazu verbinden, aber leider kann ich keine User von einem Anderen Server hinzufuegen

Robert Kaussow

Von welchem Server denn zum Beispiel? Das größte Problem ist die SSL Konfiguration und DNS Einträge. Teste deinen Server mal bitte unter folgendem Link sowohl für s2s als c2s. Dabei werden die SSL und auch die DNS Konfiguration getestet. Die von mir im Beitrag benutzte Konfiguration ist relativ streng und schließt auch ein paar Server aus die zum Beispiel keine starken Cipher Suiten unterstützen. Man kann natürlich auch die verwendetet Chipers anpassen um eine höhere Kompatibilität mit anderen Servern zu erreichen. Ich persönlich würde nicht dazu raten, für mich geht Sicherheit vor Kompatibilität. Auch bei selbstsignierten Zertifikaten kann es zu Problemen kommen. Ich würde daher immer zu signierten (kostenlosen) Zertifikaten von Let's Encrypt (noch beta) oder Startssl raten.

Benedikt

Benedikt

Der fremde Server ist draugr.de

Ich habe mir ein erstelltes Zertifikat von StarSSL erstellen lassen, ich habe so den verdacht das es eventuell.

Ich habe so den verdacht das meine DNS config das Problem ist:
Typ: SRV
Gewichtung 10
Port 64**9
Prio: 10
TTL: 3600

Benedikt

Benedikt

Der Test hinter dem Link ist Fehlgeschlagen sowohl c2s, als auch s2s

Benedikt

Benedikt

Ok, den DNS part habe ich im Griff.

Robert Kaussow

Hi,
freut mich. Bitte schreib mir eine Mail wenn du Hilfe beim SSL Zertifikat brauchst. Das führt sonst hier in den Kommentaren etwas zu weit. Die Email Adresse findest du hier.

Benedikt

Benedikt

Danke fuer das Angebot, ich werde da morgen mal drauf zurück kommen, bei dern Certs scheiten die Tests komplett, der rest schaut sehr gut aus.

intux

intux

Was hast Du nun für DNS-Einstellungen gewählt?

Robert Kaussow

Hallo Frank,
ich verwende die DNS Einstellungen wie sie im Artikel angegeben sind.

Steff

Steff

Erst einmal vielen Dank für das tolle Tutorial!
Ich bin wirklich sehr gut damit zurecht gekommen. Eine einzige Sache läuft aktuell noch nicht richtig. Bei der Abfrage welche Version genutzt wird, kommt nur "running Prosody version unknown on Linux". Hast du / ihr eine Idee woran das liegen könnte und wie man das behebt?

Robert Kaussow

Hi Steff,
freut mich das dir der Artikel geholfen hat. Zu deiner Frage kann ich leider nichts sagen... ist mir selbst nicht mal aufgefallen :-) Wie hast du die Versionsabfrage gemacht?

Niklas

Niklas

Dies geht mit prosodyctl about.

Robert Kaussow

Ja das hat sich mittlerweile geklärt. Das liegt an der Installation mittels toast. Alternativ kann man Prosody auch händisch installieren dann geht auch die Versionsabfrage. Ob man das braucht muss jeder selber wissen :-)

Lukas

Lukas

Hallo,

weiß vielleicht einer ob / wie man das einstellen kann, dass man auch Dateien (Bilder, Sprachmemos, etc.) beim Gruppenchat (MUC) versenden kann?

Vielen Dank im Voraus.

Robert Kaussow

Hallo Lukas,
für den Dateiaustausch muss noch das Modul mod_proxy65 aktiviert und eingerichtet werden. Eine deutsche Anleitung dazu findest du hier. Ich werde den Part bei Gelegenheit noch mit aufnehmen, dann ist es vollständig.
Viele Grüße

Lukas

Lukas

Hi Robert,
vielen Dank für die Antwort.
Darauf bin ich mittlerweile auch gestoßen.
Jedoch funktioniert somit der Datenaustausch bei den Gruppen (Multi User Chat (MUC)) ja weiterhin nicht.
So wie ich nun gelesen habe ist das eine andere Baustelle und funktioniert anscheinend überhaupt nicht, was natürlich sehr schade ist, somit ist XMPP / Prosody nicht wirklich für mich (und meine Kollegen) geeignet. :/

Trotzdem dennoch vielen Dank für die Anleitung, hat eigentlich relativ gut funktioniert.

Robert Kaussow

Hi Lukas,
dass das im MUC nicht funktioniert war mir bis gestern auch neu :-) Ich hatte danach aber noch ein kurzes Gespräch im Gajim Channel. Es gibt für Prosody ein Modul 'httpupload'. Darüber lassen sich Dateien per HTTP auf den Prosody Server hochladen und von anderen Usern herunterladen. Unter Conversation funktioniert das wohl out of the box, für Gajim gibt es ein entprechendes Plugin.

Ich bin selbst leider noch nicht dazu gekommen mir das mal anzuschauen aber vielleicht hilft dir das ja schonmal weiter.

Viele Grüße
Robert

Lukas

Lukas

Hi Robert,

danke für den Hinweis.
Kann mich evtl. jemand bei dem HTTP Upload Modul unterstützen?
Ich würde ja schon mal ganz andere Ports als die Standard-Ports benötigen, jedoch kann ich die HTTP-Modul-Datei unter .toast/armed/lib/prosody/modules nicht anpassen, da ich hier nicht die benötigten Rechte hab.

Jemand das mit Uberspace schon zum Laufen gebracht?

Grüße,
Lukas

Robert Kaussow

Hi Lukas,
ich habe den Beitrag komplett überarbeitet. Die Konfiguration von Prosody unterstützt jetzt auch HTTP Upload. Wenn du da noch Unterstützung brauchst sag bescheid, dann können wir uns das gern nochmal gemeinsam anschauen.
Viele Grüße

Lukas

Lukas

Hi Robert,
danke dir für deine Mühe.
Hab das Tutorial nun gestern nochmals durchgemacht und scheint soweit alles zu funktionieren.
Vielen Dank - macht so nun deutlich mehr Spaß. :-)

Robert Kaussow

Freut mich :-)

MM

MM

Wie habt ihr denn das mit SSL bei letsencrypt gelöst? Normalerweise trägt das uberspace-skript ja nur die subdomains automatisiert ein. Die werden dann einfach mit muc, proxy, ... erweitert?

MM

MM

Das geht also auch, bedarf aber Eingriffe an zwei Stellen:
- neue Subdomains in ~/config/letsencrypt/cli.ini ergänzen
- neue Subdomains und mapping in ~/config/letsencrypt/renewal/conf ergänzen
Dann letsencrypt neu anstoßen und das entstandene fullchain mit dem Schlüssel in der prosody.cfg.lua hinterlegen. (DNS und Ports danach nicht vergessen ;-) )

Robert Kaussow

Hi,
vielen Dank für die Info. Ich werde die Beschreibung für die Nutzer von Let's Encrypt noch mit in den Beitrag aufnehmen :-)

brad

brad

Hallo MM, ich würde diesen Punkt auch gerne genauer erläutert haben:

- neue Subdomains und mapping in ~/config/letsencrypt/renewal/conf ergänzen

Die Subdomains hat letsecrypt automatisch in die Datei geschrieben, aber an welcher Stelle sind die Mappings einzufügen? Könntest du das vielleicht an einem Beispiel erläutern?

Robert Kaussow

@Adoa Sorry ich hab dein Kommentar versehentlich gelöscht. Ja klar kein Thema. Ich hoffe das Ticket bringt was und der Fehler wird gefunden ;-)

Adoa Coturnix

Adoa Coturnix

Das Problem mit der CPU ist gelöst:

interfaces = {"x.x.x.x", "x:x:x::x"}
auf die IPs deines Uberspace setzen

Prosody Issue

Robert Kaussow

Das sind ja sehr gute Neuigleiten :-) Schön das es nun eine Lösung gibt und danke für deine Mühe.

phillip

phillip

Vielen Dank für diese sehr hilfreiche Anleitung!

Mit dem Befehl zur Installation von luasec wurde die neuste Version 0.6 installiert, die offenbar mit Prosody nicht kompatibel ist. Mit der Version 0.5.1 funktionierte es dann tadellos:

luarocks install luasec 0.5.1 --local OPENSSL_DIR=/package/host/localhost/openssl

Beste Grüße
ph

Robert Kaussow

Hi Phillip,

da hast du vollkommen recht. Das Problem hatte ich auch schon mit anderen Leuten diskutiert. Ich dachte eigentlich auch diesen Hinweis im Beitrag aufgenommen zu haben, das ist mir aber wohl durch die Lappen gegangen. Ich habs ergänzt, vielen Dank für den Hinweis

MM

MM

Perspektivisch scheinen sich übrigens evtl. diese Profile durchzusetzen https://xmpp.org/extensions/xep-0375.html

Michael

Michael

MM, kannst Du dazu mal ein Beispiel geben?
die Domain - zB. xmpp.domain.tld ist in der cli.ini eingetragen.
Dann trage ich muc.xmpp.domain.tld ebenfalls in der cli.ini ein -
aber was als webroot mapping in der renewal/domain.tld.conf?

Vielen Dank,
Michael

Jan

Jan

Hi Robert,

vielen Dank für das gute Tutorial! Jetzt läuft auch mein XMPP Server sauber und hoffentlich sicher:) Ich habe noch ein paar Korrekturen an den SSL Ciphers vorgenommen um somit eine sicherere Kommunikation zu ermöglichen:

options = { "nosslv2", "nosslv3", "notlsv1", "notlsv11", "noticket", "nocompression", "cipherserverpreference", "singledhuse", "singleecdhuse" };
options = { "no
sslv2", "nosslv3", "noticket", "nocompression", "cipherserverpreference", "singledhuse", "singleecdh_use" };
ciphers=HIGH+kEDH:HIGH+kEECDH:HIGH:!RC4:!MD5:!aNULL:!3DES:!DES:!eNULL:!LOW:!EXP:!PSK:!SRP:!DSS";

Einfach den den Zertifikaten hinzufügen und alte, unsichere Protokolle werden ausgesperrt ;-)
Server2Server rennt auch super, konnte es ja schon gut testen *gg*

LG Jan

MM

MM

Falls du das mit den interfaces noch mal oben / im Tutorial schreiben könntest, wäre das super. Ich bin da leider nämlich beim upgrade voll reingetappt :-(

Robert Kaussow

Guter Hinweis. Ist erledigt :-)

rin

rin

Seit dem Prosody Update auf Version 0.9.12 wurde das Problem behoben und luasec 0.6 kann verwendet werden. Vgl: http://blog.prosody.im/ Bei mir funktioniert es:
1. svc -d ~/service/prosody
2. toast arm https://prosody.im/downloads/source/prosody--0.9.12.tar.gz
3. rm ~/.toast/armed/etc/prosody/prosody.cfg.lua
4. ln -s ~/etc/prosody/prosody.cfg.lua ~/.toast/armed/etc/prosody/prosody.cfg.lua
5. luarocks install luasec 0.6 --local OPENSSL_DIR=/package/host/localhost/openssl
6. svc -u ~/service/prosody

Robert Kaussow

Danke für den Hinweis.

Tom

Tom

Vielleicht habe ich etwas übersehen, aber wie werden die Chats gespeichert?
Eine Konfiguration, z.B. mit MySQL, konnte ich nicht finden.

Robert Kaussow

Hi Tom,
prosody speichert standardmäßig alle Daten filebasiert. Man kann natürlich auch eine SQL Datenbank verwenden wenn man mag. Mehr Infos gibt es im prosody wiki.

Tom

Tom

Vielen Dank,

mir sind noch ein paar Punkte unklar, vielleicht helfen meine Fragen für ein allgemeines besseres Verständnis:

1. Der Punkt "Virtual Hosts" bezieht sich in Deiner Konfiguration auf "example.com". Muss hier wirklich etwas eingetragen werden, oder ist dies nur ein Dummy-Wert?

2. Die Port-Angaben in der Konfiguration mit:
-- PROXY65
proxy65ports = { XXXX }

-- Build-in http Server
http
ports = { XXXX }
httpsports = { XXXX }

-- Server to Server
s2s
ports = { XXXX }
-- Client to Server
c2sports = { XXXX }

sehen mit XXXX "offen" aus.

Uberspace steht den Ports recht kritisch gegenüber, insbesondere was die Standardports betrifft. Sollen nun die mit "XXXX" gekennzeichneten Einträge durch Phantasie-Ports ersetzt werden. oder werden diese automatisch von Prosody verwaltet?

3. Deine DNS-Einstellungen weisen ebenfalls darauf hin, dass die Standard-Ports nicht genutzt werden:

"Da Prosody auf Uberspace nicht auf den Standardports läuft, müsst ihr in eurem DNS noch SRV Records anlegen. Der Eintrag für conference.example.com ist nicht zwingend erforderlich, er wird nur benötigt, wenn auch Benutzer anderer Server Chaträumen beitreten sollen. Die SRV Records sehen prinzipiell so aus:

_xmpp-client.
tcp.example.com. 18000 IN SRV 0 5 PORT xmpp.example.com.
xmpp-server.tcp.example.com. 18000 IN SRV 0 5 PORT xmpp.example.com.
xmpp-server.tcp.conference.example.com. 18000 IN SRV 0 5 PORT xmpp.example.com."

Was ist denn jetzt richtig zu verwenden?

Vielen Dank im Voraus ;-)

Robert Kaussow

Hi,

prinzipiell helfe ich natürlich gern bei den Fragen weiter. Allerdings ist der Beitrag kein prosody Handbuch sondern soll beim Deployment eines eigenen Servers helfen. Detaillierte Informationen zu prosody und zu den einzelnen Modulen findet man im prosody Wiki.

zu Frage 1
Ja hier muss tatsächlich was eingetragen werden und zwar eine eigene Domain/Subdomain. Die von Uberspace bereitgestellte Domain funktioniert nicht, da man nicht der Eigentümer der Domain ist und somit weder DNS Einträge verwalten noch SSL Zertifikate ausstellen kann.

zu Frage 2
Richtig, Standardports funktionieren in einer Shared Host Umgebung selbstverständlich nicht. Man kann aber beliebige Ports für die Dienste benutzen. Mehr zu dem Thema (auch ein Link zur entsprechenden Seite im Uberspace Wiki) habe ich unter 4.2 Ports einrichten geschrieben. Nachdem man bei Uberspace frei Ports eingerichtet hat, müssen diese in die prosody Konfiguration eingetragen werden (XXXX ist ein Platzhalter für deinen Port).

zu Frage 3
Siehe Frage 2 :-) Bei Uberspace Ports in der Firewall öffnen -> die Ports in prosody Konfiguration eintragen -> die selben Ports für die SRV Records verwenden.

Viele Grüße

Martin

Martin

Danke für den Hinweis mit den IPs in der config. Seitdem ich die eingetragen habe bin ich sofort mit Chaträumen verbunden und habe nicht mehr Wartezeiten von bis zu 10s. :-)

Martin

Martin

Ich wollte jetzt mal "s2ssecureauth" aktivieren, aber dann bekomme ich weder mit luasec 0.5.1 noch mit luasec 0.6 s2s-Verbindungen. Habe auch mal auf die letzte prosody 0.10 nightly geupdatet. Bekomme immer solche Fehlermeldungen:

"Apr 10 20:40:48 s2sout26b1210 info Stream encrypted (TLSv1.2 with DHE-RSA-AES256-GCM-SHA384)
Apr 10 20:40:48 mods2s warn Forbidding insecure connection to/from conference.trashserver.net
Apr 10 20:40:48 s2sout26b1210 info Outgoing s2s stream mdosch.de->conference.trashserver.net closed: stream closed
Apr 10 20:40:48 s2sout26b1210 info Sending error replies for 1 queued stanzas because of failed outgoing connection to conference.trashserver.net
Apr 10 20:40:48 stanzarouter warn Unhandled s2s
destroyed stream element or stanza: features; xmlns=http://etherx.jabber.org/streams: EXTERNAL

Robert Kaussow

Hi,

hast du für deinen Server ein gültiges (kein selbstsigniertes) TLS Zertifikat?

Edit: Folgendes wird geprüft:
if mustsecure and (session.certchainstatus ~= "valid" or session.certidentity_status ~= "valid") then
module:log("warn", "Forbidding insecure connection to/from %s", host or session.ip or "(unknown host)");

Ich vermute also ein ungültiges Zertitikat oder aber eine falsch konfigurierte ZertifikatsChain

Martin

Martin

Das war nicht das Problem, mein Zertifkat und die Verschlüsselung waren in Ordnung. Die s2s-Verbindungen waren die ganze Zeit schon verschlüsselt. s2ssecureauth stellt nur sicher, dass nur Verbindungen zu Servern mit gültigen Zertifikaten aufgebaut werden.
Ich habe jetzt die Lösung gefunden, bei Uberspace muss folgende Zeile zur SSL-Konfiguration von prosody hinzugefügt werden:

cafile = "/etc/ssl/certs/ca-bundle.trust.crt";

Robert Kaussow

Schön das du die Lösung gefunden hast. Wenn ich nicht gerade komplett daneben liege, trifft das aber genau das was ich in meinem Kommentar hinzugefügt hatte: "falsch konfigurierte ZertifikatsChain" ;-)

Lukas

Lukas

Hallo zusammen,

ich habe eben ein Update auf Prosody 0.10-1 nightly 384 gemacht.

Nun erhalte ich folgende Fehlermeldung:
Prosody was unable to find lua-bitops

Kann mir vllt jemand helfen, wie ich lua bitops nachträglich eben speziell bei Uberspace installieren kann?
Vielen Dank.

Martin

Martin

luarocks install luabitop --local

Erwin

Erwin

Hallo,

erstmal danke für die super Anleitung. Hat mir einiges an Zeit erspart. Leider habe ich immer noch ein Problem mit dem Zertifikat von LetsEncypt. Dieser wird von keinem Server angenommen und auch am Client muss ich das Zertifikat immer bestätigen. Hier ein Auszug meines Logs:


Nov 17 14:07:08 mod_s2s warn Forbidding insecure connection to/from draugr.de
Nov 17 14:07:08 s2sin23efac0 info Incoming s2s stream draugr.de->example.de closed: Your server's certificate is invalid, expired, or not trusted by example.de

example.de = meine Domain

openssl version
OpenSSL 1.0.2h 3 May 2016


Hat jemand vielleicht einen Tipp, in welche Richtung ich suchen muss?

Erwin

Erwin

Es wäre vielleicht auch sinnvoll für Menschen die letsencrypt verwenden, auf diese Seite hinzuweisen: https://prosody.im/doc/certificates#certificatechains

Hat mich jetzt zwei Abende gekostet das Zertifikat-Problem zu lösen...

ssl = {
certificate = "/etc/letsencrypt/live/example.com/fullchain.pem";
key = "/etc/letsencrypt/live/example.com/privkey.pem";
cafile = "/etc/ssl/certs/ca-bundle.trust.crt";
dhparam = "/home/UUSER/var/prosody/ssl/dh-4096.pem";
protocol = "tlsv1
1+";
}

Habe immer die cert.pem genommen statt fullchain.pem.

MaM

MaM

Moin, gibt es evtl. Bestrebungen das Tutorial auch für die neue Version 0.10 zu aktualisieren? Da scheint es doch einige Änderungen zu geben: https://prosody.im/doc/release/0.10.0#upgrade_notes

Ich bin auch immer noch am Grübeln, ob es nicht auch Sinn macht die Uberspace DB mit zu integrieren...

Tom

Tom

Hallo,
ich versuche den internen Web-Server über die konfigurierten Ports zu erreichen. Nur klappt das nicht.
Laut Deiner Konfiguration, sollte irgendetwas erscheinen, wenn ich folgendes im Browser eingebe:

http://example.com:Port/

Die offiziellen Hilfeseiten von Prosody sind ein wenig verwirrend, vielleicht hat ja jemand einen Tip.

Ziel von mir ist, die Anmeldeseite zu erreichen.

Danke

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht veröffentlicht, sondern nur für eventuelle Benachrichtigungen verwendet.
Die Formatierung der Kommentare ist über Markdown möglich.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Gravatar Autoren-Bilder werden unterstützt.
Markdown-Formatierung erlaubt