Kategorien
Allgemein Linux

ejabberd mit MySQL und SSL installieren

Heute gibt es mal ein kleines Tutorial für die Installation eines ejabberd Servers den wir an eine MySQL Datenbank anbinden.

Inhalt des Tutorials
1. MySQL Datenbank vorbereiten
2. ejabberd installieren
3. MySQL Modul hinzufügen
4. Konfiguration
5. SSL Zertifikat erstellen
6. Benutzer anlegen und löschen
7.Module installieren

1. MySQL Datenbank vorbereiten

Sofern es noch nicht geschehen ist, muss man den MySQL Dienst und phpMyAdmin installieren.

apt-get install mysql-server phpmyadmin

Dabei wird auch gleich Apache mitinstalliert, welcher dann später für das Webinterface benötigt wird. Nachdem MySQL und phpMyAdmin installiert und konfiguriert sind, erstellt man am besten gleich einen Benutzer samt Datenbank für ejabberd und importiert das Schema.

mkdir /opt/ejabberd
cd /opt/ejabberd
mysql -h localhost -p -u root
GRANT ALL ON ejabberd.* TO 'ejabberd'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE ejabberd;
quit
wget https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/src/odbc/mysql.sql
mysql -D ejabberd -u root -p < mysql.sql

Nachdem die .sql Datei scheinbar inzwischen unvollständig zu sein scheint, hier eine komplette: ejabberd.sql

2. ejabberd installieren

Damit ejabberd mit MySQL arbeiten kann, muss es dafür speziell aus den Quellen kompiliert werden. Dafür laden wir ihn erst einmal runter:

wget http://www.process-one.net/downloads/ejabberd/2.1.8/ejabberd-2.1.8.tar.gz
tar xfvz ejabberd-2.1.8.tar.gz

Nun müssen die erforderlichen Bibliotheken installiert werden und dann kann auch ejabberdgleich kompiliert und installiert werden.

apt-get install erlang libexpat1-dev zlib1g-dev libcurl4-openssl-dev make
cd ejabberd-2.1.8/src/
./configure --enable-odbc && make
make install

Ein paar Dateien müssen noch an die richtigen Stellen kopiert werden und mit den notwendigen Attributen versehen werden

cp ejabberd.init /etc/init.d/ejabberd
chmod +x /etc/init.d/ejabberd
chmod +x /sbin/ejabberdctl
cd /usr/sbin/
ln -s /sbin/ejabberdctl

3. MySQL Modul hinzufügen

Jetzt fehlt noch das Modul, mit dem ejabberd die Datenbank überhaupt benutzen kann.

cd /tmp/
wget https://support.process-one.net/doc/download/attachments/415/mysql_r13.tar.gz
tar xfvz mysql_r13.tar.gz
cd mysql_r13/
cp *.beam /lib/ejabberd/ebin/

4. Konfiguration

Nachdem alles installiert und eingerichtet ist, muss ejabberd noch richtig konfiguriert werden. Dazu bearbeiten wir die ejabberd.cfg. Prozentzeichen (%) bedeuten Kommentare und Punkte (.) stellen ein Zeilenende dar.

cd /etc/ejabberd/
vi ejabberd.cfg

Als erstes sollte man den Host einstellen. Also die Domain unter der der Jabber-Server laufen soll:

%%%'   SERVED HOSTNAMES
{hosts, ["example.de"]}.

Die Administratoren für den Server kann man mit folgender Zeile festlegen. Dabei wird für jeden Admin die gleiche Zeile nochmal eingetragen.

%%%'   ACCESS CONTROL LISTS
{acl, admin, {user, "max", "example.de"}}.

Dann müssen noch die Zugangsdaten für den MySQL Server eingetragen werden.

%% MySQL server:
{odbc_server, {mysql, "server", "database", "user", "password"}}.

Bei neuen Registrierungen kann ein Benutzer benachrichtigt werden. Dazu muss man nur diese Zeile einfügen:

%%When a user registers, send a notification to these XMPP accounts
{registration_watchers, ["[email protected]"]}.

Ob andere Nutzer sich einen Account mit ihrem Client registrieren können, stellt man so ein. Anstatt des deny ein allow erlaubt das Registrieren von Klienten.

{access, register, [{deny, all}]}.

Eventuell muss man noch das hier fett markierte deny in allow ändern (oder umgekehrt).

{mod_register, [
	{ip_access, [{allow, "127.0.0.0/8"},
		{deny, "0.0.0.0/0"}]},

Damit sich jetzt auch jeder über SSL einloggt muss starttls in starttls_required geändert werden. Optional kann auch IPv6 aktiviert werden.

{5222, ejabberd_c2s, [
		inet6,  %<--  mit IPv6
		{access, c2s},
		{max_stanza_size, 65536},
		starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"},
		{shaper, c2s_shaper}
	]},

Um TLS auch für das Webinterface zu nutzen muss folgende markierte Zeile eingefügt werden:

{5280, ejabberd_http, [
			http_poll,
			web_admin,
			tls, {certfile, "/etc/ejabberd/ejabberd.pem"}
			]}

	 ]}.

Jetzt ejabberd nur noch mitteilen, dass er MySQL anstatt die interne Mnesia benutzen soll und die Konfiguration ist fertig.

{auth_method, internal}.

wird zu

{auth_method, odbc}.

Speichern und beenden mit :wq

5. SSL Zertifikat erstellen
Es fehlt aber noch das Zertifikat, das man mit ein paar Befehlen erstellen kann. Bei den Fragen ist eigentlich nur “Common Name” wichtig, was mit dem Hostnamen ausgefüllt werden sollte.

openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
openssl rsa -in privkey.pem -out privkey.pem
cat privkey.pem >> server.pem
rm privkey.pem
mv server.pem /etc/ejabberd/ejabberd.pem

Zum Schluss den Dienst noch einmal neu starten.

6. Benutzer anlegen und löschen

Zum Abschluß wird noch der Admin registriert.

/etc/init.d/ejabberd restart
ejabberdctl register <username> <server> <password>

Benutzer löschen geht mit:

ejabberdctl unregister <username> <server>

7. Module installieren

Um die ejabberd Module installieren zu können, müssen wir erstmal die Sources herunter laden:
cd /usr/local/src
svn checkout http://svn.process-one.net/ejabberd-modules/

Nun wird zuerst das Modul mod_xmlrpc erstellt:

cd /usr/local/src/ejabberd-modules/mod_xmlrpc/trunk
./build.sh
cp ebin/ejabberd_xmlrpc.beam /lib/ejabberd/ebin/

und anschließend das mod_admin_extra:

cd /usr/local/src/ejabberd-modules/mod_admin_extra/trunk/
./build.sh
cp ebin/mod_admin_extra.beam /usr/lib/ejabberd/ebin/

Jetzt sollte man über https://domain:5280/admin auf das Webinterface kommen. Zugangsdaten sind dieselben wie für den Admin Account. Der Benutzername muss aber mit Host angegeben werden! Falls jemand den Server hinter einem Router nutzen will, sollte noch Portforwarding für diese Ports eingestellt werden:

  • 5222 eingehend, für Client-Verbindungen unverschlüsselt oder TLS-verschlüsselt
  • 5223 eingehend, für SSL-verschlüsselte Clientverbindungen (veraltet)
  • 5269 ein- und ausgehend, für Verbindungen zu anderen Servern
  • 5280 eingehend, für Client-Verbindungen über HTTP-Polling (nützlich für Webapplikationen)

9 Antworten auf „ejabberd mit MySQL und SSL installieren“

leider kann ich mich nicht per web Interface mit dem Benutzer admin anmelden.
Habe schon x Varianten von Benutzername eingetragen [email protected] oder mit domain…
Ich bin 3 mal die Anleitung durchgegangen. Wo könnte der Fehler liegen?

Hallo Seven-ex,

hast du den Benutzer in Punkt 6 erstellt? 😉

Syntax sollte sein:
ejabberdctl register ejabberdctl register tester domain.tld meinsuperpasswort

Dann auch noch darauf achten, das der User auch in der ACL-Konfiguration (Punkt 4) eingetragen ist.

Login zum Adminbereich funktioniert dann mit [email protected].

der User ist in der Config eingetragen, Registriert wollte ich denn User so

ejabberdctl register tester domain.tld meinsuperpasswort
und bekomme:

User [email protected] already registered at node [email protected]

was mir aufgefallen ist das sich in der Datenbank aber nix einträgt, wenn ich von odbc auf internal umsteige geht der Login. Nur möchte ich ja aber das ganze über MySQL.

Lösche den Benutzer mal, setze das Debugging in der ejabberd.cfg auf {loglevel, 5} und erstelle ihn noch mal.
Schaue dann nach was das Log dazu spricht.

aus der ejabberd.log

The authentication module ejabberd_auth_odbc returned an error
when checking user „admin“ in server „lionsale.de“

Error message: „#42S02Table ‚ejabberd.users‘ doesn’t exist“
in de mysql.sql steht auch keine tabelle names users drin.

Ich habe im 1. Punkt, am Ende, eine Zip hochgeladen.
In dieser Zip sind alle notwendigen Tabellen enthalten.


cd /usr/local/src/ejabberd-modules/mod_xmlrpc/trunk
./build.sh
cp ebin/ejabberd_xmlrpc.beam /lib/ejabberd/ebin/

sollte das nicht so aussehen?

cd /usr/local/src/ejabberd-modules/mod_xmlrpc/trunk
./build.sh
cp ebin/ejabberd_xmlrpc.beam /usr/lib/ejabberd/ebin/

Hallo seven-ex,

damit könntest du durchaus recht haben. Kann es leider nicht mehr ganz nachvollziehen da ich meine Struktur ein wenig verändert habe.
Bei mir liegt inzwischen alles unter /opt/ejabberd 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


*