La messagerie instantanée Jabber

La messagerie instantanée  – le « chat » – est un des nombreux outils à la disposition des entreprises pour leurs communications internes, y compris entre sites distants. On ne peut que déplorer que le plus souvent, la messagerie classique (mails) soit l’outil essentiellement, sinon exclusivement utilisé, ce qui finit par charger considérablement le serveur de messagerie. Et l’emploi de ce même outil, aussi bien pour des messages professionnels que pour d’autres messages, plus personnels, finit par mélanger les vocabulaires et les tournures de phrases employés. C’est souvent au détriment de ce qui devrait demeurer une expression professionnelle, et notamment polie à l’égard des collègues, des collaborateurs, et bien sûr des supérieurs. De plus, l’encombrement du serveur de messagerie par des quantités considérables de pièces jointes ne permet aucun classement fonctionnel de ces pièces, ni aucune gestion de leurs versions.
Un usage raisonné de plusieurs outils de communication, autres que le seul e-mail, permettrait donc une meilleure adéquation des outils aux différents types de communications nécessaires au sein d’une entreprise : messagerie instantanée, audio et vidéo conférences sur ip, recours à des portails internes du type SharePoint ou autres.

En matière de messageries instantanées, plusieurs réseaux sont proposés au public, par exemple Skype, Google Talk, FaceTime, sans oublier les pionniers en la matière tels que IRC ou ICQ. Nombre de ces systèmes demeurent techniquement fermés par leurs propriétaires, même en cas d’offres gratuites. Le seul protocole à avoir été ouvertement normalisé par l’Internet Engineering Task Force est le protocole XMPP, plus connu sous le nom de Jabber. Par rapport à ses concurrents, Jabber présente certaines particularités, notamment :
- à côté de son emploi dans certaines applications plus ou moins fermées (iChat d’Apple, Google Talk, Facebook), Jabber est l’objet d’une importante offre de type Open Source, aussi bien pour les logiciels clients que pour les serveurs, et ce sur les principales plates-formes informatiques actuelles (Windows, Mac OS X, Linux).
- ce protocole permet le fonctionnement d’un réseau complètement décentralisé, sans nécessité d’ouvrir des comptes auprès d’un point central. On peut fort bien avoir un compte sur son propre serveur Jabber, et pouvoir communiquer avec quelqu’un n’ayant qu’un compte sur le sien : les serveurs Jabber entrent alors en communication et permettent le « chat ».
Ce système ressemble donc à l’organisation des serveurs SMTP pour le transfert des mails, et les « adresses Jabber » (les Jabber ID, ou JID) obéissent à la même syntaxe : utilisateur@serveur_jabber.fr (ou une autre extension, peu importe).

Jabber étant à son origine un pur système de « chat », l’absence d’audio et de vidéo lui a longtemps été reprochée et n’a pas aidé à développer son utilisation face à MSN ou Yahoo! Messenger. A partir de 2005-2006, ces possibilités furent ajoutées au protocole XMPP par l’adoption de l’extension « Jingle ». Google a aussitôt incorporé ces possibilités dans son logiciel Google Talk, qui est un système Jabber, mais verrouillé pour n’utiliser que les serveurs Google. Toutefois Google a aussi mis ce code informatique à la disposition de la communauté Jabber, et plusieurs équipes de développement de logiciels clients travaillent depuis lors à incorporer l’audio et la vidéo dans leurs produits. A la date de rédaction de ce billet, des intégrations réussies se trouvent dans les logiciels clients Empathy (présent dans les distributions Linux Ubuntu), Gajim (disponible pour Linux), ou Jitsi (Windows, Linux et Mac OSX).

Il est aisé d’installer un serveur Jabber en entreprise. Parmi les serveurs Jabber les plus connus, on peut citer deux serveurs Open Source très fiables :
- Ejabberd, utilisable aussi en cluster, et qui présente l’originalité rare d’être écrit en Erlang,
- Openfire, écrit en Java, et pour lequel on trouve une offre diversifiée de plugins.
On a le choix entre de nombreux logiciels clients :
- des logiciels clients multi-protocoles tels que Pidgin, ippi, Adium (sous Mac OS X), Empathy (sous Linux avec GNOME), Kopete (sous Linux avec KDE), Jitsi (sous Linux, Windows, Mac OSX),
- des logiciels clients pour Jabber exclusivement, tels que Psi, Coccinella, ou Spark.

Un des atouts du protocole XMPP est son aptitude à franchir les dispositifs de translations d’adresses ip (les « NAT »). Il est donc facile d’installer un serveur Jabber sur le réseau interne d’une entreprise et de communiquer grâce à lui avec des interlocuteurs à l’extérieur. Le raisonnement en termes de DMZ est le même que pour un serveur http ouvert à l’extérieur. Le dispositif NAT/Firewall devra ici permettre à ce serveur Jabber d’établir des connexions sortantes et de recevoir des connexions entrantes avec d’autres serveurs Jabber, sur le port 5269.
Selon l’organisation retenue pour le réseau interne informatique, les logiciels clients internes pourront se connecter à ce serveur Jabber, soit par une route interne, soit en « passant par internet », ce que devra alors permettre le dispositif NAT/Firewall (port 5222). Par ailleurs, des connexions sortantes de logiciels clients devront être autorisées sur le port 8010 pour les transferts de fichiers.

Si on veut installer un serveur Jabber pour des communications internes seulement, les résolutions de noms nécessaires dépendent du nom choisi pour ce serveur Jabber.
Pour un serveur correspondant à des JID de la forme : utilisateur@nom_hôte.nom_domaine.fr, le serveur DNS utilisé pour les résolutions de noms doit posséder un enregistrement de type A (ou AAAA si ipv6) pour ce « nom_hôte ».
Pour un serveur correspondant à des JID de la forme : utilisateur@nom_domaine.fr, le serveur DNS utilisé pour les résolutions de nom doit posséder :
- un enregistrement SRV : « _xmpp-client._tcp    TTL    IN     SRV    Priorité    Poids    5222     nom_domaine.fr. » (syntaxe BIND) correspondant aux connexions Jabber client-serveur,
- un enregistrement A (ou AAAA si ipv6) pour indiquer l’adresse du serveur Jabber : « nom_domaine.fr.    IN    A    adresse ip ».
La RFC 2782 détaille le contenu d’un enregistrement SRV, notamment les concepts de priorité et de poids.
Si ce serveur Jabber doit être appelé par un autre serveur Jabber utilisant ce même DNS, il faut alors ajouter un autre enregistrement SRV : « _xmpp-server._tcp    TTL    IN    SRV    Priorité    Poids    5269    nom_domaine.fr. ».

A noter que :
- pour les connexions client-serveur, l’ancienne syntaxe _jabber._tcp est obsolète depuis quelques années, mais peut être conservée en cas d’utilisation d’anciennes versions de logiciels,
- la version 0.14 de Psi, dernière version disponible à la date de rédaction de ce billet, ne fonctionne pas avec les enregistrements SRV.

Par ailleurs, on peut toujours se connecter à un serveur Jabber interne :
- en renseignant les fichiers de type « host » des ordinateurs clients,
- ou en indiquant l’adresse ip du serveur Jabber lors de la configuration des comptes Jabber, sur les logiciels clients.

Un grand nombre de bibliothèques XMPP sont disponibles pour les principaux environnements de développement : C, C++, Objective C, .NET, Java, Perl, PHP, Python, Ruby, etc.
On peut ainsi ajouter des notifications par messagerie instantanée à de nombreux programmes, par exemple dans le domaine de la surveillance du réseau ou de certaines machines.