##[[Vorlage(Ausbaufähig, "Die Installation aus den offiziellen Paketquellen müsste überprüft werden. Aber auch die manuelle Installation über den Universal-Installer scheint nicht unproblematisch zu sein (siehe [post:6240542:Diskussion]).")]] [[Vorlage(archiviert, )]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten: Bearbeiten von Paketquellen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Dienste: Serverdienste starten/stoppen] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis(1)]] [[Bild(./ejabberd_logo.png, 100, align=left)]] [http://www.process-one.net/en/ejabberd/ Ejabberd] {en} ist einer der am weitesten verbreiteten [:XMPP:]-Server im Open-Source-Bereich, obwohl er in der ziemlich exotischen Sprache [:Erlang:] geschrieben ist. U.a. setzt sowohl die [http://jabber.org Jabber-Foundation] {en} als auch der deutsche Freemail-Anbieter GMX früher auf diese Serversoftware, weil sie auch unter hohen Anforderungen zuverlässig arbeitet. Aber auch für einen kleinen privaten Server eignet sich der ejabberd gut, weil er (meist) ziemlich problemlos einzurichten ist. = Installation = Um den Serverdienst zu installieren, reicht es zunächst aus, folgendes Paket inkl. aller Abhängigkeiten zu installieren [1]: {{{#!vorlage Paketinstallation ejabberd, universe }}} {{{#!vorlage Hinweis Das Einzige, worauf man dabei achten sollte ist, dass nur die wirklichen Abhängigkeiten mit installiert werden und nicht alle "empfohlenen" Pakete, denn sonst werden einem auch auf einem Server schnell mal die ganzen X11-Bibliotheken auf die Platte gebracht. Man sollte also genau hinschauen und bei Bedarf die Option `--no-install-recommends` im Installationsbefehl nutzen. }}} [[Anker(Konfiguration)]] = Konfiguration = Um mit dem Server dann auch etwas anfangen zu können, muss man ihn noch kurz konfigurieren: {{{#!vorlage Befehl sudo dpkg-reconfigure ejabberd }}} Als erstes wird man nach dem Namen des Servers gefragt. Dieser muss inkl. der Domain eingegeben werden und der Rechner muss auch über das [wikipedia:Domain_Name_System:DNS-System] unter diesem Namen bekannt sein. Als nächstes wird nach einer Admin-ID gefragt. Dabei handelt es sich um eine [:XMPP#Funktionsweise:Jabber-ID] (JID), der administrative Rechte eingeräumt werden. Mit dieser JID kann man sich dann später auch über einen XMPP-Client einloggen. Der Domainteil der JID darf nicht mit angegeben werden, da er ja schon in der vorherigen Frage angegeben wurde. {{{#!vorlage Hinweis Sollte ein Fehler wie dieser auftreten: {{{ Can't register admin user "[EMAIL PROTECTED]. Probably ejabberd is configured for serving another hostname. \}}} kann Folgendes weiterhelfen: {{{#!vorlage Befehl sudo killall epmd \}}} }}} Abschließend muss man für diesen Account noch ein Passwort setzen. Damit ist die Konfiguration erstmal fertig und nachdem man den Dienst neu gestartet hat [5], ist ejabberd einsatzbereit. {{{#!vorlage Befehl sudo /etc/init.d/ejabberd restart }}} = Internetanbindung = Damit der Server einwandfrei funktioniert, müssen mindestens folgende TCP-Ports ungefiltert und erreichbar sein: (Nur relevant für Leute, die mit Firewalls und/oder Portforwarding zu tun haben.) * `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) Für einen internen Server ohne Kontakt zu anderen kann man letzteren natürlich auch weglassen. = Administration = == Weboberfläche == In der Standardkonfiguration bietet ejabberd eine Weboberfläche, die über die URL `http://serveradresse:5280/admin/` zu erreichen ist. Hier kann man sich über die Admin-JID (diesmal komplett mit Domain) und das Passwort einloggen. Die Bedienung ist leider ziemlich unintuitiv, weswegen man abgesehen von den Statistikfunktionen vielleicht besser auf die anderen Möglichkeiten zurückgreift. == Konfigurationsdatei == Die Datei '''/etc/ejabberd/ejabberd.cfg''' ist das Herzstück der ejabberd-Konfiguration. Diese ist in Erlang-Syntax geschrieben und sieht deshalb etwas gewöhnungsbedürftig aus. Z.B. werden Kommentare durch ein Prozent-Zeichen eingeleitet. Nach jeder Änderung an dieser Datei [4] muss der ejabberd wiederum neu gestartet werden [5]. === Geschlossener Benutzerkreis === Wer nicht über einen leistungsfähigen Server mit breiter Internetanbindung verfügt, möchte z.B. vielleicht nicht jedem ermöglichen, sich auf dem Server zu registrieren, sondern nur ausgewählten Bekannten/Mitarbeitern/Kunden einen Account zur Verfügung stellen. Dafür muss man nur ein '''%'''-Zeichen von einer in die andere Zeile setzen: {{{ % Every username can be registered via in-band registration: %{access, register, [{allow, all}]}. % None username can be registered via in-band registration: {access, register, [{deny, all}]}. }}} Jetzt kann nur noch der Admin neue Benutzerzugänge anlegen. Die automatische Registrierung über den Jabber-Client schlägt fehl. {{{#!vorlage Hinweis In der '''ejabberd-Version 2.1.11''', welche in Ubuntu 14.04 LTS in den Paketquellen enthalten ist, ist die Benutzerregistrierung standardmäßig deaktiviert. Der entsprechende Eintrag lautet hier: {{{#!code text %% No username can be registered via in-band registration: %% To enable in-band registration, replace 'deny' with 'allow' % (note that if you remove mod_register from modules list then users will not % be able to change their password as well as register). % This setting is default because it's more safe. {access, register, [{deny, all}]}. }}} === Webkonfiguration einschränken === Die webbasierte Administrationsoberfläche kann man bei Bedarf auf einen anderen Port legen - der Port 5280 wird ja nebenbei auch für HTTP-Polling benutzt - und auch an eine bestimmte Netzwerkschnittstelle binden, z.B. an die Loopback-Schnittstelle. Dafür einfach die folgende Zeile in der '''ejabberd.cfg'''-Datei suchen... {{{ {5280, ejabberd_http, [http_poll, web_admin]} }}} ... und durch folgende ersetzen: {{{ {5280, ejabberd_http, [http_poll]}, {5281, ejabberd_http, [{ip, {127, 0, 0, 1}}, web_admin]} }}} Dabei besonders auf das Komma achten. ==== Ab Ubuntu 14.04 LTS ==== Unter Ubuntu 14.04 LTS sieht die Konfiguration etwas anders aus. Um die webbasierte Administrationsoberfläche zu deaktivieren, sucht man folgenden Codeblock, in der Konfigurationsdatei und kommentiert den Eintrag `web_admin` aus. Auch hier ist auf die korrekte Kommasetzung zu achten. {{{#!code text {5280, ejabberd_http, [ %%{request_handlers, %% [ %% {["pub", "archive"], mod_http_fileserver} %% ]}, %%captcha, http_bind, http_poll %%, %%web_admin ]} }}} [[Anker(sasl_anon)]] === Anonymer Login === Manchmal möchte man bestimmten Clients einen temporären anonymen Zugang zum Server bieten, ohne gleich einen Account mit einem Passwort registrieren zu müssen. ## Ein Beispiel für so eine Anwendung ist die Webchat-Applikation [:MUCkl:]. Dafür bietet der ejabberd zwei verschiedene Protokolle an, nämlich ''sasl_anon'' und ''login_anon''. ''login_anon'' benötigt keine besondere Unterstützung im Client. Es wird einfach jede JID/Passwort-Kombination akzeptiert, sofern die JID nicht von jemandem fest registriert wurde. ''sasl_anon'' ist dagegen ein eigenes Protokoll, mit dessen Hilfe der Server dem Client für die Dauer der Verbindung eine einzigartige, zufällige JID zuweist. Obwohl der Server von sich aus darauf achtet, dass kein anonymer Benutzer sich eine real existierende JID von jemand anderem unter den Nagel reißt, sollte man anonyme Logins besser auf einen eigenen virtuellen Server auslagern, um Verwirrung zu vermeiden. Dazu ändert man die ''hosts''-Zeile in der '''ejabberd.cfg''' ab und fügt einen entsprechenden Servernamen hinzu: {{{ {hosts, ["jabber-server.tld", "anonymous.jabber-server.tld"]}. }}} Nun fügt man noch einen host-spezifischen Absatz ein, der die Authentifizierung regelt. (Es gibt schon einen auskommentierten Abschnitt, wo verschiedene ''host_config''-Beispiele vorgestellt werden. An dieser Stelle passen die folgenden Zeilen sehr gut hin.) {{{{ host_config, "anonymous.jabber-server.tld", [{auth_method, anonymous}, {allow_multiple_connections, false}, {anonymous_protocol, sasl_anon}]}. }}} An der Stelle von ''sasl_anon'' kann man auch ''login_anon'' oder ''both'' eintragen, wenn man Clients verwenden will, die ''sasl_anon'' nicht unterstützen. In diesem Fall muss man je nach Verwendung evtl. auch ''allow_multiple_connections'' auf ''true'' setzen. == Kommandozeilen-Werkzeug == Im laufenden Betrieb benutzt man das Kommandozeilenwerkzeug "`ejabberdctl`" zur Administration [3]. === Benutzer registrieren/löschen === Wenn man die öffentliche Registrierung von JIDs wie oben beschrieben deaktiviert hat, muss man die Benutzerverwaltung selber übernehmen: {{{#!vorlage Befehl sudo ejabberdctl register Benutzername Servername Passwort # Benutzer hinzufügen sudo ejabberdctl unregister Benutzername Servername # Benutzer löschen }}} === Backup der Benutzerdatenbank === Mit folgenden Befehlen kann man ein Backup der Benutzerdatenbank anlegen bzw. wiederherstellen: {{{#!vorlage Befehl sudo ejabberdctl backup Datei # Sicherung anlegen sudo ejabberdctl restore Datei # Sicherung wiederherstellen }}} Folgende Befehle funktionieren auch, benutzen aber auch für Menschen lesbare Dateien: {{{#!vorlage Befehl sudo ejabberdctl dump Datei # Sicherung anlegen sudo ejabberdctl load Datei # Sicherung wiederherstellen }}} {{{#!vorlage Hinweis Wenn man keine absoluten Dateinamen benutzt, findet man die Backup-Dateien im Heimatverzeichnis von ejabberd, '''/var/lib/ejabberd'''. }}} === Daten-Import === Wer vorher einen '''jabberd1.4'''-Server betrieben hat und jetzt umsteigen möchte, kann einzelne Benutzerdatensätze oder komplette Serversätze in ejabberd importieren: {{{#!vorlage Befehl sudo ejabberdctl import-file /wo/auch/immer/servername.tld/benutzername.xml # Benutzer importieren sudo ejabberdctl import-dir /wo/auch/immer/servername.tld # kompletten Serverdatensatz importieren }}} === Informationen === So erfährt man wie viele Benutzer gerade online sind, welche Benutzer online sind bzw. welche Benutzerkonten überhaupt existieren: {{{#!vorlage Befehl sudo ejabberdctl connected-users-number sudo ejabberdctl connected-users sudo ejabberdctl vhost Servername registered-users ## oder: sudo ejabberdctl registered-users Servername ## in neueren Versionen }}} Für weitere Kommandos sei auf die [:man:Manpage] von '''ejabberdctl''' verwiesen. [[Anker(AltInst)]] = Alternative Installation: Universal-Installer = Wer aus irgendwelchen Gründen nicht die ejabberd-Version aus den Ubuntu-Repositories verwenden will - weil er vielleicht den Ärger mit den kaputten Erlang-Paketen von Ubuntu Edgy vermeiden will oder in der allerneuesten Version der Software eine unglaublich praktische Funktion entdeckt hat - kann auf den [http://www.process-one.net/en/ejabberd/downloads/ Universal-Installer des ejabberd-Projektes] {en} für alle Linux-Distributionen zurückgreifen, der auch schon den Erlang-Interpreter beinhaltet. (Z.B. [http://www.process-one.net/downloads/ejabberd/1.1.3/ejabberd-1.1.3_1-linux-x86-installer.bin Version 1.1.3] {en}.) Als erstes muss man die Datei '''ejabberd-''''-installer.bin''' herunterladen und ausführbar machen [6], dann startet man das selbstextrahierende Paket unter genau der Benutzerkennung, unter welcher der Server später laufen soll. Standardmäßig geschieht das durch Anlegen eines Verzeichnisses im '''home''' des entsprechenden Benutzers bzw. in '''/opt''', falls man Root ist (nicht empfohlen). Die Installationsroutine startet mit einer Frage nach der bevorzugten Sprache. Danach darf man der Lizenz (GPL) zustimmen, und es wird nach dem Installationsverzeichnis gefragt. Es folgen die schon im obigen [#Konfiguration Konfigurationsabschnitt] beschriebenen Fragen nach Domain, Admin-Account, etc. Neu ist die Frage, ob man den Server in einem Cluster aus mehreren Rechnern betreiben will. Das sollte man in den meisten Fällen verneinen. Leider versucht das Skript nach beendeter Erstkonfiguration, den Server sofort zu starten, was wegen dem im Folgenden beschriebenen Problem unter Umständen nicht funktioniert und der Installer hängt sich auf. Wenn man aber wartet, bis der Fortschrittsbalken auf 100% steht und die Disk-Aktivität nachlässt, kann man die Routine über [[Vorlage(Tasten, Strg+C)]] abbrechen. Das Skript '''ejabberdctl''' im '''bin/'''-Verzeichnis ist nämlich fehlerhaft, weil es in der #!-Zeile '''/bin/sh''' als Shell angibt, aber [:Bash: bash]-spezifische Erweiterungen nutzt. Da bei Ubuntu die '''sh''' kein Link auf die '''bash''', sondern auf [:Dash:dash] ist, muss man also die erste Zeile wie folgt abändern, um das Skript benutzen zu können [4]: {{{ #!/bin/bash }}} Ebenfalls im '''bin/'''-Verzeichnis der ejabberd-Installation finden sich Skripte namens '''start''' und '''stop''', die genau das machen, was ihr Name vermuten lässt, nämlich den Server starten und stoppen. === Konfiguration === Die '''ejabberd.cfg'''-Datei, zu finden im '''conf/'''-Verzeichnis, benutzt selbstverständlich dieselbe Syntax wie die aus dem Ubuntu-Paket ([#Konfiguration siehe oben]), aber die Voreinstellungen sind anders - weniger sinnvoll. Als erstes möchte man vielleicht - wie oben schon beschrieben - die automatische Registrierung neuer Benutzer sperren. Das funktioniert, indem man die ''access-register''-Zeile folgendermaßen anpasst: {{{ {access, register, [{deny, all}]}. }}} Außerdem ist der ejabberd aus dem Installer - im Gegensatz zu dem aus dem Ubuntu-Paket - standardmäßig nicht für SSL-/TLS-Verschlüsselung ausgelegt. Wer das ändern will, muss wie im folgenden Abschnitt dargestellt ein paar Kommentarzeichen ('%') verrücken: {{{ {listen, [ %%{5222, ejabberd_c2s, [{access, c2s}, {max_stanza_size, 65536}, {shaper, c2s_shaper}]}, %% Use this line to enable SSL: %%{5223, ejabberd_c2s, [{access, c2s}, {max_stanza_size, 65536}, tls, {certfile, "/opt/ejabberd-1.1.3/conf/serv er.pem"}]}, %% %% Use those lines instead for TLS support: {5222, ejabberd_c2s, [{access, c2s}, {shaper, c2s_shaper}, starttls, {certfile, "/opt/ejabberd-1.1.3/conf/serve r.pem"}]}, {5223, ejabberd_c2s, [{access, c2s}, tls, {certfile, "/opt/ejabberd-1.1.3/conf/server.pem"}]}, }}} Es empfiehlt sich, das '''bin/'''-Verzeichnis in den eigenen Programm-Pfad aufzunehmen, damit man für die '''start'''-/'''stop'''-Skripte und '''ejabberdctl''' nicht immer den kompletten Pfad benutzen muss. Wie das geht, steht im Artikel [:Umgebungsvariable:]. Außerdem möchte man sich wahrscheinlich ein Startskript in '''/etc/init.d/''' erstellen, um den Server gleich beim Systemstart hochzufahren [5]. === Härten des ejabberd-Servers === Der ejabberd-Server wird mithilfe eines Skripts unter '''/etc/init.d/ejabberd''' gestartet/gestoppt. Dabei wird der Prozess unter dem Benutzer `ejabberd` gestartet. Dieser Benutzer hat in '''/etc/passwd''' als Shell "/bin/sh" definiert. Einen Server-Prozess unter Linux sollte möglichst als unpriviligierter Benutzer mit möglichst wenig Rechten laufen. Dazu wird die eingetragene Shell entfernt: {{{#!vorlage Befehl sudo usermod -s /usr/sbin/nologin ejabberd }}} Nach dieser Änderung lässt sich ejabberd aber nicht mehr starten. Um das zu beheben, legt man zunächst eine Sicherung des bestehenden init-Skripts an: {{{#!vorlage Befehl sudo cp -a /etc/init.d/ejabberd /etc/init.d/ejabberd.bak }}} Danach passt man das init-Skript an: {{{#!vorlage Befehl sudo sed -i 's/su $EJABBERDUSER -c/sudo -u "$EJABBERDUSER" sh -c/g' /etc/init.d/ejabberd }}} Jetzt sollte der Start-Befehl wieder funktionieren: {{{#!vorlage Befehl sudo service ejabberd start }}} = Problembehebung = Eine Besonderheit ist, dass der Server nach einem Wechsel der Host-Namens nicht mehr richtig läuft. Besser ausgedrückt, der Server kann auf den Datenbestand nicht mehr zugreifen. Wenn die Nutzerdaten z.B. über LDAP von anderer Stelle geholt werden, reicht es aus, das Verzeichnis '''/var/lib/ejabberd/''' zu leeren. Leider gehen dabei die eingerichteten Räume verloren. = Links = * [https://www.kuketz-blog.de/ejabberd-installation-und-betrieb-eines-xmpp-servers Kuketz-Blog] Ausführliche Anleitung zur Erstellung eines Ejabberd Servers {de} * [https://github.com/processone/ejabberd/issues ejabberd-Community] {en} * [http://www.process-one.net/en/ejabberd/docs/ ejabberd-Dokumentation] {en} * [http://www.process-one.net/en/ejabberd/downloads/ Download des ejabberd-Installers] {en} * [:Serverdienste:] {Übersicht} Übersichtsartikel # tag: Netzwerk, Server, Kommunikation, jabber