ejabberd XMPP Server auf Raspberry Pi installieren

Basis ist ein Raspberry Pi B (512 MB) mit einem installierten Raspbian (2013-09-25-wheezy-raspbian.zip) als Betriebssystem. Als Webserver verwende ich nginx.

Specs:

  • Betriebssystem: frisch installiertes Raspbian
  • Server: nginx
  • ejabberd nur über SSL Verbindung erreichbar

Die Installation von ejabberd

Das ejabberd in den Debian Paketquellen enthalten ist, gestaltet sich die Installation recht einfach.

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install ejabberd

ejabberd Konfigurieren

ejabberd config-Datei editieren

Die Konfiguration von ejabberd ist recht schnell gemacht. Wir legen in der config Datei einafch nur den admin und den Hostnamen an.
Ich habe mich dabei für den usernamen „admin“ auf dem host „raspberrypi“ entschieden. „domain.de“ gibt die Domain an, unter der der Server später von außen erreichbar sein soll, in meinem Fall ist es eine DyDNS-URL.

sudo nano /etc/ejabberd/ejabberd.cfg

Die geänderten Stellen in der config sehen dann so aus.

%% Admin user
{acl, admin, {user, "admin", "raspberrypi"}}.

%% Hostname
{hosts, ["localhost", "raspberrypi", "domain.de"]}.

ejabberd Admin-Benutzer anlegen

Nach dem Schema „sudo ejabberdctl register username hostname passwort“ wird bei ejabberd ein Benutzer angelegt. In unserem Beispiel heißt der Benutzer „admin“ und liegt auf dem Host „raspberrypi“. Der Befehl lautet somit

sudo ejabberdctl register admin raspberrypi passwort

Einen Benutzer kann man übrigens mit dem Befehl „sudo ejabberdctl unregister username hostname“ wieder löschen

Jetzt muss der Server noch neu gestartet werden

sudo service ejabberd restart

Wenn bis dahin alles funktioniert hat, sollte unter der internen IP des Raspberry Pi das Web Interface von ejabberd unter „192.168.1.xxx:5280/admin/“ erreichbar sein, in dem wir uns mit unseren Admin Benutzer Daten anmelden können.

ejabberd von außen erreichbar machen

Im nächsten Schritt machen wir den Server von außen erreichbar. Dazu legen wir in unserem Router ein Portforwarding für die Port 5222 und 5223 auf die interne IP des Raspberry Pi (192.168.1.xxx)

ejabberd nur über SSL-Verbindung zugänglich machen

Jetzt wird es etwas tricky.
ejabberd bringt schon ein eigenes SSL-Zertifkat mit, dieses wollen wir aber durch unser eigenes Zertifikat ersetzen.

Da die Zertifikate nicht signiert sind, wir der Browser eine Warnung diesbezüglich heraus geben. Diese “ignorieren” wir bzw. genehmigen die Zertifikat.

Die SSL-Zertifikate erstellen wir mit folgendem Befehl.

sudo openssl req $@ -new -x509 -days 365 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key
sudo openssl req -newkey rsa:4096 -sha512 -x509 -days 3650 -nodes -out /etc/nginx  /cert.pem -keyout /etc/nginx/cert.key
sudo chmod 600 /etc/nginx/cert.pem
sudo chmod 600 /etc/nginx/cert.key

Diese zwei Zertifikatdateien (Public-Key und Private-Key) müssen wir nun in eine Datei packen.

cd /etc/nginx
sudo su
cat cert.key cert.pem > cert_meinhost.pem
mv cert_meinhost.pem /etc/ejabberd/
exit

Wir haben jetzt die Zertifikatdatei „cert_meinhost.pem“ erstellt und diese in /etc/ejabberd/ abgelegt.

Jetzt müssen wir nur noch die passenden Stellen in der config ändern. Mit „starttls_required“ legen wir fest, dass keine unverschlüsselte Verbindung zugelassen wird.

sudo nano /etc/ejabberd/ejabberd.cfg

Die Sektionen sollen an Ende so aussehen

{listen,
 [
  {5222, ejabberd_c2s, [
                        {access, c2s},
                        {shaper, c2s_shaper},
                        {max_stanza_size, 65536},
                        %%zlib,
                        starttls_required, {certfile, "/etc/ejabberd/cert_meinhost.pem"}
                       ]},

  %%
  %% To enable the old SSL connection method (deprecated) in port 5223:
  %%
 {5223, ejabberd_c2s, [
                        {access, c2s},
                        {shaper, c2s_shaper},
                        {max_stanza_size, 65536},
 %%                    zlib,
                        tls, {certfile, "/etc/ejabberd/cert_meinhost.pem"}
                       ]},

  {5269, ejabberd_s2s_in, [
                           {shaper, s2s_shaper},
                           {max_stanza_size, 131072}
                          ]},

///
{s2s_use_starttls, true}.
///
{s2s_certfile, "/etc/ejabberd/cert_meinhost.pem"}.

Zum Abschluss noch ein restart

sudo service ejabberd restart

sudo openssl req -newkey rsa:4096 -sha512 -x509

10 Gedanken zu „ejabberd XMPP Server auf Raspberry Pi installieren

      1. Habe es jetzt zum Laufen bekommen.
        Mein Problem:

        Ich kann seltsamerweise den Server nicht starten. Wenn ich das über service mache, steht da, dass er gestartet ist.
        Allerdings, wenn ich dann versuche den admin Benutzer zu registrieren, wird behauptet: „Failed RPC connection to the node ejabberd@raspberrypi: nodedown“
        Die Config ist genau so wie von dir vorgegeben.
        Logs kann ich dir geben, sobald ich weiß, wo die hingeschrieben werden.

      2. Also, den admin account konnte ich auch längere Zeit nicht registrieren. Ich hatte auch mit einigen Fehlermeldungen zu kämpfen. Am Ende hat es so funktioniert, wie im Tutorial beschrieben. Allerdings hatte ich zuvor die gleichen Zeilen schon eingegeben, mit Fehlermeldung. Nach mehreren Versuchen ging es. Ejabberd scheint etwas empfindlich zu sein, wenn es um Änderungen an der config geht. Schau mal hier, vielleicht hilft dir das weiter http://www.ejabberd.im/node/3598

        Vielleicht hilft es auch, wenn du nichts an der config änderst, und dann mit den gegebenen Daten den admin account erstellt. Du kannst ja später ihn ändern.

      3. Ich habe das finale Problem jetzt gefunden.

        1.
        ejabberd hat Probleme mit Bindestrichen in Domainnamen.
        2.
        Ich bin einfach selber zu blöd, den Server nach Änderungen an der Config neuzustarten.

  1. Hi,

    hast Du auch mal andere Jabber Server getestet um zu vergleichen?
    Lässt sich bei ejabberd einstellen ob bzw. was gespeichert wird?

    Gruß
    Michi

  2. Obwohl der Beitrag älter ist, hoffe ich noch auf eine Antwort.

    Ich habe anhand dieser Anleitung alles soweit zum laufen bekommen.
    Leider kommen nachrichten manchmal nicht an. Bzw nach längerer inaktiviät.
    Weisst du da Rat?

    Danke im voraus!

    1. Hi

      Sorry, ich habe das Blog etwas vernachlässigt. ejabberd habe ich gar nicht mehr am laufen. Es gab zu wenig Leute, die darüber kommunizieren wollten, leider.
      Ich hofffe, dass sich dein Problem aber erledigt hat.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s