Unterschiede zwischen den Revisionen 32 und 37 (über 5 Versionen hinweg)
Revision 32 vom 2020-05-19 13:26:01
Größe: 12845
Autor: anonym
Kommentar: An Buster angepasst, STUN,TURN
Revision 37 vom 2022-11-20 18:06:15
Größe: 0
Autor: phil
Kommentar: verschoben und aktualisiert
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 1: Zeile 1:
## page was renamed from ejabberd
Diese Seite beschreibt die Installation und Einrichtung des XMPP/Jabber-Servers [[https://ejabberd.im|ejabberd]] auf einem [[https:((debian.org|Debian]] Buster-System.

<<TableOfContents>>

= Begriffe und Variablen =
||''Variable'' ||''Bedeutung'' ||''Beispiel'' ||
||DOMAIN ||Domain des Jabberservers ||systemausfall.org ||
||JID ||Jabber-Identifier, vollständige Jabber-Adresse || admin1@jabber.systemausfall.org ||
||NAME ||Nutzername ||alice ||
||HOST ||Jabber-Host ||ejabberd@jabber ||
||PASSWORT ||Ein Passwort || ||
||VHOST ||Virtueller Jabber-Host ||jabber.systemausfall.org ||


= Installation =
In Debian Buster ist Version 18.12 von ejabberd enthalten. In den Backports ist eine aktuellere Version enthalten. Zur Installation sind die folgenden Schritte notwendig:

{{{
apt install ejabberd ejabberd-contrib erlang-p1-mysql -t buster-backports
}}}
Während der Installation wird ein Adminaccount eingerichtet.

<<Anchor(config)>>

= Konfiguration =
Die Konfiguration findet über die Datei {{{/etc/ejabberd/ejabberd.yml}}} statt. Durch zahlreiche Kommentare ist die Datei gut erklärt - ansonsten hilft die umfangreiche [[http://docs.ejabberd.im/admin|Doku]] weiter. Ab und an wird die Syntax vereinfacht - ein Blick in die aktuelle [[https://raw.githubusercontent.com/processone/ejabberd/master/ejabberd.yml.example|Beispiel-Datei]] hilft hier weiter.

Zudem kannst du dir ein Beispiel an der Konfiguration von [[https://gitlab.com/hanno/ejabberd-config|Schokokeks]] und [[https://github.com/ThomasLeister/trashserver.net-xmpp|Trashserver]] nehmen.

== DNS-Einträge ==
Über Service-Records (SRV) wird im Domain-Name-System (DNS) hinterlegt, auf welchem Port bestimmte Dienste für Clients und Server erreichbar sind. Die Konferenzräume des XMPP-Servers stehen meist unter conference.DOMAIN zur Verfügung. Ein entsprechender DNS-Eintrag sollte angelegt werden. Entsprechende SRV- und TXT-Einträge sollten ebenfalls gesetzt werden ([[http://wiki.xmpp.org/web/SRV_Records|siehe]]):

|| ''Eintrag'' || ''Host'' || ''Ziel'' || ''Anmerkung'' ||
|| SRV || _xmpp-client._tcp.jabber.systemausfall.org || jabber.systemausfall.org:5222 || Client-2-Server ||
|| SRV || _xmpp-server._tcp.jabber.systemausfall.org || jabber.systemausfall.org:5269 || Server-2-Server ||
|| SRV || _xmpps-client._tcp.jabber.systemausfall.org || jabber.systemausfall.org:443 || Client-2-Server ||
|| SRV || _stun._tcp.jabber.systemausfall.org || jabber.systemausfall.org:3478 || STUN ||
|| SRV || _stuns._tcp.jabber.systemausfall.org || jabber.systemaufall.org:5349 || STUN, verschlüsselt ||
|| SRV || _turns._tcp.jabber.systemausfall.org || jabber.systemausfall.org:5349 || TURN, verschlüsselt ||
|| TXT || _xmppconnect.jabber.systemausfall.org || _xmpp-client-xbosh=https://jabber.systemausfall.org:5280/bosh || Websocket ||
|| CNAME || conference.jabber.systemausfall.org || jabber.systemausfall.org || ||
|| CNAME || echo.jabber.systemausfall.org || jabber.systemausfall.org || ||
|| CNAME || irc.jabber.systemausfall.org || jabber.systemausfall.org || ||
|| CNAME || proxy.jabber.systemausfall.org || jabber.systemausfall.org || ||
|| CNAME || pubsub.jabber.systemausfall.org || jabber.systemausfall.org || ||
|| CNAME || upload.jabber.systemausfall.org || jabber.systemausfall.org || ||

<<Anchor(firewall)>>
== Firewall ==
Folgende Ports müssen in der Firewall geöffnet werden:

|| ''Port'' || ''Protokoll'' || ''Verwendung'' ||
|| 3478 || TCP || Für STUN ||
|| 5222 || TCP || Für Clients, die sich mit dem Server verbinden wollen ||
|| 5269 || TCP || Für andere Server, die sich mit dem lokalen Server verbinden wollen ||
|| 5280 || TCP || Für den internen Webserver (Adminwebinterface, Registrierung von Accounts ||
|| 5349 || TCP || Für TURN ||
|| 5443 || TCP || Für den Dateiupload ||
|| 7777 || TCP || Für Dateitransfers via Proxy ||

== Sicherheit erhöhen ==
Über [[https://xmpp.net/index.php|IM Observatory]] lässt sich die Einrichtung des jeweiligen Servers nach Sicherheitsaspekten bewerten. Es ist sinnvoll, den eigenen Server dort einen Test zu unterziehen und die bemängelten Punkte zu bearbeiten. Hinweise zur Erhöhung der Sicherheit befinden sich auch im [[https://blog.process-one.net/securing-ejabberd-with-tls-encryption/|Blog]] von process one.

=== Zertifikate von Let's Encrypt ===
Mit [[https://letsencrypt.org/|Let's Encrypt]] gibt es eine einfach zu nutzende Möglichkeit, anerkannte Zertifikate zu erzeugen. Zahlreiche Anleitungen erklären, wie das grundsätzlich geht. Dein Zertifikat sollte nicht nur auf die XMPP-Domain, sondern gleichzeitig auch auf alle als CNAME angelegten Domainnamen ausgestellt werden. Sind die Zertifikate erzeugt, liegen sie bei Debian unter {{{/etc/letsencrypt/live}}}. Da das Verzeichnis {{{root:root}}} gehört, hat ejabberd darauf keinen Zugriff. Es bietet sich an, unter {{{/etc/ejabberd/}}} eine Zertifikatsdatei zu erstellen (Rechte {{{ejabberd:root}}} und sie mit den Daten aus dem letsencrypt-Verzeichnis zu befüllen:{{{
cat /etc/letsencrypt/live/domain.tld/privkey.pem /etc/letsencrypt/live/domain.tld/fullchain.pem >> /etc/ejabberd/ejabberd.pem}}}

Anschließend sollte ein entsprechender cron-job erstellt werden, der die Datei bei jeder Zertifikatserneuerung aktualisert und die ejabberd-Konfiguration neu lädt.

Seit Version [[https://blog.process-one.net/ejabberd-17-11-happy-birthday-ejabberd/|17.11]] unterstützt ejabberd das ACME-Protokoll. Folgende Angaben sind für die automatische Erstellung und Nutzung per {{{ejabberdctl}}} notwendig:{{{
listen:
  -
    port: 5281
    module: ejabberd_http

certfiles:
  - "/data/ejabberd/ejabberd.pem"

acme:
  contact: "mailto:info@example.org"
  ca_url: "https://acme-v01.api.letsencrypt.org"
}}}

Anschließend muss der Webserver so konfiguriert werden, dass er Anfragen auf Port 5281 an ejabberd weiter leitet.

=== Unsichere SSL-Varianten deaktivieren ===
Erneut die [[#config|Konfigurationsdatei]] bearbeiten und an den entsprechenden Stellen {{{- "no_sslv3}}} einfügen:

{{{
protocol_options:
   - "no_sslv2"
   - "no_sslv3"
   - "no_tlsv1"

s2s_protocol_options:
   - "no_sslv2"
   - "no_sslv3"
   - "no_tlsv1"
}}}

=== Passworte als Hash speichern ===
Bei Verwendung der internen Mnesia-Datenbank werden die Passworte standardmäßig im Klartext gespeichert. Dies kann mit den folgenden Optionen in der Konfigurationsdatei geändert werden:

{{{
auth_method: internal
auth_password_format: scram
}}}
Bereits in Klartext gespeicherte Passworte werden beim nächsten Start von ejabberd umgewandelt.

=== Sichere Passworte erzwingen ===
Damit User nicht zu einfache Passworte bei der Erstellung von neuen Konten verwenden, kann folgende Option im Abschnitt {{{mod-register}}} aktiviert werden:

{{{
password_strength: 32
}}}

=== Spamschutz ===
XMPP-Spam ist lästig. Sofern für den eigenen Server die offene Anmeldung (In-band Registration) erlaubt ist, sollte zumindest eine Captcha-Abfrage eingerichtet sein, damit Bots nicht zahlreiche Accounts anlegen können. Die meisten Clients betten das Captcha dank [[http://xmpp.org/extensions/xep-0158.html|XEP-0158]] bei der Registrierung direkt ein. Sollte der Client dies nicht unterstützen, wird zumindest eine Link angezeigt, um das Captcha über den Browser aufzurufen.

 * Zur Erzeugung sind noch einige Pakete notwendig<<FootNote(Entgegen der Dokumentation ist das convert-Tool aus DebianPackage:graphicsmagick-imagemagick-compat nicht vollstängig kompatibel zur imagemagick-Version)>>:{{{
apt install imagemagick ghostscript --no-install-recommends}}}
 * Die Einrichtung erfolgt über {{{/etc/ejabberd/ejabberd.yml}}}
 * Anzeigen der Captchas per URL:{{{
listen:
  -
    port: 5280
    captcha: true
}}}
 * Skript einbinden und Nutzung pro Minute beschränken:{{{
captcha_cmd: "/usr/share/ejabberd/captcha.sh"
captcha_host: "https://jabber.systemausfall.org"
captcha_limit: 5
}}}
  * Die Angabe des {{{captcha_host}}} kann, je nach Setup, auch nach dem Muster host:port ohne vorangestelltes https erfolgen, bspw. jabber.systemausfall.org:5280
 * Anzeige der Captchas bei der In-bad Registrierung durch den Client:{{{
mod_register:
       captcha_protected: true
}}}

Weitere Hinweise zur Spamreduzierung befinden sich im [[https://blog.process-one.net/fighting-xmpp-abuse-and-spam-with-ejabberd-ejabberd-workshop-1/|Vortrag]] von !ProcessOne.

== Sprach- und Videochats ==
Ab Version 20.04 bietet bietet ejabberd alle Voraussetzungen für Sprach- und Videochats. In der einfachsten Variante sieht die Konfiguration dafür so aus:{{{
  -
    port: 3478
    transport: tcp
    module: ejabberd_stun

  -
    port: 5349
    transport: tcp
    module: ejabberd_stun
    use_turn: true
    turn_ip: $DEINE_IP
    tls: true

mod_stun_disco:
  services:
     -
       host: $DEINE_IP
       port: 3478
       type: stun
       transport: tcp
      -
       host: $VHOST
       port: 5349
       type: turns
       transport: tcp
}}}

Die Funktionalität kannst du anschließend [[https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/|hier]] testen.


= Optimierung für mobile Clients =
Neben klassischen Desktop-Programmen verbreitet XMPP sich auch auf verschiedenen Smartphone-Systemen. So gibt es mit [[https://github.com/siacs/Conversations|Conversations]] bspw. es einen wirklich guten XMPP-Client für Android-Geräte. Damit die Nutzung mit unterschiedlichen Clients angenehmer wird, können einige Optimierungen vorgenommen werden.

 * [[https://docs.ejabberd.im/admin/guide/configuration/#modhttpbind|BOSH]] für die Nutzung hinter restriktiven Firewalls, die die üblichen XMPP-Ports blocken
 * [[https://docs.ejabberd.im/admin/guide/configuration/#modroster|Roster Versioning]]

== HTTP File Upload ==
[[https://docs.ejabberd.im/admin/guide/configuration/#modhttpupload|HTTP File Upload]] ermöglicht Dateitransfer per HTTP-Upload. Da ejabberd auf einem speziellen Port auf die Uploads wartet, muss die [[#firewall|Firewall]] entsprechend konfiguriert sein. Anschließend wird {{{ejabberd.yml}}} angepasst:
 * Im {{{listen}}}-Abschnitt:{{{
-
    port: 5443
    module: ejabberd_http
    tls: true
    certfile: "/etc/ejabberd/ejabberd.pem"
    request_handlers:
      "upload": mod_http_upload
}}}
 * In der Modulkonfiguration:{{{
mod_http_upload:
  docroot: "/date/ejabberd/upload"
  put_url: "https://xmpp.example.org:5443/upload"
  access: local
}}}
 * Um übertragene Dateien nicht ewig zu speichern, sollte ein automatisches Löschintervall über das Modul {{{mod_http_upload_quota}}} festgelegt werden:{{{
mod_http_upload_quota:
    max_days: 60
}}}

= Tor Hiddenservice einrichten =
Der XMPP-Server kann recht einfach als Tor Hiddenservice betrieben werden.
 * Tor installieren:{{{
apt install tor tor-arm}}}
 * {{{/etc/tor/torrc}}} bearbeiten, Port des Dienstes eintragen und Verzeichnis festlegen:{{{
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 5222 127.0.0.1:5222
HiddenServicePort 5269 127.0.0.1:5269}}}

 * Verzeichnis erstellen und Rechte setzen:{{{
mkdir /var/lib/tor/hidden_service/

chown -R debian-tor: /var/lib/tor/hidden_service/

chmod 700 /var/lib/tor/hidden_service/
}}}
 * Anschließend Tor neu starten. Mit dem Kommandozeile-Tool {{{arm}}} kannst du die Funktionalität deines Tor-Dienstes überprüfen.

In der Datei /var/lib/tor/hidden_service/hostname ist der automatisch generierte .onion-Link hinterlegt, der nun als Adresse publiziert werden kann. Du solltest noch folgende [[https://riseup.net/en/security/network-security/tor/onionservices-best-practices#be-careful-of-localhost-bypasses|Hinweise]] beachten.

= Administration =
== Webfrontend ==
Über das Webfrontend kann der Server umfangreich konfiguriert werden. Es ist üblicherweise unter https://DOMAIN/admin zu erreichen.

Einloggen können sich in {{{/etc/ejabberd/ejabberd.yml}}} eingetragene Admins mit ihrer vollständigen JID und dem entsprechenden Passwort.

== neue User anlegen ==
Sofern das entsprechende Modul aktiviert ist, können User mit ihrem Client selbständig neue Accounts registrieren.

Für Admins gibt es zwei Möglichkeiten:

 * per Webfrontend
 * oder per Kommandozeile
 {{{
ejabberdctl register NAME HOST PASSWORT
}}}

== Userpasswort ändern ==
Auch hier gilt: sofern das entsprechende Modul aktiviert ist, können User mit ihrem Client das Passwort selbst ändern.

Admins können dies über das Webfrontend tun: https://DOMAIN/admin/server/VHOST/users.

----
'''Fussnoten und Hinweise'''

 * [[https://github.com/processone/ejabberd/issues/3265#issuecomment-626168218|Konfigurationsschnipsel für STUN/TURN]]

Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.