Concrétisons Nos Idées

JAH-7 – De l'installation et de la configuration tortueuse d'un serveur jabber

Rédigé par Samaël - -

Journal de bord du capitaine :
Date : 20 janvier 2010
Lieu : Perdu dans le cyber espace

J'avais à présent un serveur auquel je pouvais accéder en SSH, mais pour l'instant la commande de connexion ressemblait à peu près à ça : ssh machin@40.666.666.7 on a déjà fait plus sexe ! Et pour cause, je n'avais pas encore acquis de nom de domaine. À quoi sert un nom de domaine ? Et bien c'est tout simplement une suite de caractères qu'on achète afin de lui associer une adresse IP de son choix, pour que lorsque quelqu'un tape ce nom de domaine, il soit redirigé vers le serveur dont on a spécifié l'adresse IP. Wikipédia regorge d'informations sur la résolution des noms de domaines, les registrars et comment marche un serveur de nom. Au bout de quelques heures de lecture, j'avais compris qu'une fois un nom de domaine acquis auprès d'un registrar, je pouvais configurer leur serveur de nom (DNS) afin que les requêtes de résolution (trouver l'adresse IP correspondante à un nom de domaine) concernant mon nom de domaine soit redirigées vers mon serveur.

Après une rapide comparaison des services compris dans l'achat d'un nom de domaine sur différents registrars, je me suis décidé à acheter mon nom de domaine chez Gandi [1]. La procédure est on ne peut plus simple et rapide. Une fois mon nom de domaine acheté et activé, j'ai eu accès au fichier de gestion de zone de mon domaine sur le DNS de Gandi, ce qui m'a permis de rediriger mon nom de domaine sur l'adresse IP de mon modem (par défaut mon nom de domaine était redirigé sur une de leur page web). La conséquence directement testable fut la nette amélioration de ma commande de connexion distante : "ssh machin@gehenne.net" ça a quand même plus de gueule qu'une suite anonyme de chiffres !

Le fichier de gestion de zone dont je parlais précédemment permet de gérer les résolutions associées à son nom de domaine, ainsi que le service correspondant. En d'autre termes, c'est ce fichier que je dois modifier pour pouvoir recevoir des courriels adressés à mon nom de domaine, définir un sous-domaine (blog.gehenne.net par exemple) ou encore, indiquer sur quels ports sont disponibles quels services [2]. Souhaitant avidement devenir mon propre fournisseur de messagerie instantanée, j'ai donc commencé par définir les ports nécessaires à un serveur XMPP.

Il existe plusieurs logiciels libres pouvant faire office de serveur jabber, plus ou moins facilement configurable, chacun avec ses avantages et ses inconvénients [3]. Suivant les conseils du wiki sur l'auto-hébergement auquel j'ai déjà fais allusion dans ce journal, j'ai opté pour ejabberd et un mode d'authentification basé sur les comptes des utilisateurs du système, ainsi je n'avais pas de base d'utilisateurs supplémentaire à gérer.

Une fois le paquet installé, j'ai édité le fichier de configuration afin d'ajouter une ligne concernant les noms d'hôtes à gérer (la partie après le @ des jabberIDs) et j'ai défini le compte utilisateur système qui serait administrateur du serveur jabber sans oublier de décommenter la ligne concernant l'authentification par PAM. J'ai alors redémarré le serveur jabber plein d'espoir ... ce fût un échec : le serveur indiquait des erreurs au lancement et refusait donc de démarrer.

Ejabberd est écrit en erlang et "d'après wikipédia" ce langage à, entre autre, pour défaut de produire des messages d'erreurs particulièrement inutile à la résolution d'un problème. Je confirme cette affirmation ! Je ne détaillerai pas dans ce journal toutes mes tentatives, toutes plus farfelues les unes que les autres, pour arriver à faire marcher ce serveur. Au final mes erreurs n'était pourtant pas si dramatiques : oublis de certains points à la fin des lignes du fichiers de configuration, conflits entre certaines lignes qui définissaient plusieurs fois des choses différentes et non-cohérence entre certaines lignes que j'avais décommentées et pas les autres. Une fois encore la documentation me fût d'un très grand secours. Après un nombre assez impressionnant de vaines tentatives et d'essais infructueux, causés principalement par mon incompétence et surtout ma précipitation (faites ce que je dis et pas ce que je fais !), je réussis enfin à lancer mon serveur et à s'y faire connecter mon client de messagerie habituel : pidgin.

Mais mon triomphe fût de courte durée car au bout de quelques minutes mon client perdait la connexion car le serveur ne répondait soit disant plus au ping. Passablement fatigué suite à mes premiers déboires et ayant eu l'impression de devoir "bricoler" pour faire marcher mon serveur, j'ai décidé à de tout reprendre à zéro.

Les distributions Debian sont connues pour leur stabilité mais elles font aussi souvent l'objet de railleries comme quoi elles ne seraient pas à jour. En réalité cette affirmation est due au fait que pour raison de stabilité les dernières mises à jour des logiciels ne sont pas disponibles par défaut, il faut activer les dépôts backports. Ayant peur que mon échec à la mise en place de mon serveur jabber soit dû à un bug, j'ai alors décidé d'activer les dépôts backports, de mettre à jour ma distribution (y compris le noyau) et d'installer une version plus récente du paquet ejabberd.

Essayant d'apprendre de mes erreurs, je décide cette fois de faire les choses une à une. Je commence donc par vérifier que, sans modifier le fichier de configuration, ejabberd se lance correctement. Une fois rassuré, je modifie étape par étape le fichier de configuration en vérifiant bien à chaque fois que le serveur peut démarrer sans problème. Définition des noms d'hôtes à gérer puis compte administrateur et enfin authentification par PAM, tout fonctionne correctement. Arrive le moment où je configure le module permettant le chat multi-utilisateurs, le serveur démarre correctement, je me connecte et m'authentifie sans problème puis au bout de quelques minutes mon client perd la connexion.

C'est en étudiant les logs du démon que le problème se révéla à mes yeux. En effet, en observant les logs je pouvais voir des tentatives de connexion et de création de salons mélangeant mes noms de comptes, mes noms de domaines et de ressources ainsi que les noms des salons que j'essayais de créer, concrètement : je pouvais voir, entre autre, une tentative de création de salon avec pour nom de salon mon identifiant. Le problème venait du fait que j'avais défini comme domaine hôte pour mes salons le même nom que pour mes comptes jabber, autrement dit, exemple@gehenne.net pouvait correspondre à la fois au compte jabber exemple sur le serveur gehenne.net mais aussi au salon homonyme, pas étonnant que ejabberd soit perdu ! En changeant le nom d'hôte des salons en un chat.gehenne.net (et en ajoutant la ligne nécessaire sur le fichier de zone) tout rentra dans l'ordre ! J'avais enfin mon serveur de messagerie instantanée personnel qui, de surcroît, pouvait héberger des salons de discussions !

Conclusions :

  • Faire les modifications une à une afin d'identifier rapidement d'où vient un éventuel problème.
  • Ne jamais hésiter à regarder les logs, ils contiennent souvent la solution à un problème même s'ils ne sont pas toujours explicites au premier coup d'œil.
  • On ne le dira jamais assez : il faut lire la documentation !

Maintenant que je pouvais dialoguer avec mes amis, il convenait de s'intéresser à la sécurisation de ces conversations et donc d'installer de quoi pouvoir consulter mon serveur de manière sécurisée.

Prochaine entrée dans le journal : De la sécurisation par certificat SSL

Notes

[1] Une bonne philosophie, de bons services utilisables via une interface utilisateur claire : 5 ans après je recommande toujours Gandi.

[2] Pour des explications plus claires sur ce qu'il est possible de faire grâce au DNS et sur comment le faire proprement je vous renvoie à la conférence de Stéphane Bortzmeyer : DNS tirée de l'excellent cycle de conférences Il était une fois Internet .

[3] "Ce qu'il y a de bien avec les opinions tranchées, c'est que ça relance le débat." Léodagan de Carmélide.

#1 Elessar a dit :

Pour info, pour les exemples, tu peux utiliser les adresses IP dans la plage 192.0.2.0/24 qui a été faite pour ça, plutôt que d'inventer des adresses invalides comme 40.666.666.7.

#2 ikce a dit :

pendant longtemps j'ai utilisé ejabberd, mais suite à des soucis de configuraton et de migrations, j'ai cherché une autre solution.
depuis quelques années je me suis mis à installer prosody, qui fait moins de choses que ejabberd, mais qui le fait mieux, plus simplement, avec moins de moyens et moins de prise de tête.

#3 Makoto a dit :

On dit souvent qu'on « achète » un nom de domaine.
Mais en fait, on loue la réservation et l'utilisation du nom pour l'année !
À ne pas oublier de renouveler, si on ne veut pas voir le nom attribué à quelqu'un d'autre…

#4 Samaël a dit :

@Elessar : A l'époque où j'ai écrit cet article je ne connaissais pas encore les plages d'adresses IP réservées aux exemples tout comme les noms de domaine dédiés et j'ai donc préféré laisser l'article tel quel; mais pour tout ce que j'écris de récent je me sert bien sûr de ces adresses et de ces nom de domaines.
Merci quand même pour le rappel explicite de la plage ça m'évitera de le chercher je ne sais où la prochaine fois que j'en aurais besoin ;-)

@ikce : Au final j'ai surtout galéré pendant cette configuration d'origine, depuis, à part à chaque migration de version de debian, je n'y ai plus touché et j'avoue que je n'ai pas rencontré de problème avec ejabberd.
On dit effectivement beaucoup de bien de prosody tout comme j'entends beaucoup parler de metronome qui semble avoir une bonne dynamique d'intégration de nouvelles fonctionnalités (archivage des messages sur le server etc).

@Makoto : Sur une durée suffisamment longue tout achat s'apparente de toute façon à de la location :-D Néanmoins tu as tout à fait raison de souligner qu'en pratique ce n'est qu'une réservation temporaire, habituellement annuellement renouvelable.
Je pense d'ailleurs que la gestion des renouvellements des noms de domaines est un des points sur lesquels les registrar se différencient, dans des cas d'oublis ou de tentative de captation rapide par un tiers à l'expiration de la réservation.

Les commentaires sont fermés.