Dernière mise à jour le 21/12/2012

Installer un serveur jabber


Mots clefs: ejabberd, debian, anonyme, http-bind

Récemment, je me suis fait pirater mon compte MSN. Plusieurs mails ont été envoyés à mes contacts en usurpant mon identité. C'est à la portée du premier chalant d'éditer les en-têtes d'un mail pour faire croire que l'on est untel ou untel. Au passage, j'ai appris qu'un individu envoyait aussi des messages sur WLM (Windaube Live Messenger) en se faisant passer pour moi... Là c'était la goutte d'eau qui faisait déborder le vase! Je me suis empressé de fermer mon compte à tout jamais et de supprimer mon abonnement à la passerelle MSN de mon serveur Jabber habituel.
Dans un élan d'énervement, constatant régulièrement les problèmes de certaines passerelles du serveur Jabber auquel je me connecte, j'ai décidé de (re)monter le mien.
J'avais en des temps lointain fait tourné Ejabber avec les passerelles PyMSNt, PyYahoo ... Py je-ne-sais-plus!
Lutix.org faisait même parti de la congrégation Jabberfr et pouvais se targuer de quelques abonnés!



Jabber

Hélas mon serveur avait alors rendu l'âme et, chat échaudé craignant l'eau froide, je me suis promis de ne plus jamais faire des promesses que je ne pourrais plus tenir, à savoir proposer un service de serveur Jabber...
Mais les temps ont changé, je suis à présent l'heureux propriétaire d'une EeboxB202 (cf ICI) et puisque j'utilise ma boite comme serveur mail, web, etc...pourquoi ne pas retenter l'expérience du serveur Jabber.
Je suis donc reparti dans une install de Ejabberd sur ma Debian Lenny.

Configuration générale:
#apt-get install ejabberd
Et hop, j'installe la version 2.0.1-6.
La première chose à faire et de configurer son beau serveur. Le fichier important est /etc/ejabberd/ejabberd.cfg.
Rien de bien violent, les parties importantes sont:
%% Admin user
{acl, admin, {user, "admin", "lutix.org"}}.

%% Hostname
{hosts, ["lutix.org","localhost"]}.
Vous pouvez remplacer lutix.org par votre nom de domaine. Il doit être complètement qualifié.
Ensuite vous pouvez vous rendre à la partie:
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
{max_stanza_size, 65536},
starttls, {certfile, "/etc/ejabberd/startssl_ssl.pem"}
]},
et bien noter le port! Il s'agit du port d'entrée principal de votre serveur.
Pensez à bien configurer vos iptables pour laisser rentrer les requetes sur ce port:
iptables -A INPUT -p TCP --dport 5222 -m state --state NEW -j ACCEPT
Pour la conversation entre serveur on s'attardera plutôt sur cette partie:
{5269, ejabberd_s2s_in, [
{shaper, s2s_shaper},
{max_stanza_size, 131072}
]},
Pareil pour iptables...
Relancez la machine, /etc/init.d/ejabberd restart et vous avez un serveur Jabber tout fonctionnel. Vous pouvez vous y connecter et dire bonjour à vos contacts préférés.
Vous pouvez même dialoguer avec vos copains sur Gtalk puisque qu'il ne s'agit que d'un implémentation du protocole Jabber.

Mode anonyme

Dernièrement j'ai installé Jappix mini sur le site pour ouvrir un espace de discussion.
Pour cela 2 choses necessaires: configurer un hote acceptant les logins anonymes et ensuite configurer le http-bind de ejabberd.
On doit demander à ejabberd de répondre à un autre nom d'hôte que l'on va nommer anonyme.lutix.org:
{hosts, ["lutix.org","localhost","anonyme.lutix.org"]}.
Ensuite à la section AUTHENTICATION du fichier de configuration, rajoutons:
{host_config, "anonyme.lutix.org", [{auth_method, [internal, anonymous]},{anonymous_protocol, both}]}.
Il est donc a présent possible de se logguer sur le serveur en mode anonyme, c'est à dire sans y détenir de compte. La plupart des clients AJAX de la planète open-source!

Http-bind

En guise d'introduction lisez ce petit billet de blog.
Ce site explique un peu mieux, mais en anglais.
En fait, le principe est d'encapsuler du XMPP dans du HTTP avec des requêtes contenant une adresse de type: http://lutix.org:5280/http-bind/.
D'ailleurs en recopiant cette adresse dans Firefox, et votre serveur devrait vous répondre:
This web page is only informative. To use HTTP-Bind you need a Jabber/XMPP client that supports it.
Normalement tout client web ajax est capable de communiquer avec votre serveur à présent!
...
Bon en fait pas tout à fait dans tous les cas.
Le firewall de votre entreprise refusera toute connexion sortante vers un port 5280, on ne peut pas trop lui en vouloir. Mais pas de quoi s'affoler, on va utiliser le mode proxy d'apache qui se chargera d'une part de réécrire les adresses http://lutix.org/http-bind/ en http://lutix.org:5280/http-bind/ et en plus de faire la requête à votre place (de façon transparente) et de vous la rendre comme si vous n'aviez qu'un seul interlocuteur!
De plus rassurez vous les clients AJAX du monde libre sont configurables pour passer des requêtes aux adresses du type: http://lutix.org/http-bind/.

Décidément, dès qu'on laisse la porte ouverte à du http, on y fait passer n'importe quoi ;)!



[LutiX.org écrit sous Vim et herbergé @Home sur une Debian Squeeze par Apache et PHP5]