~rom1v/blog { un blog libre }

Héberger un serveur Jabber simplement (prosody)

jabber

J’ai enfin décidé d’héberger mon propre serveur Jabber, pour plusieurs raisons :

  • la liste de mes contacts est mieux sur mon serveur que sur un autre ;
  • le serveur que j’utilisais (jabber.fr) rencontre parfois quelques difficultés ;
  • mon adresse Jabber sera ainsi la même que mon adresse mail (rom suivi de @rom1v.com).

Et c’est simple !

Installation et configuration

Tout d’abord, installer le paquet prosody :

apt-get install prosody

Puis ajouter à la fin du fichier /etc/prosody/prosody.cfg.lua :

Host "nom.de.domaine"

Pour moi :

Host "rom1v.com"

Créer un utilisateur en ligne de commande et choisir un mot de passe :

prosodyctl adduser utilisateur@nom.de.domaine

Certificat

Un certificat TLS/SSL est créé par défaut, mais les champs sont renseignés avec des valeurs non pertinentes (localhost au lieu de nom.de.domaine par exemple). Il est donc préférable d’en générer un nouveau.

Dans le répertoire /etc/prosody/certs, exécuter :

openssl req -new -x509 -nodes -out nom.de.domaine.cert -keyout \
    nom.de.domaine.key -days 1000

Renseigner les champs demandés . » pour laisser un champ vide). En particulier, indiquer dans Common Name le nom de domaine pour lequel ce certificat sera utilisé.

Remplacer le certificat dans le fichier de configuration :

ssl = {
        key = "/etc/prosody/certs/nom.de.domaine.key";
        certificate = "/etc/prosody/certs/nom.de.domaine.cert";
}

Empreinte

Comme c’est un certificat auto-signé, les clients Jabber ne lui feront pas confiance : ils demanderont une confirmation, en présentant son empreinte. Il faudra alors vérifier que le certificat présenté est bien le bon, c’est-à-dire que l’empreinte est la même.

Pour la connaître :

openssl x509 -fingerprint -noout -in nom.de.domaine.cert

Par exemple :

$ openssl x509 -fingerprint -noout -in rom1v.com.cert
SHA1 Fingerprint=C3:6D:9B:65:06:55:C4:84:B4:A5:8D:4B:12:68:2F:08:71:7E:AC:DD

Ports

Les ports TCP 5222 et 5269 doivent être ouverts.

Démarrer

Il ne reste plus qu’à démarrer le service.

service prosody start

Clients

Il est maintenant possible de se connecter en utilisant le nom d’utilisateur et le mot de passe créés :

empathy

Backup

Les données du serveur sont stockées dans /var/lib/prosody. Il est donc important de ne pas oublier ce répertoire dans le processus de sauvegarde.

Merci à Cyrille Borne et nicolargo.

Commentaires

Mario

C’est très intéressant! Alors ensuite il faut payer son domaine… Merci pour le tuto! J’ai partagé ta page sur Diaspora*

Quand tu dis “la liste de mes contacts est mieux sur mon serveur que sur un autre”, tu sous-entend juste les contacts de ton compte Jabber ou tu as un système exploitable par d’autres applications (style un répertoire CardDAV) ?

®om

@mart-e Je parle juste des contacts de mon compte Jabber.

®om

Petit complément : j’utilise Beem comme client sur mon téléphone (Android), et je ne parvenais pas à me connecter à mon serveur.

En fait, Beem semble ne pas fonctionner si le nom de domaine gère IPv6. En effet, pour rom1v.com, j’ai à la fois une entrée A (IPv4) et une entrée AAAA (IPv6).

Pour le faire fonctionner, j’ai créé un sous-domaine ipv4.rom1v.com qui lui ne contient que l’entrée A.

Ainsi, dans Beem, en renseignant mon compte Jabber normalement (le JID en @rom1v.com), et en activant dans Options avancées la case Options spécifiques, je peux forcer le serveur à ipv4.rom1v.com. Et ça fonctionne…

Du coup tu change d’adresse Jabber ? tu es obligé de prévenir tes contacts

totopipo

@bartounet :

Mécaniquement, c’est indispensable. Personne ne devrait avoir accès au calepin privé de chacun de ses contacts. :o)

tyler durden

Bonjour,

Intéressant. Merci.

Mais dans quel état est le serveur après ces manipulations, au niveau sécurité ?

Toute personne passant par là peut elle créer un compte sur le serveur ? Si oui, comment l’interdire ? Si non, comment l’autoriser et avec quelle(s) restrictions ?

Cordialement.

®om

Suite à ce commentaire :

En fait, ça ne vient pas (que) de Beem, mais de Prosody, et de luasocket qui ne gère pas l’IPv6.

Du coup, la meilleure solution est d’ajouter un sous-domaine (im.rom1v.com) qui ne contient qu’une entrée A (IPv4), et d’ajouter deux entrées SRV de cette manière :

  • _xmpp-client._tcp ayant pour valeur 0 0 im.rom1v.com
  • _xmpp-server._tcp ayant pour valeur 0 0 im.rom1v.com

(plus d’infos ici)

De cette manière, il suffit de configurer Beem (ou n’importe quel autre client) normalement sans options spécifiques.

®om

@tyler durden

Toute personne passant par là peut elle créer un compte sur le serveur ? Si oui, comment l’interdire ? Si non, comment l’autoriser et avec quelle(s) restrictions ?

Par défaut, personne ne peut créer de compte sur le serveur. Les options se configurent dans /etc/prosody/prosody.cfg.lua.

Concernant la création de comptes, ce fichier contient :

allow_registration = false;

Je ne sais pas comment appliquer des restrictions (je n’ai pas besoin de cette option). Tu peux au moins activer (décommenter) un module qui s’appelle watchregistrations pour recevoir une alerte quand quelqu’un s’inscrit.

du coup on doit mettre à jour ton contact ? ta nouvelle adresse ?

®om

@bartounet

Je n’avais pas répondu à ton premier commentaire, car je t’avais ajouté en contact avec ma nouvelle adresse (ce qui répondait implicitement à la question). Mais tu ne dois plus avoir la même adresse Jabber que celle que j’avais de toi (en @im.apinc.org)…

La réponse est donc oui, il faut mettre à jour mon contact avec ma nouvelle adresse ;-)

tu as vu ma demande de contact ?

®om

@bartounet

Je viens de la voir.

Empathy devrait cacher encore plus les notifications, afin d’être bien sûr que l’utilisateur ne la voit pas. Pour voir ta demande de contact, aucune notification visible dans gnome-shell, aucune nouvelle fenêtre ouverte, simplement dans le roster. Pour la voir, il faut activer l’affichage des contacts déconnectés, pour voir un contact correspondant à ton compte qui s’est ajouté, avec une icône clignotante indiquant qu’il faut l’accepter… Superbe notification !

Excellent ! Merci ®om pour ce post !

Tyler Durden

Bonsoir,

Merci pour vos commentaires supplémentaires.

Très instructif.

J’avais un peu abandonné l’idée d’avoir mon serveur jabber sur mon serveur dédié à la lecture des docs de ejabberd ; jabberd ….cela me semblait plus complexe. Une dernière question si vous le permettez , mes contacts n’ont pas besoin de s’inscrire sur “mon” serveur pour continuer à communiquer avec moi inscrit sur “mon” serveur également ?

Cordialement.

®om

@Tyler Durden

Une dernière question si vous le permettez , mes contacts n’ont pas besoin de s’inscrire sur « mon » serveur pour continuer à communiquer avec moi inscrit sur « mon » serveur également ?

Non, bien sûr. Chaque utilisateur n’est inscrit que sur le serveur qu’il a choisi, et peut communiquer avec tous les autres.

C’est le même principe que pour le mail : par exemple un utilisateur inscrit sur GMail et un autre inscrit sur Yahoo! (ou sur son serveur perso) peuvent communiquer. C’est la raison pour laquelle l’adresse du serveur fait partie de l’adresse mail (@gmail.com, @yahoo.fr, @rom1v.com…) et de l’adresse Jabber.

Tyler Durden

bonsoir,

Merci pour tout ;)

Cordialement.

ça s’installe très bien comme tu l’explique. Et plus sensationnel : ça marche ! Testé donc sur un serveur sous Debian Squeeze. Par contre j’ai du décocher la ligne “Chiffrement requis” de mon client Empathy. J’ai du merder dans le chiffrement. Any idea ?

En fait c’est merci JB Favre (http://www.jbfavre.org/) qui m’avait soufflé le logiciel pour le faire à l’époque où j’étais sous identi.ca. Je rajoute juste que Nicolargo est une grosse faignasse qui a pompé mon tuto pour y mettre 4 écrans de plus :D

Hello

J’essaye moi aussi de m’installer un serveur jabber. Une question. Y a t-il un moyen pour que ce soit encore les comptes système qui permettent de s’authentifier ? (le mot de passe est le même : log sur le serveur, courriel, blog, jabber…)

®om

@22decembre

Aucune idée…

Résolu… Je suis sur Jabberd2 !

Jean-Baptiste Carré

Hello Romain,

Merci pour ce tuto clair et précis !

Par contre, comment fais-tu pour regler la durée du certificat ? Dans mon cas, en suivant ton tuto, j’obtiens des certificats valables 1 mois. C’est le cas chez toi aussi ?

Merci pour ton aide :-)

®om

C’est l’option -days. Merci, je rajoute l’info dans le billet.

Effectivement, j’avais un certificat d’un mois également (mais comme je l’avais accepté, ça fonctionnait quand même).

mij

Est-il possible de remplacer le nom de domaine par une ip fix, en theorie ca devrait pas poser de probleme, mais je ne vois pas comment. Quand je met simplement une ip dans le fichier config ca ne marche pas, à moins que j’ai fais une erreur autre part…

Merci pour l’article.

Les commentaires sont fermés.