===== Die Konfigurationsdatei von ejabberd erklärt =====
==== Voraussetzung ====
* Dieses Howto hat keine Voraussetzungen. Es kann aber sein, dass hier Funktionen erklärt werden, die in Howtos vorkommen, die du noch nicht gelesen hast.
==== Einleitung ====
Ich werde hier die Konfigurationsdatei von ejabberd "ejabberd.yml" in kleine Abschnitte einteilen und deren Funktion erläutern. Der Inhalt der Seite entspricht dem aller Howtos. Wenn du also alle Howtos angewendet hast, sieht deine Konfiguration genau so aus.
==== ejabberd.yml ====
=== Kopfzeilen ===
Bei den Kopfzeilen muss ich wohl nichts weiter erklären. Hier gibt es lediglich Kommentare und Verweise zu Anleitungen.
###
### 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.
###
=== Auth und MySQL ===
auth_password_format: scram ### Art der Passwortspeicherung, scram: gehast und gesalzen
auth_scram_hash: sha512 ### Hash-Algorhytmus
sql_type: mysql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: ""
auth_method: sql
default_db: sql ### Grundsätzlich alles in SQL, nicht mnesia Speicher
default_ram_db: sql
=== Hosts, Loglevel und Zertifikate ===
hosts: ### Für welche Domains ist der Server zuständig weitere Domains können pro Zeile angegeben werden
- localhost
loglevel: info ### Was soll alles protokolliert werden? "info" sehr wenig, "error" alle Fehler und "debug" alles
certfiles: ### Wo findet der Server das Zertifikat zu den Domains unter hosts
- "/home/ejabberd/certs/certs.pem"
=== Listen ===
### Auf welchen Ports "lauscht" dein Server nach eingehenden Verbindungen:
listen:
-
port: 5222 ### Port 5222 ist der Standardport für Clients/Apps
ip: "::" ### Abkürzung für "Lausche auf allen IP Adresse, localhost, IPv4 und IPv6.
module: ejabberd_c2s ### Welches Modul wird verwendet, hier: client to server
max_stanza_size: 262144 ### Wie groß dürfen maximal sein. Siehe auch Begriffserklärung hier im Wiki
shaper: c2s_shaper ### Es wird auf den shaper c2s_shaper verwiesen. Erklärungen weiter unten
access: c2s ### Wer darf sich verbinden, alle die unter der Access Rule c2s weiter unten definiert wurden
starttls_required: true ### StartTLS Verschlüsselung wird erzwungen, sonst keine Verbindung möglich
-
port: 5223 ### Port 5223 ist ein weiterer Standardport für Clients, früher LegacyAuth, heute für Verbindungen mit TLS statt StartTLS
ip: "::"
tls: true
module: ejabberd_c2s
max_stanza_size: 262144
shaper: c2s_shaper
access: c2s
starttls_required: true
-
port: 5269 ### Standardport für Server zu Server kommunikation mit StartTLS
ip: "::"
module: ejabberd_s2s_in ### Welches Modul soll verwendet werden, hier server zu server
max_stanza_size: 524288
-
port: 5270 ### ein weiterer Standardport für Server zu Server Kommunikation. Mit TLS statt StartTLS
ip: "::"
tls: true ### TLS soll verwendet werden
module: ejabberd_s2s_in
max_stanza_size: 524288
-
port: 5443 ### Standardport für HTTPS Zugriffe
ip: "::"
module: ejabberd_http
tls: true
request_handlers: ### Welche Anfragen sollen beantwortet werden
/admin: ejabberd_web_admin ### Pfad zum Webinterface
/api: mod_http_api ### Pfad zur API
/bosh: mod_bosh ### Pfad zu BOSH (Anbindung bestimmter Clients)
/captcha: ejabberd_captcha ### Pfad zum Captcha
/upload: mod_http_upload ### Pfad zum Upload für Dateiaustausch (senden von Bildern, Videos oder Musik)
/ws: ejabberd_http_ws ### Pfad zu Websocket (Anbindung bestimmter Clients)
-
port: 5280 ### Standartport für HTTP
ip: "::"
module: ejabberd_http
request_handlers:
/admin: ejabberd_web_admin
/.well-known/acme-challenge: ejabberd_acme ### Für eingebauten Let's Encrypt Client
-
port: 3478 ### Standardport für Audio-/Videocalls
transport: udp ### nur udp soll verwendet werden, Standard bei unverschlüsselten Calls
use_turn: true ### Benutze den eingebauten TURN Server
turn_ipv4_address: <0.0.0.0> ### Welche IPv4 Adresse soll verwendet werden, muss definiert werden, Platzhalter für "alle IP Adressen" unzulässig
turn_ipv6_address: <::> ### Welche IPV6 Adresse soll verwendet werden, muss definiert werden, Platzhalter für "alle IP Adressen" unzulässig
auth_type: user ### Wer darf den Server nutzen, alle registrierten User:innen
auth_realm: ### Welche Domain wird verwendet
module: ejabberd_stun
-
port: 3478
transport: tcp ### TCP als alternative
use_turn: true
turn_ipv4_address: <0.0.0.0>
turn_ipv6_address: <::>
auth_type: user
auth_realm:
module: ejabberd_stun
-
port: 5349 ### Standardport für verschlüsselte Audio-/Videocalls
transport: tcp ### Verschlüsselung geht nur über TCP
use_turn: true
tls: true
ip: <0.0.0.0>
turn_ipv4_address: <0.0.0.0>
turn_ipv6_address: <::>
auth_type: user
auth_realm:
module: ejabberd_stun
-
port: 5360 ### Beispielport für die Einbindung externer Komponenten
module: ejabberd_service ### Einbindung eines Transports als service
check_from: false
hosts:
"whatsapp.": ### wie lautet der eindeutige Hostname des Transports. Für jedes Transport muss ein eigener Block mit eigenem Port existieren.
password: "" ### Passwort zur internen Anmeldung
access: all ### Alle haben Zugriff
-
port: 1883 ### ejabberd bietet auch MQTT, wird vielleicht in einem späteren Howto vorkommen
ip: "::"
module: mod_mqtt
backlog: 1000
=== s2s Einstellungen ===
s2s_access: s2s ### Welche Access Rule wird angewendet, welcher Server darf mit diesem kommunizieren
s2s_use_starttls: required ### Server dürfen nur Verschlüsselt kommunizieren
s2s_protocol_options: ### Optinen, hier verbiete SSLv2 und SSLv3 (unsichere Verschlüsselung)
- "no_sslv3"
- "no_sslv2"
### Welche Chiffren sind zur Verschlüsselung freigegeben:
s2s_ciphers: "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-SEED-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA"
s2s_dhfile: "/home/ejabberd/certs/dhparams.pem" ### Pfard zur DHPARAMS um Perfect Forward Secrecy (PFS) zu ermöglichen
### Das gleiche auch für die Kommunikation zwischen Client und Server
c2s_protocol_options:
- "no_sslv3"
- "no_sslv2"
c2s_ciphers: "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-SEED-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA"
c2s_dhfile: "/home/ejabberd/certs/dhparams.pem"
=== ACL ===
### Access Listen definieren Listen mit unterschiedlichen Inhalten. Statt ACL könnte man auch Gruppe sagen, die Personen, Server oder IP Adressen enthält.
acl:
admin: ### ACL mit Namen "admin"
user: ### ACL "admin" enthält user
- @ ### 1. User der Liste "admin"
- @ ### 2. User der Liste "admin
local:
user_regexp: ""
loopback:
ip:
- 127.0.0.0/8
- ::1/128
soft_blocked: ### ACL mit Namen "soft_blocked"
server: ### ACL "soft_blocked" enthält Server
- "" ### 1. Server der Liste "soft_blocked"
- "" ### 2. Server der Liste "soft_blocked"
hard_blocked:
server:
- ""
- ""
=== Access Rules ===
### Access Rules geben oder verbieten Zugriff für vorher definierte ACL. Im Listen Block wird unter Port 5222 mit "access: c2s" Bezug auf die Access Rule c2s genommen, die hier definiert wird.
access_rules:
local: ### Definiere die Access Rule local
allow: local ### Erlaube ACL den Inhalt local
c2s: ### Definiere die Access Rule c2s
deny: blocked ### Verbiete den Inhalt von blocked; blocked ist unter ACL nicht definiert, es ist also niemand gesperrt.
allow: all ### Erlaube alles andere
announce:
allow: admin
configure:
allow: admin
muc_create:
allow: local
pubsub_createnode:
allow: local
trusted_network:
allow: loopback
register:
allow: all
strangers:
deny: soft_blocked
allow: all
s2s:
deny: hard_blocked
allow: all
=== Captcha ===
captcha_cmd: "/home/ejabberd/captcha/captcha-ng.sh" ### Pfad zum Captcha Scipt
captcha_url: "https://:5443" ### Wo findet der XMPP Client das generierte Captcha
language: "de" ### Voreingestellte Sprache: "deutsch", gilt für alle Meldungen vom Server
=== API Berechtigungen ===
###Definition der API Berechtigungen. Die Syntax ist dabei so, wie bei ACL und Access Rules
api_permissions:
"console commands":
from:
- ejabberd_ctl
who: all
what: "*"
"admin access": ### Berechtigung Admin Access
who:
access: ### Direkter Zugriff
allow:
- acl: loopback ### Erlaube ACL loopback
- acl: admin ### Erlaube 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 und Shaper Rules ===
### Bandbreiteneinstellungen
shaper: ### Regel für Bandbreitenbeschränkungen
normal: ### Standardbandbreite
rate: 3000 ### max 3000bit/s
burst_size: 20000 ### kurzfristig sind 20000bit/s erlaubt
fast: 100000 ### Bandbreitenregel fast mit 100000 bit/s
shaper_rules:
max_user_sessions: 10 ### Jede:r Nutzer:in darf 10 gleichzeitige Sitzungen/Verbindungen haben
max_user_offline_messages: ### Anzahl an offline Messagess, die vom Server verwahrt werden, bis ihr wieder online seid
5000: admin ### 5000 für alle die in der ACL admin sind
100: all ### 100 für alle anderen
c2s_shaper:
none: admin ### Keine Bandbreitenbeschränkung für die ACL admin
normal: all ### alle anderen sind in der Shaper Gruppe normal
s2s_shaper: fast ### Serververbindungen fallen unter die Shaper Gruppe fast
=== Module ===
modules:
mod_adhoc: {}
mod_admin_extra: {}
mod_announce:
access: announce
mod_avatar: {}
mod_blocking: {}
mod_block_strangers:
access: strangers
captcha: true
mod_bosh: {}
mod_caps: {}
mod_carboncopy: {}
mod_client_state: {}
mod_configure: {}
mod_disco:
server_info:
-
modules: all
name: "abuse-addresses"
urls: ["mailto:"]
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_http_upload_quota:
max_days: 30
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_pres_counter:
count: 5
interval: 60
mod_privacy: {}
mod_private: {}
mod_privilege:
roster:
both:
- allow:
- server:
- "whatsapp."
message:
outgoing:
- allow:
- server:
- "whatsapp."
presence:
roster:
- allow:
- server:
- "whatsapp."
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:
captcha_protected: true
access: register
mod_roster:
versioning: true
mod_s2s_dialback: {}
mod_shared_roster: {}
mod_stream_mgmt:
resend_on_timeout: if_offline
mod_stun_disco:
credentials_lifetime: 12h
services:
-
host: <0.0.0.0>
port: 3478
type: stun
transport: udp
restricted: false
-
host: <0.0.0.0>
port: 3478
type: turn
transport: udp
restricted: true
-
host: <::>
port: 3478
type: stun
transport: udp
restricted: false
-
host: <::>
port: 3478
type: turn
transport: udp
restricted: true
-
host:
port: 5349
type: stuns
transport: tcp
restricted: false
-
host:
port: 5349
type: turns
transport: tcp
restricted: true
mod_vcard: {}
mod_vcard_xupdate: {}
mod_version:
show_os: false
=== Dateiende ===
### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8