Bevor ich’s vergesse, mal kurz meine Gedanken zum Thema der Überschrift. Ich bin dank der intelligenten Suchmaschine Google und nicht auffindbarer Dokumentation mit Prosody mal in zwei Punkten aber mal gewaltig vor die Wand gefahren, hab’s anschließend aber „gelöst gefunden bekommen“.
Vorweg: Ich habe von Prosody null Ahnung. Dokumentiere hier nur, wie ich durchs Netz gestolpert bin auf der Suche nach Informationen für das fertige Resultat. Achso. Cyrus SASL geht nicht. Wäre schön zu wissen gewesen, dass ich mod_auth_ldap nehmen soll, war aber nicht dokumentiert oder nur so versteckt, dass ich’s nicht gefunden habe. Zudem fehlte mir die Info, wie ich’s bedienen soll. Im hinterletzten Winkel des Netzes entdecke ich dann auch noch, dass prosody die fullchain.pem von Letsencrypt will. Na sauber. Weiß man das alles, geht’s auch. SO als Proof of Concept gedacht hier, auf dass ich’s nicht wieder vergesse.
Versionsvergleich – 16.04.2 aus 2016/09:
cat /proc/version Linux version 4.4.0-36-generic (buildd@lcy01-01) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.2) ) #55-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016
so weißt Du gleich, ob Du diese Doku hier verwerfen kannst oder es noch Sinn macht.
Annahmen:
Jabberdomäne: servername.jabberdomain.tld (ändern gegen Deine Hütte) Lokale Domäne: domain.local (ändern gegen Deine Domain) Domänencontroller: domaincontroller.domain.local (ändern gegen Deinen DC) (!) User befinden sich in einer OU ohne Dienstkonten und administrative Berechtigungen um BaseDN kleinzumachen (ich weiß nicht, wie dicht das alles hier ist) (!) Das genutzte Konto für LDAP talk ist "service.name" und hat lediglich AD-Leseberechtigungen sonst nix weiter (!) Allet hier mit sudo
Türsteher Bescheid geben, dass nachfolgende Dienste TCP zum Horst Jabber wollen (Firewall):
TCP 5222 TCP 5223 TCP 5269 TCP 5280 TCP 5281
Den Leuten draußen und drinnen Bescheid geben, dass da wirklich neue Dienste kommen (DNS)
_xmpp-client._tcp.jabberdomain.tld. 3600 IN SRV 0 5 5222 servername.jabberdomain.tld _xmpp-server._tcp.jabberdomain.tld. 3600 IN SRV 0 5 5269 servername.jabberdomain.tld
Pakete reintragen
apt update && apt install prosody lua-dbi-mysql lua-sql-mysql lua-sec mercurial python-letsencrypt-apache sasl2-bin libsasl2-modules-ldap lua-ldap lua-cyrussasl
(Noch mit den Cyrus-SASL komponenten, sofern’s denn mal wieder geht nehme ich lieber das, da kann ich wenigstens nach Gruppen filtern, in mod_auth_ldap nur nach BaseDN)
Banküberfall machen
MySQL zumachen
mysql_secure_installation
Datenbank aufmachen
mysql -u root -p
[alert type=“general“ accent_color=““ background_color=““ border_size=“1px“ icon=“fa-exclamation-triangle“ box_shadow=“yes“ animation_type=“0″ animation_direction=“down“ animation_speed=“0.1″ animation_offset=““ class=““ id=““]mySQL-Geraffel zu Fuß, wenn Copy&Paste nicht will. Im Regelfall knallt das mit den ‚hochkommata‘.[/alert]
Nutzer reintun
create user 'prosody'@'localhost' identified by 'BITTEAENDERN';
Datenbank anlegen
create database prosody; grant all on prosody.* to 'prosody'@'localhost'; quit;
Module für Prosody abholen (alle, aus Faulheit)
cd /user/local hg clone https://hg.prosody.im/prosody-modules/ prosody-modules
PROSODY CONFIG (Prosody.cfg.lua)
Prosody Config editieren
/etc/prosody/prosody.cfg.lua
Zeile Storage:
storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the -- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work)
Zeile SQL
Das auskommentieren entfernen und Kennwort korrigieren:
sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "BITTEAENDERN", host = "localhost" }
Plugin Pfade aus Mercurial in die Config irgendwo wo’s Sinn macht reintun:
plugin_paths = { "/usr/local/prosody-modules" }
Module bei Module dazutun – denke mal, das muss so
modules_enabled = { -- Generally required "auth_ldap"; -- JOHN HAT HIER LDAP DRIN
Zeile Auth ändern und den Rest hinten unter authentication hinterherschreiben (ich weiß mangels adäquater Doku im Moment nicht, ob er den Kram aus der vhost-config nimmt oder aus der globalen, doppelt gemoppelt hält besser, also gleich auch nochmal in der vhost)
authentication = "ldap" ldap_server = "domaincontroller.domain.local" ldap_rootdn = "CN=service name,OU=USERS,DC=domain,DC=local" ldap_password = "BITTEAENDERN" ldap_filter = "(mail=$user@$host)" ldap_scope = "subtree" ldap_tls = true; ldap_base = "OU=USERS,OU=DOMAIN,DC=domain,DC=local" ldap_mode = "bind"
VHOST CONFIG (inkludiert oben)
VHost anlegen für (myjabberdomain.tld und ad-domain domain.local)
cp /etc/prosody/conf.avail/example.com.cfg.lua /etc/prosody/conf.avail/servername.jabberdomain.tld.cfg.lua
vhost config editieren
/etc/prosody/conf.avail/servername.jabberdomain.tld.cfg.lua
-- Section for example.com VirtualHost "jabberdomain.tld" authentication = "ldap" ldap_base="dc=domain,dc=local" ldap_server="domaincontroller.tld.local" ldap_rootdn="service.name@domain.local" ldap_password="mypassword" ldap_filter="sAMAccountName=$user" ldap_scope="subtree" ldap_tls="false" ldap_mode="bind" -- 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/privkey.pem"; certificate = "/etc/prosody/certs/fullchain.pem"; } modules_enabled = { "bosh"; "pubsub"; "ping"; -- Enable mod_ping } ------ Components ------ -- You can specify components to add hosts that provide special services, -- like multi-user conferences, and transports. -- For more information on components, see http://prosody.im/doc/components -- Set up a MUC (multi-user chat) room server on conference.example.com: -- Component "conference.example.com" "muc" -- Set up a SOCKS5 bytestream proxy for server-proxied file transfers: --Component "proxy.example.com" "proxy65" ---Set up an external component (default component port is 5347) --Component "gateway.example.com" -- component_secret = "password"
VHOST symlinken
ln -sf ../conf.avail/servername.jabberdomain.tld.cfg.lua /etc/prosody/conf.d/servername.jabberdomain.tld.cfg.lua
Ausweise stricken
sudo letsencrypt --apache -d servername.jabberdomain.tld
(ja auch für’n Apachen, dann kann ich da so ’ne schicke Webseite draufbürsten). Email eintragen
Aufgabenplan schreiben
#!/bin/bash letsencrypt="/etc/letsencrypt/live/servername.jabberdomain.tld/" certs="/etc/prosody/certs/" prosody="/etc/prosody/" /usr/bin/letsencrypt renew >> /var/log/le-renew.log find "${letsencrypt}" -name "*.pem" | while read -r file do cp "${file}" "${certs}" chown -R prosody:prosody "${prosody}" chmod -R 700 "${certs}" service prosody restart done
Script fahrbar machen
chmod +x aufgabenplan.sh
Aufgaben aufmachen
crontab -e
Nano nehmen und Aufgabe eintragen
30 2 * * 1 /pfadzumscript/aufgabenplan.sh
Testen und nachsehen
Hütte durchpusten oder script einmalig ausführen und prosody neu starten
aufgabeplan.sh service prosody restart
Anmelden mit Adium
Im Protokoll nachsehen
cat /var/log/prosody/prosody.log
Bei https://xmpp.net servername.jabberdomain testen
Bei nichtgefallen in der Config nachpflegen
ciphers = "kECDH:HIGH:!MEDIUM:!LOW:!NULL:!DSS:!AES128-SHA:!AES128-SHA256:!CAMELLIA128-SHA:!aNULL@STRENGTH";
Nochmal bei https://xmpp.net servername.jabberdomain testen
Freuen.