XMPP-Server auf Uberspace mit vorhandenem WoSign-Zertifikat installieren

11
2895
iAmMrRob / Pixabay

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.

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

nano ~/.bash_profile

am Ende

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

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.

. ~/.bash_profile

Dabei kann man mal schnell nachsehen, ob nun die aktuelle Version OpenSSL auf dem Uberspace läuft. Die geschieht mit:

openssl version

Nun sollte hier

OpenSSL 1.0.2f  28 Jan 2016

angezeigt werden.

Als Nächstes installiert man die am Wichtigsten benötigten Lua-Module.

luarocks install luasocket --local
luarocks install luaexpat --local
luarocks install luafilesystem --local
luarocks install luasec --local OPENSSL_DIR=~/.toast/armed/usr/local/

Ein kurzer Check gibt dann Folgendes aus:

luarocks list
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.

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

Folgende Verzeichnisse werden noch benötigt.

mkdir -p ~/var/prosody/data
mkdir -p ~/var/prosody/ssl

Nach der Erstellung wechselt man ins Verzeichnis /var/prosody/ssl/.

cd ~/var/prosody/ssl

Dabei sollten zeitgleich die WoSign-Zertifikate und der Key via SFTP dort abgelegt werden.

Mit

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.

openssl dhparam -out dh-4096.pem 4096

Dadurch entsteht eine dh-4096.pem im SSL-Verzeichnis.

Nun geht es an die Konfiguration.

touch ~/var/prosody/prosody.pid
mkdir -p ~/etc/prosody
cp ~/.toast/armed/etc/prosody/prosody.cfg.lua ~/etc/prosody/prosody.cfg.lua.stock
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.

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.

rm ~/.toast/armed/etc/prosody/prosody.cfg.lua
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.

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

Mit

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

svc -d ~/service/prosody

und startet mit

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.

news-660

Ein Test auf xmpp.net bestätigt die Funktion des Servers.

Viel Spaß!

11 Kommentare

  1. 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

Schreibe einen Kommentar zu Prosody kann auch nerven » intux Antwort abbrechen

Bitte bestätige diesen Kommentar!
Bitte den Namen hier eingeben

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.