Prosody
Einen öffentlich erreichbaren XMPP/Chat-Server auf Basis Debian/Ubuntu und Prosody als XMPP-Serverapplikation, zum selbst bauen, in 60 Minuten! (Debian/Ubuntu Server vorinstalliert vorausgesetzt)
Ich habe die Anleitung mit einem Ubuntu-Server 14.04 LTS gestestet. DVD-ISO zum Beispiel hier:
http://ftp5.gwdg.de/pub/linux/debian/ubuntu/iso/14.04.3/ubuntu-14.04.3-server-amd64.iso
Den Server mit einer statischen IP im lokalen Netzwerk ausstatten. Das ist wichtig, damit das Portforwarding, dass wir nachher von unserem Internet-Router auf den Jabber/XMPP-Server einrichten, dauerhaft funktioniert.
Dann die Paketquellen aktualisieren:
sudo apt-get update
Dann Prosody installieren+starten:
sudo apt-get install prosody sudo service prosody start
Jetzt müssen wir „öffentliche“ DNS-SRV-Records für unseren Chat-Service einrichten, damit unser Prosody-Server von anderen XMPP-Servern gefunden werden kann, und auch Chat-Clients, die sich bei uns anmelden wollen, unseren Dienst finden, ohne das explizit eine Server-IP im Client konfiguriert werden müßte. Was sind SRV records? Ich zitiere mal frech aus Wikipedia: Mittels SRV (Service) Resource Records kann per DNS propagiert werden, welche IP-basierenden Dienste (Services) in einer Domain (z. B. Firma) angeboten werden. Zu jedem Dienst werden weitere Informationen geliefert, wie zum Beispiel der Server-Name, der diesen Dienst bereitstellt. Für uns bedeutet das im Klartext: Wir wollen der Welt erzählen, daß wir under der DNS-Domäne „xyz“ den Dienst „Jabber Server“ (für die Server zu Server-Kommunikation“) und „Jabber Client“ (für die Client zu Server-Kommunikation) anbieten und der Menschheit mitteilen, wie der A-Record (also der Maschinenname) der Maschine lautet, die diese Dienste anbietet.
Ich kenne nur einen DynDNS-Service, der das anbietet, nämlich http://www.afraid.org. Sicherlich gibt’s noch andere, der Nachvollziehbarkeit halber nehmen wir mal afraid.org. Also flugs dort einen Account angelegt: Auf http://www.afraid.org Die Seite ist, mit Verlaub gesagt, etwas unstrukturiert, deswegen hier kurz beschrieben: Erst mal einen Account anlegen. Dazu links im Menü „For Members“ auf Main Menu“ klicken und dann in der Seitenmitte auf „Setup an account here“ klicken und loslegen:
Nachdem ihr euch einen Account erstellt habt, loggt euch nun mit eurem Benutzernamen und Passwort ein. Da sich bei normalsterblichen einmal am Tag die IP-Adresse des DSL-Routers ändert, aber unser Chatservice immer erreichbar sein soll, müssen wir uns erst mal einen dynamischen A-record anlegen. Nach dem Einloggen strahlt euch schon dieser Screen entgegen:
Was liegt näher, als auf „Add a subdomain“ zu klicken? Nix, also los geht’s. Such euch eine schöne Toplevel-Domain aus: „mooo.com“ im folgenden Beispiel und tragt euren gewünschten Subdomain-Namen ein.
Jetzt müssen wir nur dafür sorgen, das unser DNS-A-record auch erneuert wird, wenn sich die IP-Adresse unseres DSL-Routers ändert. Bei einer Fritzbox neueren Datums geht das relativ einfach. Erst mal schauen wir auf afraid.org nach, wie denn der URL-String aussieht, der den DNS A-record auf die aktuelle IP verweisen läßt. Hierzu klicken wir im afraid.org-Menü links auf „Dynamic DNS“ und scrollen nach unten, bis wir das hier sehen:
Dann auf „Direct URL“ klicken und den String in der Browser-URL-Zeile kopieren, aufschreiben, merken, abspeichern. Wir brauchen den gleich. Der String sollte ungefähr so aussehen:
freedns.afraid.org/dynamic/update.php?STJBdfgolkHDFKVdfgZzZmKKLakderStringistNureinBeispiel
Wie gesagt, Fritzbox-Benutzer sind fein raus, die tragen diesen String einfach unter Internet/Freigaben/Dynamic DNS ein, mit vorangestelltem http:// in etwa so:
Wichtig: Nicht gleich durchdrehen, wenn ihr euren A-record testweise pingt und da kommt dann „host not known“: Das Update dauert gerne mal bis zu 15 Minuten. Also kein Grund, panisch andauernd den Router zu resetten. Echte Männer ohne Fritzbox können sich z.B. ein Script bauen und das dann z.B. via cron alle 5 Minuten aufrufen:
curl "http://freedns.afraid.org/dynamic/update.phpSTJBdfgolkHDFKVdfgZzZmakderStringistNureinBeispiel“
Das hat den den selben Effekt wie die Einstellungen in der Fritzbox. Nun erstellen wir die SRV-Records. Dazu klicken wir im afraid.org-Menü links auf „Subdomains“ und dann, wenn wir das hier sehen, auf „add“:
Jetzt wird es wichtig. Im folgenden Dialog wirklich alles haargenau so anlegen wie auf dem folgenden Bild. Einzig und allein „kuhelsa“ mit eurer Subdomäne ersetzen und Domain mit der afraid.org-Domäne, die ihr euch ausgesucht habt. Das muss ja bei euch nicht notwendigerweise „mooo.com“ sein:
Also zusammengefasst:
1. Type auf „SRV“ stellen.
2. Subdomain: _xmpp-client._tcp.kuhelsa (wichtig: der führende Unterstrich!)
3. Domain: mooo.com (oder was ihr vorher ausgewählt habt)
4. Destination: 0 0 5222 kuhelsa.mooo.com
5. Save!
Ihr habt soeben den SRV-Record für XMPP-Clients (Jitsi, Pidgin oder was auch immer) erstellt, die sich an eurer Domäne anmelden wollen. Hiermit können sich dann Benutzer später bei euch einfach durch Eingabe von: benutzername@kuhelsa.mooo.com+Passwort einloggen, ohne Server IPs oder den Port konfigurieren zu müssen. Den Port 5222 haben wir im Destination-Feld festgelegt.
Weiter geht’s mit dem XMPP-Server SRV-record. Der wird nach dem selben Verfahren angelegt, allerdings ist der Port ein anderer und die Subdomain sieht auch etwas anders aus, da der Service, den wir via DNS propagieren wollen, xmpp-server ist:
1. Type auf „SRV“ stellen.
2. Subdomain: _xmpp-server._tcp.kuhelsa (wichtig: der führende Unterstrich!)
3. Domain: mooo.com (oder was ihr vorher ausgewählt habt)
4. Destination: 0 0 5269 kuhelsa.mooo.com
5. Save!
Mit diesem Eintrag können nun andere XMPP-Server feststellen, welche Maschine (unsere natürlich:-) den Service XMPP für die Domäne kuhelsa.mooo.com zur Verfügung stellen. Das ist später wichtig, da wir natürlich mit den großen und kleinen der XMPP-Branche föderieren wollen. Wenn wir nun nochmal links im Menü auf Subdomains klicken, sollte sich in etwa folgendes Bild ergeben:
Jetzt zurück zum Prosody-Server: Hier könnt ihr an der Kommandozeile schnell überprüfen, ob die Records richtig angelegt wurden und bereits propagiert wurden:
jabber:~$ dig _xmpp-client._tcp.kuhelsa.mooo.com SRV
Da sollte dann in der Antwort (answer section) drin stehen:
;; ANSWER SECTION: _xmpp-client._tcp.kuhelsa.mooo.com. 3299 IN SRV 0 0 5222 kuhelsa.mooo.com.
Dann noch der XMPP-Server SRV:
jabber:~$ dig _xmpp-server._tcp.kuhelsa.mooo.com SRV
Da sollte dann in der Antwort (answer section) drin stehen:
;; ANSWER SECTION: _xmpp-server._tcp.kuhelsa.mooo.com. 3166 IN SRV 0 0 5269 kuhelsa.mooo.com.
Jetzt richten wir das Portforwarding auf dem DSL-Router ein, damit XMPP Clients und Server, die von draußen anklopfen, an die richtigen Ports unseres „internen“ Prosody-Servers weitergeleitet werden. Hier am Beispiel Fritzbox. In der Fritzbox unter Internet/Freigaben eine neue Freigabe anlegen: Einmal für die XMPP-Clients:
(bei „an Computer“ bzw. "an IP-Adresse" euren Prosody-Server auswählen)
Dann für XMPP-Server:
Jetzt schnell noch das Portforwarding von einem Rechner im lokalen Netz testen:
telnet kuhelsa.mooo.com 5222
Da sollte dann kommen:
Connected to kuhelsa.mooo.com. Escape character is '^]'.
Abbrechen könnt ihr hier mit CTRL-C. Das gleiche nochmal für den XMPP-Server-Port:
telnet kuhelsa.mooo.com 5269
Da sollte ebenso kommen:
Connected to kuhelsa.mooo.com. Escape character is '^]'.
Abbrechen könnt ihr hier ebenso mit CTRL-C.
Bingo. Nun sind DNS und Netzwerk eingerichtet, wir haben unsere SRV records gesetzt und es kann mit der eigentlichen Prosody-Konfiguration losgehen. Wir machen es mal simpel und lassen Security-Geschichten und Verschlüsselung mal außen vor, damit wir schneller an den Start kommen. Also flugs die Prosody-Konfigurationsdatei editiert:
sudo nano /etc/prosody/prosody.cfg.lua
Dann diesen Teil hier suchen und mit Doppelstrich auskommentieren:
-- These are the SSL/TLS-related settings. If you don't want -- to use SSL/TLS, you may comment or remove this ssl = { key = "/etc/prosody/certs/localhost.key"; certificate = "/etc/prosody/certs/localhost.crt"; }
...damit er dann am Schluß so aussieht:
-- These are the SSL/TLS-related settings. If you don't want -- to use SSL/TLS, you may comment or remove this -- ssl = { -- key = "/etc/prosody/certs/localhost.key"; -- certificate = "/etc/prosody/certs/localhost.crt"; --}
Dann noch Prosody mitteilen, welche XMPP-Domäne jetzt eigentlich gehostet werden soll, und mit welchem Protokoll. Nach dieser Stelle in /etc/prosody/prosody.cfg.lua suchen:
VirtualHost "example.com" enabled = false -- Remove this line to enable this host -- Assign this host a certificate for TLS, otherwise it would use the one -- set in the global section (if any). -- Note that old-style SSL on port 5223 only supports one certificate, and will always -- use the global one. ssl = { key = "/etc/prosody/certs/example.com.key"; certificate = "/etc/prosody/certs/example.com.crt"; }
...Und so umfrisieren (SSL auskommentieren und eure XMPP-Domäne setzen, wie auf afraid.org konfiguriert):
VirtualHost "kuhelsa.mooo.com" enabled = true -- Remove this line to enable this host -- Assign this host a certificate for TLS, otherwise it would use the one -- set in the global section (if any). -- Note that old-style SSL on port 5223 only supports one certificate, and will always -- use the global one. -- ssl = { -- key = "/etc/prosody/certs/example.com.key"; -- certificate = "/etc/prosody/certs/example.com.crt"; --}
Abspeichern und dann das Prosody-errorlog löschen:
sudo rm /var/log/prosody/prosody.err
Prosody neu starten:
sudo service prosody restart
Kurz nachschauen, ob im Error-log irgendwelche ekelhaften Dinge drin stehen:
cat /var/log/prosody/prosody.err
Wenn da nichts kommt, sind wir schon auf der Gewinnerspur. Jetzt legen wir unseren ersten User auf dem Server an:
sudo prosodyctl adduser superman@kuhelsa.mooo.com
.. Passwort noch eintippen und das war's.
Sooo, und jetzt geht der Spaß los, wir installieren auf unserem Linux-Desktop-PC „pidgin“:
sudo apt-get install pidgin
Nach erfolgreicher Installation dann pidgin aufrufen. Da werdet ihr üblicherweise so empfangen:
Das machen wir dann doch glatt und fügen ein Konto hinzu, wie im Schritt vorher mit diesem Kommando angelegt:
sudo prosodyctl adduser superman@kuhelsa.mooo.com
Jetzt noch unter der Registerkarte „erweitert“ das Verschlüsselungsniveau anpassen, da wir Prosody im Moment ohne SSL laufen lassen:
Wenn wir jetzt das Hauptfenster von Pidgin anschauen, stellen wir fest, das wir keine Freunde haben (zumindestens mal inder virtuellen Welt nicht, und hoffentlich nur da):
Da Google immer unser Freund ist, fügen wir mal den XMPP-Übersetzungsroboter von Google hinzu, via dem Hauptmenü von Pidgin, unter Kontakte/Kontakt hinzufügen:
Und noch autorisieren:
Der erste Freund ist jetzt in eurer Kontaktliste und beantwortet 24 Stunden am Tag, sieben Tage die Woche eure Übersetzungsanfragen:
Echte Menschen kann man natürlich auch hinzufügen.
Obwohl Google sich ja gerüchteweise von XMPP verabschiedet hat, geht’s trotzdem noch, näheres hier:
https://xmpp.org/2015/03/no-its-not-the-end-of-xmpp-for-google-talk/
Wer mich als „Buddy“ hinzufügen will: Einfach eine persönliche Email an:
Ich schicke euch dann meine Jabber-URI
Viel Spass,
Patrick
Die Prosody-Projektseite ist hier: http://prosody.im Hier bitte nachschauen und lesen, wenn ihr mehr wissen wollt..