Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Installation XMPP (Jabber) Servers am Beispiel von ejabberd 22.10
Einleitung
Diese Anleitung bezieht sich auf Debian 11 (Bullyseye). Es sollte allerdings sehr leicht sein, diese Anleitung auf andere Distributionen anzuwenden. Wörter in spitzen Klammern < > bezeichnen einen Platzhalter, der durch eigene Werte sinnvoll ersetzt werden muss. In dem Howto geht es daher immer um die Domain <beispiel.de>, was durch deine eigene Domain ersetzt werden muss. Wörter in eckigen Klammern [ ] bezeichnen einzelne Tasten oder Menüs zum klicken.
Diese Howto-Serie ist als Copy-Paste Anleitung gedacht. Du musst also nur die Befehle kopieren und bei dir in der Console einfügen. Befehle erkennst du am Dollarzeichen ($):
$ ./das/ist/ein/befehl mit option
Das ist kein Befehl, sondern ein Hinweis.
Als Editor setze ich jed ein. Warum weiß ich auch nicht, ich bin damit aufgewachsen. Es gibt durchaus viele Gründe und effektivere Wege Dateien zu ändern. Darum soll es hier aber nicht gehen. Wenn ihr (Konfigurations-) Dateien verändert habt, endet das immer mit dem Satz:
Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.
Das kannst abkürzen. Wenn du direkt [STRG] + [x] und [STRG] + [c] verwendest wirst du gefragt, ob du die Änderungen vor dem Verlassen speichern möchtest.
Voraussetzung
Es wird ein fertig installiertes (minimales) Debian System vorausgesetzt. Dazu gibt es sehr gute Anleitungen im Netz (z.B. https://www.howtoforge.com/tutorial/debian-minimal-server/). Wenn du deinen Server bei einem Hoster betreibst, bieten viele ein automatisches Installationsimage für Debian 11 (Bullseye) an.
Der Zugriff erfolgt entweder direkt über eine Tastatur und Bildschirm oder aus der Ferne via SSH. Du solltest daher grundlegende Kenntnisse mitbringen, wie SSH funktioniert.
Zusätzlich wird ein fertig eingerichteter (Sub-)Domainname benötigt. Deine Domain <beispiel.de> muss mindestens mit einem A Eintrag auf die IP deines Servers zeigen (zusätzlich AAAA für IPv6). Du brauchst also ggf. Zugriff auf die DNS Verwaltung bei deinem Hoster.
Benötigte Softwarepakete
jed (ich favorisiere diesen Editor, wer vi oder etwas anderes nutzen möchte, ist herzlich eingeladen dies zu tun)
wget (zum Download von Dateien)
$ apt -y install jed wget
Installation
Wir erstellen uns einen ejabberd Benutzer:
$ adduser --disabled-login ejabberd
Lege Benutzer »ejabberd« an ...
Lege neue Gruppe »ejabberd« (1001) an ...
Lege neuen Benutzer »ejabberd« (1001) mit Gruppe »ejabberd« an ...
Erstelle Home-Verzeichnis »/home/ejabberd« ...
Kopiere Dateien aus »/etc/skel« ...
Benutzerinformationen für ejabberd werden geändert.
Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert
Vollständiger Name []: ejabberd User
Zimmernummer []:
Telefon geschäftlich []:
Telefon privat []:
Sonstiges []:
Sind die Informationen korrekt? [J/n] j
Evtl. erscheint die Ausgabe bei dir in englischer Sprache. Du brauchst nur einen Namen Anzugeben, weitere Informationen wie Zimmernummer kannst du frei lassen und nur mit [Enter] bestätigen.
Wir machen uns zu ejabberd um damit zu arbeiten:
$ su - ejabberd
ejabberd herunterladen und ausführbar machen:
$ wget -O ejabberd-22.10-1-linux-x64.run https://www.process-one.net/downloads/downloads-action.php?file=/22.10/ejabberd-22.10-1-linux-x64.run $ chmod +x
Installation starten:
$ ./ejabberd-22-10-1-linux-x64.run
Running without superuser privileges (installer wasn't invoked with „sudo“), cannot perform system-wide installation this way. Continue anyway? (y/n) [n] ← y
Install ejabberd below /home/ejabberd/opt? (y/n) [n] ← y
The following installation paths will be used: - /home/ejabberd/opt/ejabberd-22.10 - /home/ejabberd/opt/ejabberd (for configuration, database, and log files) Install ejabberd 22.10 now? (y/n) [n] ← y
Danach hast du zwei neue Pfade :
/home/ejabberd/opt/ejabberd für Konfgurationsdateien, Datenbank und Log Dateien. Dieses Verzeichnis wird bei Updates übernommen.
/home/ejabberd/opt/ejabberd-22.10 für ejabberd
Dies ist das erste Mal, dass ejabberd in getrennten Pfaden installiert wird. Zukünftige Updates werden nach /home/ejabberd/opt/ejabberd-xx-yy installiert.
In den folgenden Howtos werde ich Scripte vorstellen, die automatisiert Dinge tun. Damit nicht bei jedem Update die Pfade innerhalb der Scripte angepasst werden müssen, erstellen wir noch einen Link (vergleichbar mit einer Verknüpfung unter Windows):
$ ln -s /home/ejabberd/opt/ejabberd-22.10 /home/ejabberd/opt/ejd
Nach einem Update muss in Zukufnt lediglich dieser Link entfernt und mit der aktuellen Version neu erstellt werden:
$ rm opt/ejd ln -s /home/ejabberd/opt/ejabberd-xx.yy /home/ejabberd/opt/ejd
ejabberd konfigurieren
Konfigurationsdatei öffnen:
$ jed opt/ejabberd/conf/ejabberd.yml
Das ist eine Basiskonfiguration, die du nach deinen Bedürfnissen anpassen kannst. Jetzt musst du nur den Hostname anpassen.
###
### ejabberd configuration file
###
### The parameters used in this configuration file are explained at
###
### https://docs.ejabberd.im/admin/configuration
###
### The configuration file is written in YAML.
### *******************************************************
### ******* !!! WARNING !!! *******
### ******* YAML IS INDENTATION SENSITIVE *******
### ******* MAKE SURE YOU INDENT SECTIONS CORRECTLY *******
### *******************************************************
### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
###
hosts:
- beispiel.de
loglevel: info
ca_file: /home/ejabberd/opt/ejabberd/conf/cacert.pem
certfiles:
- /home/ejabberd/opt/ejabberd/conf/server.pem
## If you already have certificates, list them here
# certfiles:
# - /etc/letsencrypt/live/domain.tld/fullchain.pem
# - /etc/letsencrypt/live/domain.tld/privkey.pem
listen:
-
port: 5222
ip: "::"
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
-
port: 5223
ip: "::"
tls: true
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
-
port: 5269
ip: "::"
module: ejabberd_s2s_in
max_stanza_size: 524288
-
port: 5443
ip: "::"
module: ejabberd_http
tls: true
request_handlers:
/admin: ejabberd_web_admin
/api: mod_http_api
/bosh: mod_bosh
/captcha: ejabberd_captcha
/upload: mod_http_upload
/ws: ejabberd_http_ws
-
port: 5280
ip: "::"
module: ejabberd_http
request_handlers:
/admin: ejabberd_web_admin
/.well-known/acme-challenge: ejabberd_acme
-
port: 3478
ip: "::"
transport: udp
module: ejabberd_stun
use_turn: true
## The server's public IPv4 address:
# turn_ipv4_address: "203.0.113.3"
## The server's public IPv6 address:
# turn_ipv6_address: "2001:db8::3"
-
port: 1883
ip: "::"
module: mod_mqtt
backlog: 1000
s2s_use_starttls: optional
acl:
local:
user_regexp: ""
loopback:
ip:
- 127.0.0.0/8
- ::1/128
access_rules:
local:
allow: local
c2s:
deny: blocked
allow: all
announce:
allow: admin
configure:
allow: admin
muc_create:
allow: local
pubsub_createnode:
allow: local
trusted_network:
allow: loopback
api_permissions:
"console commands":
from:
- ejabberd_ctl
who: all
what: "*"
"admin access":
who:
access:
allow:
- acl: loopback
- acl: admin
oauth:
scope: "ejabberd:admin"
access:
allow:
- acl: loopback
- acl: admin
what:
- "*"
- "!stop"
- "!start"
"public commands":
who:
ip: 127.0.0.1/8
what:
- status
- connected_users_number
shaper:
normal:
rate: 3000
burst_size: 20000
fast: 100000
shaper_rules:
max_user_sessions: 10
max_user_offline_messages:
5000: admin
100: all
c2s_shaper:
none: admin
normal: all
s2s_shaper: fast
modules:
mod_adhoc: {}
mod_admin_extra: {}
mod_announce:
access: announce
mod_avatar: {}
mod_blocking: {}
mod_bosh: {}
mod_caps: {}
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {}
mod_disco: {}
mod_fail2ban: {}
mod_http_api: {}
mod_http_upload:
put_url: https://@HOST@:5443/upload
custom_headers:
"Access-Control-Allow-Origin": "https://@HOST@"
"Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
"Access-Control-Allow-Headers": "Content-Type"
mod_last: {}
mod_mam:
## Mnesia is limited to 2GB, better to use an SQL backend
## For small servers SQLite is a good fit and is very easy
## to configure. Uncomment this when you have SQL configured:
## db_type: sql
assume_mam_usage: true
default: always
mod_mqtt: {}
mod_muc:
access:
- allow
access_admin:
- allow: admin
access_create: muc_create
access_persistent: muc_create
access_mam:
- allow
default_room_options:
mam: true
mod_muc_admin: {}
mod_offline:
access_max_user_messages: max_user_offline_messages
mod_ping: {}
mod_privacy: {}
mod_private: {}
mod_proxy65:
access: local
max_connections: 5
mod_pubsub:
access_createnode: pubsub_createnode
plugins:
- flat
- pep
force_node_config:
## Avoid buggy clients to make their bookmarks public
storage:bookmarks:
access_model: whitelist
mod_push: {}
mod_push_keepalive: {}
mod_register:
## Only accept registration requests from the "trusted"
## network (see access_rules section above).
## Think twice before enabling registration from any
## address. See the Jabber SPAM Manifesto for details:
## https://github.com/ge0rg/jabber-spam-fighting-manifesto
ip_access: trusted_network
mod_roster:
versioning: true
mod_s2s_dialback: {}
mod_shared_roster: {}
mod_stream_mgmt:
resend_on_timeout: if_offline
mod_stun_disco: {}
mod_vcard: {}
mod_vcard_xupdate: {}
mod_version:
show_os: false
### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8
Die Änderungen mit [STRG] + [s] speichern und den Editor mit [STRG] + [x] und [STRG] + [c] verlassen.
ejabberd starten und automatisch beim Boot starten
$ exit $ cp /home/ejabberd/opt/ejabberd-22.10/bin/ejabberd.service /etc/systemd/system/ejabberd.service
Damit nicht bei jedem Update die Datei neu kopiert werden muss, passen wir noch die Pfade an.
Konfiguration öffnen:
$ jed /etc/systemd/system/ejabberd.service
Suche nach:
ExecStart=/home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl foreground ExecStop=/bin/sh -c '/home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl stop && /home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl stopped' ExecReload=/home/ejabberd/opt/ejabberd-22.10/bin/ejabberdctl reload_config
und ersetze durch:
ExecStart=/home/ejabberd/opt/ejd/bin/ejabberdctl foreground ExecStop=/bin/sh -c '/home/ejabberd/opt/ejd/bin/ejabberdctl stop && /home/ejabberd/opt/ejd/bin/ejabberdctl stopped' ExecReload=/home/ejabberd/opt/ejd/bin/ejabberdctl reload_config
Die Änderungen mit [STRG] + [x] und [STRG] + [s] speichern und den Editor mit mit [STRG] + [x] und [STRG] + [c] verlassen.
Zum Schluss den Dienst aktivieren und starten:
$ systemctl daemon-reload $ systemctl enable ejabberd.service $ systemctl start ejabberd.service
Den ersten XMPP Benutzer anlegen
$ su - ejabberd $ ./opt/ejabberd-22.10/bin/ejabberdctl register <benutzer> <beispiel.de> <passwort>
Das wars, du kannst dich jetzt mit einem beliebigen XMPP Client am Server anmelden und direkt loschatten.
