Instant-Messaging-Server mit Jabber

19.02.2002 von Dr. Holger Reibold
Jabber ist eine der interessantesten Instant-Messaging-Lösungen. Wir zeigen, wie man einen Jabber-Server samt User einrichtet und die Schnittstellen für die Kommunikation mit anderen IM-Diensten aufsetzt.

Instant Messaging (IM) eignet sich hervorragend für eine einfache, schnelle und unkomplizierte Kommunikation zwischen mehreren Teilnehmern. Damit bietet IM nicht nur im privaten, sondern auch im Unternehmenseinsatz durch seine Einfachheit und Geschwindigkeit zahlreiche Vorteile. Speziell in der Kommunikation zwischen einzelnen Mitarbeitern kann es E-Mail in vielen Fällen ersetzen. Nicht nur Informationen lassen sich so schneller austauschen, auch die Ressourcen der E-Mail-Server werden geschont.

Eine preiswerte und leistungsfähige Lösung für ein firmeninternes IM-System ist der Jabber-Server. Selbst weniger versierte Systemadministratoren können mit Jabber ein IM-System aufbauen sowie populäre externe Dienste wie ICQ, AIM, MSN, IRC und Yahoo einbinden.

Neben verschiedenen Clients für Windows, MacOS, Linux/Unix und weiteren Plattformen, die Java unterstützen, gibt es inzwischen auch Clients für Windows CE und andere mobile Geräte wie für den Newton. Jabber-Clients sind somit für alle relevanten Plattformen verfügbar, der Server hingegen nur für Linux und Unix.

Jabber im Detail

Bei Jabber handelt es sich um ein Instant-Messaging- und Presence-System, das sich von anderen IM-Lösungen in verschiedenen Punkten grundlegend unterscheidet. Jabber verwendet ein eigens für dieses IM-System entwickeltes Protokoll. Wenn Jabber-Clients sich auf einem Jabber-Server (temporär) angemeldet haben, kann ein direkter Nachrichtenaustausch zwischen zwei oder mehreren Clients erfolgen. Man bezeichnet die Verfügbarkeit eines Clients auch als Presence (Anwesenheit). Diese typische IM-Funktion kombiniert Jabber mit zwei Besonderheiten: Zum einen erlaubt das offene Protokoll die Kommunikation mit anderen Messaging-Systemen, zum anderen tauschen Client und Server XML-basierte Nachrichten aus.

Dabei bietet Jabber noch eine Besonderheit: Als erstes Instant-Messaging-System unterstützt Jabber das Instant Messaging and Presence Protocol (IMPP), das von der IMPP-Arbeitsgruppe der Internet Engineering Task Force (IETF) entwickelt wurde. IMPP stellt eine Architektur für den einfachen Nachrichtenaustausch und Hinweismeldungen bereit. Auch Fragen der Authentifizierung, Nachrichtenintegrität, Verschlüsselung und Zugriffskontrolle spielen eine Rolle.

Der Client kommuniziert in der Regel über Port 5222 mit dem Server. Die Grundfunktionen der Client-Software wie beispielsweise das Parsen von XML-Dokumenten mit den Jabber-XML-Elementen (<message/>, <presence/> oder <iq/>) stellen die Jabber-Client-Bibliotheken bereit. Der Vorteil für Unternehmen: Entwickler können ohne größeren Aufwand "eigene" Clients realisieren, die an die jeweiligen Anforderungen optimal angepasst sind.

XML ist integraler Bestandteil der Jabber-Architektur. Man hat sich für XML entschieden, da es sich dabei um das universellste Format handelt. So genannte XML-Streams sorgen für die Client-Server- beziehungsweise Server-Server-Kommunikation. Ein weiterer Vorzug von XML ist in diesem Zusammenhang, dass die Kommunikation mit anderen IM-Diensten oder Programmen wie AIM, ICQ oder IRC funktioniert. Man spricht diesbezüglich auch von Transportschnittstellen. Für alle wichtigen Dienste gibt es inzwischen entsprechende Interfaces.

Jabber-Server einrichten

Mit erstaunlich wenigen Schritten lässt sich ein funktionstüchtiges Jabber-System aufsetzen. Auf die Beschreibung der Client-Funktionen und das Handling verzichten wir an dieser Stelle. Einerseits gibt es inzwischen zahlreiche Jabber-Clients, andererseits bereitet die Handhabung, Installation und Konfiguration der Clients in aller Regel keine Probleme, da es sich um einfache Programme handelt.

Die aktuelle Version des Jabber-Servers 1.4 wurde in erster Linie für Linux entwickelt. Aber auch auf AIX, IRIX und verschiedenen anderen Unix-Plattformen ist sie erfolgreich getestet worden. Die aktuelle Version finden Sie hier.

Für den Betrieb im Intranet oder einer kleineren Website reicht an Hardware eine typische Pentium-III-Workstation mit 256 oder 512 MByte RAM. Die einzige Datei, die Sie für die Installation eines Basissystems brauchen, ist "jabber-1.4.tar.gz". Gegebenenfalls sind weitere Komponenten erforderlich, beispielsweise das Konferenzmodul, das Jabber User Directory sowie die Transportschnittstelle. Auch diese Komponenten finden Sie im Jabber-Download-Verzeichnis.

Installation

Von Version zu Version wird die Installation des Jabber-Servers zusehends einfacher. Dies ist nicht zuletzt einer Vielzahl freiwilliger Programmierer zu verdanken, die sich in den Dienst des Jabber-Projekts stellen. Für die Installation sind folgende Schritte durchzuführen: Laden Sie sich die aktuelle Jabber-Version herunter und speichern Sie das Paket beispielsweise im tmp-Verzeichnis. Öffnen Sie die Konsole und erzeugen Sie ein Verzeichnis, in das der Jabber-Server installiert werden soll, beispielsweise "/pfad/zu/jabber" oder "/usr/local/jabber". Beachten Sie, dass dazu Root-Rechte erforderlich sind.

Führen Sie anschließend folgende Befehle aus:

mv /tmp/jabber-1.4.tar.gz /pfad/zu/jabber/
cd /pfad/zu/jabber/
gzip -d jabber-1.4.tar.gz
tar -xvf jabber-1.4.tar
cd jabber-1.4/
./configure
make

Damit ist die Installation bereits abgeschlossen. Wenn Sie mit Red-Hat-Linux arbeiten, sollten Sie vor der Installation ein Update von gcc.2.96 installieren. Detailinformationen hierzu finden Sie auf den Support-Seiten von Red Hat.

Konfiguration

Die Konfiguration des Servers gestaltet sich ebenfalls einfach. Sie können auch weniger versierte Anwender durchführen. Die Konfiguration beschränkt sich im Wesentlichen auf Anpassungen der Konfigurationsdatei "jabber.xml". Die Konfigurationsdatei beinhaltet selbst eine sehr detaillierte Beschreibung aller Schalter und Optionen. Für die Systemkonfiguration genügen drei Schritte. Öffnen Sie dazu "jabber.xml" mit einem Editor und führen Sie die folgenden Änderungen durch:

Passen Sie folgende Zeile an:

<host><jabberd:cmdline flag="h">localhost</jabberd:cmdline></host>

Hier tragen Sie an Stelle von localhost den Namen des Host-Rechners ein. Diese Änderung ist nicht erforderlich, wenn Sie den Server auf dem lokalen System zu Testzwecken einsetzen. Soll der Server allerdings mit der Außenwelt, also auch anderen Jabber-Servern kommunizieren, so ist der vollständige Domain-Name einzutragen.

Im zweiten Schritt kommentieren Sie folgende Zeile aus:

<Update><jabberd:cmdline flag="h">localhost</jabberd:cmdline></update>

Die Einstellungen sorgen dafür, dass der Server automatisch das Benutzerverzeichnis aktualisiert, wenn eine vCard editiert wird. Das wiederum setzt die Einrichtung des Jabber-User-Verzeichnisses voraus. Wenn Sie die Einstellung beibehalten wollen, ersetzen Sie localhost durch den Host-Namen Ihres Rechners.

Im dritten Schritt können Sie optional den Willkommenstext ändern:

<welcome/>) und die Admin-Einträge (<admin/>)

Da Jabber die User-Roster im Dateisystem speichert, genauer in einem Jabber-Unterverzeichnis "jabber-1.4/spool/unterverzeichnis/", muss ein Verzeichnis mit der Bezeichnung des Host-Namens erzeugt und mit Schreibrechten versehen werden. Lautet der Host-Name beispielsweise "jabber.tecChannel.de", so erstellen Sie das Verzeichnis "jabber-1.4/spool/jabber.tecChannel.de/". In dieses dürfen die Jabber-User dann schreiben.

Der Administrator des Jabber-Servers sollte Root sein. Die Einstellungen können jedoch gegebenenfalls verändert werden:

chown -R username.usergruppe. /pfad/zu/jabber/

Starten des Servers

Damit ist die Basiskonfiguration des Jabber-Servers abgeschlossen, und Sie können den Server mit folgendem Befehl starten:

./jabberd/jabberd -h hostname

Um den Server im Debug-Modus zu aktivieren, verwenden Sie folgende Zeile:

./jabberd/jabberd -D -h hostname

Ein Protokoll der Serveraktivitäten erhalten Sie mit tail -f error.log

Mit einem beliebigen Jabber-Client können Sie nun eine Verbindung zum Jabber-Server aufbauen. Entsprechende Clients finden Sie hier.

Jabber aufgebohrt

Bereits in einer Grundkonfiguration genügt Jabber den Anforderungen kleiner Abteilungen und/oder Unternehmen. So richtig interessant wird es aber erst, wenn man zusätzliche Dienste hinzufügt. Gerade die Version 1.4 zeigt, was Erweiterbarkeit betrifft, flexibel. Neben Konferenzfunktionen (chat) und dem Jabber User Directory können Sie den Jabber-Server durch die Transportschnittstellen erweitern.

Doch vorab eine wichtige Anmerkung: Damit die neu eingerichteten Dienste der an sie gestellten Aufgabe gerecht werden, müssen die eingerichteten Sub-Domains über einen vollständig qualifizierenden Domain-Namen verfügen. Zum Beispiel "aim.tecChannel.de" für die AOL-Schnittstelle.

Installation des Konferenzmoduls

Das Konferenzmodul finden Sie ebenfalls im Download-Bereich der Jabber-Website. Bevor Sie sich an die Installation und Konfiguration machen, sollten Sie - wie bereits erwähnt - die zugehörige Sub-Domain (zum Beispiel "conference.tecChannel.de") im DNS registrieren. Dazu ist die lokale DNS-Tabelle zu aktualisieren. Wenn Sie mit einem dynamischen DNS-System arbeiten, können Sie auch einen Platzhalter verwenden, damit eine Auflösung der Sub-Domains erfolgt.

Zur Installation des Konferenzmoduls laden Sie zunächst die Datei "conference-0.4.tar.gz" herunter und legen diese im Jabber-Verzeichnis ab. Anschließend führen Sie folgende Befehle aus:

gzip -d conference-0.4.tar.gz
tar -xvf conference-0.4.tar
cd conference-0.4/
make

Jabber-Chat-Raum einrichten

Damit ist das Konferenzmodul installiert, und es folgt die Konfiguration. Dazu öffnen Sie die Datei "jabber.xml" und nehmen verschiedene Anpassungen vor. Mit dieser ersten Erweiterung lernen Sie ein Muster kennen, das bei allen anderen Erweiterungen ebenfalls zur Verwendung kommt. Zunächst müssen Sie den Abschnitt für die Konferenz-Services in der <browse/>-Sektion von "jabber.xml" finden. Diese Anpassungen sind erforderlich, damit User-Clients vom Server ablesen können, dass dieser Server Chat-Funktionen bereitstellt. Fügen Sie dazu in der <browse/>-Sektion folgende Zeile hinzu:

<conference type="private" jid="conference.localhost" name="Conferencing"/>

Auch hier wird wieder localhost durch den Host-Namen des Servers ersetzt. Im nächsten Schritt erfolgt die Definition des neuen Dienstes. Dazu fügt man "jabber.xml" das Service-Element hinzu. Die hierfür notwendigen Erweiterungen zeigt nachstehendes Beispiel:

<service id="conference.localhost">
<load><conference>./conference-0.4/conference.so</conference></load>
<conference xmlns="jabber:config:conference">
<vCard>
<FN>Konferenz Service</FN>
<DESC>Bei diesem Dienst handelt es sich um einen privaten Chat-Raum.</DESC>
<URL>http://localhost/</URL>
</vCard>
<history>20</history>
<notice>
<join> ist eingetreten</join>
<leave> hat verlassen</leave>
<rename> bekannt als </rename>
</notice>
</conference>
</service>

Stellt man nun mit einem Client eine Verbindung zum Jabber-Server her, so sollte Client-seitig Conferencing als angebotener Dienst erscheinen. Beispiele für diese und alle folgenden Erweiterungen/Anpassungen der Jabber-Konfigurationsdatei finden Sie hier.

Jabber User Directory (JUD)

Damit ein User andere aufstöbern kann, müssen die registrierten Benutzer an einer Stelle zentral verwaltet werden. Das ist Aufgabe des Jabber User Directory, kurz JUD. Die zentrale Instanz des Verzeichnisses wird auf jabber.org betrieben. Die dort registrierten Benutzer können bei Internet-Verbindungen kontaktiert werden. Natürlich macht es auch in Unternehmen Sinn, Benutzer zentral zu verwalten. Das für die Installation erforderliche Paket "jud-0.4.tar.gz" liegt im Jabber-Download-Bereich. Um es zu entpacken und die Installation durchzuführen, geben Sie folgende Befehle ein:

gzip -d jud-0.4.tar.gz
tar -xvf jud-0.4.tar
cd jud-0.4/
make

Für die Konfiguration sind entsprechend wieder Anpassungen und Erweiterungen von "jabber.xml" erforderlich. Fügen Sie dazu in der <browse/>-Sektion folgende Zeilen hinzu. Vergessen Sie dabei nicht, localhost durch den Domain-Namen zu ersetzen:

<service type="jud" jid="jud.localhost" name="localhost User Directory">
<ns>jabber:iq:search</ns>
<ns>jabber:iq:register</ns>
</service>

Nun folgt die Service-Definition durch das Hinzufügen eines weiteren Service-Elements:

<service id="jud">
<host>jud.localhost</host>
<load><jud>./jud-0.4/jud.so</jud></load>
<jud xmlns="jabber:config:jud">
<vCard>
<FN> Benutzerverzeichnis auf localhost </FN>
<DESC> Dieser Dienst stellt ein einfaches Benutzerverzeichnis bereit.</DESC>
<URL>http://localhost/</URL>
</vCard>
</jud>
</service>

Starten Sie anschließend den Jabber-Server neu und fügen Sie mit Hilfe eines Clients einen neuen User hinzu.

Außenanbindung

Wie bereits erwähnt wird die Außenanbindung an gängige Instant-Messaging-Systeme über die so genannten Transportschnittstellen realisiert. Die Installation und Konfiguration dieser Schnittstelle gestaltet sich ebenfalls einfach. Sie läuft nach dem bisherigen Schema ab:

Download der entsprechenden Installationsdateien sowie Installation und Bearbeiten von "jabber.xml". Wir beschränken uns an dieser Stelle auf die Installation und Konfiguration der AIM-Transportschnittstelle. Die erforderlichen Erweiterungen für die Transportschnittstellen für ICQ, MSN und Yahoo finden Sie hier. Bei der Inbetriebnahme der AIM-Schnittstelle kann es - im Unterschied zu anderen Schnittstellen - jedoch gelegentlich zu Problemen kommen. Der Grund: AOL nimmt ab und an Änderungen am AIM-Protokoll vor, um die Verbindungsaufnahme von Seiten eines Jabber-Servers zu unterbinden. Für die Installation der AIM-Schnittstelle ziehen Sie sich das Paket "aim-transport-0.9.5.tar.gz" und führen folgende Schritte aus:

gzip -d aim-transport-0.9.5.tar.gz
tar -xvf aim-transport-0.9.5.tar
cd aim-transport-0.9.5/
./configure --with-jabberd=/pfad/zum/jabberd/verzeichnis

Konfiguration der AIM-Schnittstelle

Die Konfiguration erfolgt ebenfalls in der Datei "jabber.xml". Einerseits muss die <browse/>-Sektion erweitert, andererseits das Service-Element hinzugefügt werden. Fügen Sie im Falle der AIM-Schnittstelle der <browse/>-Sektion folgende Zeilen hinzu:

<service type="aim" jid="aim.localhost" name="AIM Transport">
<ns>jabber:iq:gateway</ns>
<ns>jabber:iq:register</ns>
</service>

Schließlich muss die Dienstdefinition erfolgen, indem Sie das Service-Element in "jabber.xml" ergänzen:

<service id='aim.localhost'>
<aimtrans xmlns='jabber:config:aimtrans'>
<vCard>
<FN>AIM Transport</FN>
<DESC>Bei den AIM-Transportschnittstellen gibt es leider immer wieder Probleme.</DESC>
<URL>http://localhost/</URL>
</vCard>
</aimtrans>
<load>
<aim_transport>./aim-transport-0.9.5/src/aimtrans.so</aim_transport>
</load>
</service>

Nach einem Neustart des Jabber-Server können Sie die AIM-Schnittstelle auf ihre Funktionstüchtigkeit hin überprüfen. Denken Sie dabei auch an die Umbenennung von localhost.

Damit ist die Installation abgeschlossen, und Sie können den Jabber-Server für Ihre Mitarbeiter bereitstellen. Wenn Sie noch andere Dienste wie ICQ, IRC, MSN oder Yahoo integrieren wollen, laden Sie sich einfach die entsprechenden Transportschnittstellen aus dem Jabber-Download-Verzeichnis und verfahren analog zur Integration der AIM-Schnittstelle. (fkh/kpf)