===== 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