Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:die_konfigurationsdatei_von_ejabberd_erklaert

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: "<geheim>"
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: <beispiel.de>      ### 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: <beispiel.de>
    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: <beispiel.de>
    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.<beispiel.de>":     ### wie lautet der eindeutige Hostname des Transports. Für jedes Transport muss ein eigener Block mit eigenem Port existieren.
        password: "<geheim>"        ### 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
      - <benutzer1>@<beispiel.de>    ### 1. User der Liste "admin"
      - <benutzer2>@<beispiel.de>    ### 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
      - "<spamserver1.de>"           ### 1. Server der Liste "soft_blocked"
      - "<werbung2.com>"             ### 2. Server der Liste "soft_blocked"
  hard_blocked:
    server:
      - "<werbeserver1.de>"
      - "<adserver2.com>"

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://<beispiel.de>: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:<deine-email-adresse>"]
  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.<beispiel.de>"
    message:
      outgoing:
        - allow:
          - server:
            - "whatsapp.<beispiel.de>"
    presence:
      roster:
        - allow:
          - server:
            - "whatsapp.<beispiel.de>"
  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: <beispiel.de>
          port: 5349
          type: stuns
          transport: tcp
          restricted: false
        -
          host: <beispiel.de>
          port: 5349
          type: turns
          transport: tcp
          restricted: true
  mod_vcard: {}
  mod_vcard_xupdate: {}
  mod_version:
    show_os: false

=== Dateiende ===

<code>### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8
de/die_konfigurationsdatei_von_ejabberd_erklaert.txt · Zuletzt geändert: 04.12.2022, 14:36 von Christoph Stoltz