Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:die_konfigurationsdatei_von_ejabberd_erklaert

Dies ist eine alte Version des Dokuments!


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 ejabberde „ejabberd.yml“ in kleine Abschnitte einteilen und deren Funktion erläutern.

ejabber.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.
###

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

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 und Shaper Rules

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

Module

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

Dateiende

### Local Variables:
### mode: yaml
### End:
### vim: set filetype=yaml tabstop=8
de/die_konfigurationsdatei_von_ejabberd_erklaert.1669375079.txt.gz · Zuletzt geändert: 25.11.2022, 12:17 von Christoph Stoltz