Zu allererst möchte ich darauf hinweisen, dass dieser Artikel zu großen Teilen auf zwei Anleitungen aus dem Internet beruht. Deshalb erst einmal vielen Dank an die Betreiber der Seiten geeklabor.de und pomm.es für den Lesestoff und die tatkräftige Unterstützung meines Vorhabens!
Bevor es los ging, musste ich um die Freischaltung von drei Ports (c2s, s2s, Proxy65) bei Uberspace bitten. Das läuft i.d.R. sehr unkompliziert. Die Port-Nummern erhält man per eMail. Diese Ports sind nötig, damit der Client und der Server (s2c) sowie die Server untereinander (s2s) eine Verbindung zu einander aufbauen können. Der Dritte Port wird für den späteren Dateiversand über den XMPP-Server benötigt.
Da auf Uberspace z.Zt. mit OpenSSL 1.0.1k 8 Jan 2015 läuft, beginne ich mit der Installation der neuesten Version via Toast.
1 |
toast arm https://www.openssl.org/source/openssl-1.0.2f.tar.gz && openssl version |
Verfügbar ist ebenfalls Lua 5.1.4 Copyright (C) 1994-2008. Deshalb werden in die ~/.bash_profile mit
1 |
nano ~/.bash_profile |
am Ende
1 2 |
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' 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' |
diese beiden Zeilen eingetragen und gespeichert. Nach Verlassen des Editors wird mit dem Befehl
1 |
sed "s/UUSER/$USER/g" -i ~/.bash_profile |
der Eintrag UUSER in der /.bash_profile durch den Uberspace-Benutzernamen ersetzt.
Jetzt aktiviert man /.bash_profile.
1 |
. ~/.bash_profile |
Dabei kann man mal schnell nachsehen, ob nun die aktuelle Version OpenSSL auf dem Uberspace läuft. Die geschieht mit:
1 |
openssl version |
Nun sollte hier
1 |
OpenSSL 1.0.2f 28 Jan 2016 |
angezeigt werden.
Als Nächstes installiert man die am Wichtigsten benötigten Lua-Module.
1 |
luarocks install luasocket --local |
1 |
luarocks install luaexpat --local |
1 |
luarocks install luafilesystem --local |
1 |
luarocks install luasec --local OPENSSL_DIR=~/.toast/armed/usr/local/ |
Ein kurzer Check gibt dann Folgendes aus:
1 |
luarocks list |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Installed rocks: ---------------- lua-zlib 0.4-1 (installed) - /home/intux/.luarocks/lib/luarocks/rocks luaexpat 1.3.0-1 (installed) - /home/intux/.luarocks/lib/luarocks/rocks luafilesystem 1.6.3-1 (installed) - /home/intux/.luarocks/lib/luarocks/rocks luasocket 3.0rc1-2 (installed) - /home/intux/.luarocks/lib/luarocks/rocks |
Jetzt ist die Installation von Prosody, dem eigentlichen XMPP-Server, an der Reihe. Ich habe mich hier bewusst für die ältere Version 0.9.8 entschieden.
1 |
toast arm https://prosody.im/downloads/source/prosody-0.9.8.tar.gz |
Folgende Verzeichnisse werden noch benötigt.
1 |
mkdir -p ~/var/prosody/data |
1 |
mkdir -p ~/var/prosody/ssl |
Nach der Erstellung wechselt man ins Verzeichnis /var/prosody/ssl/.
1 |
cd ~/var/prosody/ssl |
Dabei sollten zeitgleich die WoSign-Zertifikate und der Key via SFTP dort abgelegt werden.
Mit
1 |
cat 1_root_bundle.crt >> 2_www.domain.tld.crt |
bereitet man das benötigte Zertifikat vor (Dabei wird davon ausgegangen, dass das Zertifikat der bestehenden Domain hier zum Einsatz kommt). Dadurch wird der Inhalt des Root-Zertifikats ans Ende von 2_www.domain.tld.crt gesetzt.
Jetzt erstellt man ein Diffie-Hellmann-Parameter.
1 |
openssl dhparam -out dh-4096.pem 4096 |
Dadurch entsteht eine dh-4096.pem im SSL-Verzeichnis.
Nun geht es an die Konfiguration.
1 |
touch ~/var/prosody/prosody.pid |
1 |
mkdir -p ~/etc/prosody |
1 |
cp ~/.toast/armed/etc/prosody/prosody.cfg.lua ~/etc/prosody/prosody.cfg.lua.stock |
1 |
nano ~/etc/prosody/prosody.cfg.lua |
Die Config wird mit diesem Inhalt befüllt. Dabei sind UUSER, domain.tld, Ports (xxxxx, yyyyy, zzzzz) und Jabber-ID (Mail) von Hand anzupassen. Des Weiteren sind die Pfade an die Zertifikate und den Key entsprechend anzupassen. Wer ein öffentliches Anmelden erlauben möchte setzt allow_registration auf true.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
pidfile = "/home/UUSER/var/prosody/prosody.pid"; admins = { "admin@domain.tld" } modules_enabled = { "roster"; "saslauth"; "tls"; "dialback"; "disco"; "private"; "vcard"; "privacy"; "version"; "uptime"; "time"; "ping"; "posix"; "pep"; "register"; "admin_adhoc"; "motd"; "welcome"; "proxy65"; }; daemonize = false; -- IMPORTANT for daemontools! DO NOT EDIT! data_path = "/home/UUSER/var/prosody/data"; log = { info = "*console" } -- IMPORTANT for daemontools! DO NOT EDIT! "*console" schickt den Output in daemontools Konsole. -- log = { "*console" } -- diese Zeile anstelle obiger, wenn ihr auch Debug-Infos wollt. Achtung: IPs werden dann auch geloggt. allow_registration = false; s2s_ports = { xxxxx } -- Server to Server - freien TCP Port bei hallo@uberspace.de anfragen & eintragen! c2s_ports = { yyyyy } -- Client to Server - freien TCP Port bei hallo@uberspace.de anfragen & eintragen! c2s_require_encryption = true s2s_require_encryption = true -- SOCKS5 Proxy Port proxy65_ports = { zzzzz } authentication = "internal_hashed" -- do not save passphrases in cleartext! VirtualHost "domain.tld" -- anpassen! enabled = true ssl = { key = "/home/UUSER/var/prosody/ssl/3_www.domain.tld.key"; certificate = "/home/UUSER/var/prosody/ssl/2_www.domain.tld.crt"; -- Allow perfect forward secrecy. dhparam = "/home/UUSER/var/prosody/ssl/dh-4096.pem"; -- Best ciphers for perfect forward secrecy. ciphers = "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128"; options = { "no_sslv2", "no_sslv3", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" } } -- SOCKS5 Dateiversand Component "proxy.domain.tld" "proxy65" proxy65_acl = { "domain.tld" } |
Nun löscht man die mitgelieferte Konfigurations-Datei und verlinkt zur neu erstellten.
1 |
rm ~/.toast/armed/etc/prosody/prosody.cfg.lua |
1 |
ln -s ~/etc/prosody/prosody.cfg.lua ~/.toast/armed/etc/prosody/prosody.cfg.lua |
Im Anschluss wird noch ein Deamon erstellt (daemontool-service sollte schon aktiviert sein). Wer den Spamschutz wie im Artikel „Spamschutz auf Uberspace“ schon laufen hat, wird hier keine Probleme haben.
1 |
uberspace-setup-service prosody ~/.toast/armed/bin/prosody |
Mit
1 |
prosodyctl adduser admin@domain.tld |
legt an den ersten User an (Admin-User empfohlen, wie in der prosody.cfg.lua oben eingetragen).
Muss Prosody aus igendwelchen Gründen beendet werden, so stoppt man den Service mit
1 |
svc -d ~/service/prosody |
und startet mit
1 |
svc -u ~/service/prosody |
wieder neu.
Die Verkabelung der Ports erledigt man beim Registrar. Weitere Infos zu den Einstellungen der SRV-Records erhält man hier und zu Prox65 hier.
Dabei muss _xmpp-client._tcp auf den Server und den hierfür verwendeten Port als Record SRV mit einer Gewichtung 0 und einer Prio 5 aufgeschaltet werden. Das Gleiche erfolgt mit _xmpp-server._tcp.
Des Weiteren muss für die Subdomain proxy.domain.tld ein Record A eingerichtet werden, wie hier am Beispiel INWX zu sehen ist.
Ein Test auf xmpp.net bestätigt die Funktion des Servers.
Viel Spaß!
Super Anleitung. Es klappt alles einwandfrei. Nochmals vielen Dank für die Unterstützung.
[…] ich meinen XMPP-Server auf Uberspace eingerichtet habe, wurde ich im Artikel „XMPP-Server auf Uberspace mit vorhandenem WoSign-Zertifikat installieren“ bereits erläutert. Nun wagte ich mich daran Prosody von Version 0.9.8 auf die aktuelle […]
[…] Artikel „XMPP-Server auf Uberspace mit vorhandenem WoSign-Zertifikat installieren“ hatte ich erläutert, wie mein XMPP-Server bei Uberspace aufgesetzt wurde. Heute kommt noch […]
Wie sieht’s mit dem Speicherplatzverbrauch aus? Viel? Wenig?
Das ist nicht der Rede wert; nur wenige MB.
Typo /home/UUSER/
[…] Problem kam eigentlich nur zustande, da ich die Config aus meinem Artikel zur Installation des XMPP-Servers auf Uberspace übernommen hatte. Hierbei wurde der VirtualHost vor den SSL-Pfaden gesetzt. Dies macht aber den […]
Hi,
Super Anleitung, richtig verständlich!
Warum hast Du Dichfür die ältere Prosody Version entschieden?
Grüße,
Jan
Hallo Jan,
ich glaube die damals aktuelle Version machte Schwierigkeiten.
Mittlerweile läuft aber auf meinen vServer Prosody 0.9.12. 😉
[…] Artikel „XMPP-Server auf Uberspace mit vorhandenem WoSign-Zertifikat installieren“ hatte ich erläutert, wie mein XMPP-Server bei Uberspace aufgesetzt wurde. Heute kommt […]
Hallo,
auf dem Uberspace 7 kann man seit kurzem auch Ports freischalten. Ich habe mich mal daran gemacht, mein Prosody vom U6 auf den U7 zu migrieren, da es sich beim letzten Update leider zerschossen hatte. Leider gibt es kein toast mehr auf dem U7, weswegen dieses bisher gut funktionierende Tutorial leider nichtig wird. „Build prosody from source“ scheint bisher die einzige Möglichkeit zu sein, da traue ich mich aber noch nicht ran.
Gruß,
Finn