Prosody sur un serveur FreeBSD
==============================

Date: 2011-07-09 17:11
Author: jdn06
Category: Auto-hébergement
Tags: FreeBSD, Jabber, Prosody

Prosody est un serveur Jabber léger  écrit en Lua. Sa compilation par
les ports est  très facile. La configuration m’a demandé  un peu plus
d’effort  et les  informations étant  assez disséminées  (même si  le
site  de Prosody  est assez  bien documenté),  je synthétise  ici les
opérations de base pour la mise en service.


LE PROBLÈME DU PID

Le   serveur   refuse  de   démarrer   indiquant   qu’il  ne   trouve
pas   le  pid.   Il   faut  éditer   le   fichier  de   configuration
/usr/local/etc/prosody/prosody.cfg.lua,  vérifier que  posix apparaît
dans les modules_enabled (ça doit être  le cas par défaut) et ajouter
après la fermeture des {} des modules la ligne suivante

pidfile = "/usr/local/var/lib/prosody/prosody.pid"

J’avais d’abord voulu placer ce pidfile dans /var/run, mais le script
du démon  veut le lancer  dans l’adresse ci-dessus  et du coup  ça ne
fonctionnait pas.


LES CERTIFICATS SSL

La création d’une paire de clés autosignées étant bien documentée, je
n’insiste pas sur ce point. Dans le fichier de configuration, il faut
au moins placer le chemin de ces clés à deux endroits :

- dans les  SSL/TLS-related settings
- dans  chaque  Virtualhost, avec  des clés qui reprennent le  nom du
Virtualhost.

Le point  où ça  a coincé pour  moi, c’est la  gestion des  droits du
.key : si on le met en chmod 400, il faut alors effectuer un

   chown prosody:prosody nom_de_la_clé.key

pour  que le  programme puisse  le lire,  puisqu’il démarre  en démon
sans  les  droits  root.  L’utilisateur et  le  groupe  prosody  sont
normalement créés automatiquement lors de la compilation-installation
du programme.


LES LOGS

Dans log = …  le plus simple est d’utiliser syslog.  Ou il faut créer
des fichiers  de log sur  lesquels prosody ait des  droits d’écriture
(puisqu’il ne démarre pas en root)


LES PORTS À OUVRIR

Par défaut, prosody  utilise les ports suivants (on  peut les changer
assez facilement d’après la doc) :

- 5222 : écoute des connexions de clients
- 5269 : écoute des connexions serveur à serveur
- éventuellement 5280 :  écoute  des connexions  via  http  (avec  un
serveur  de  type  BOSH)  qui  permettent  de  se  connecter  par  un
navigateur web  et par exemple  ainsi de contourner les  filtrages de
port.

Ce qui donne, pour tous ceux qui utilisent Packet Filter, l’ajout des
lignes suivantes dans pf.conf :

   pass in on $interface proto { tcp, udp } from any to $interface\
   port 5222

   pass in on $interface proto { tcp, udp } from any to $interface\
   port 5269

   pass in on $interface proto { tcp, udp } from any to $interface\
   port 5280


LE LANCEMENT DE PROSODY

Deux manières possibles :

- /usr/local/etc/rc.d/prosody  start (si  prosody_enable=“YES” ajouté
dans /etc/rc.conf)
- prosodyctl start


AJOUT D’UTILISATEURS :

Il  est bon  d’avoir  ajouté un  utilisateur  administrateur dans  le
fichier de configuration (admins = { "[email protected]"})

Si la configuration de base  n’a pas été changée (allow\_registration
= false;)  il faut créer les  utilisateurs par une ligne  de commande
sur le serveur :

   prosodyctl adduser nom_de_l'utilisateur

Sinon modifier dans la configuration :

   allow_registration=true ;

pour que  tous ceux  qui ont  accès au serveur  puissent se  créer un
compte directement par leur client jabber.

Et voilà… Bel outil…


AJOUT DU 10 FÉVRIER 2014 :

Le  serveur  aura  tourné  presque   trois  ans  sans  toucher  à  la
configuration. Vraiment un bel outil.

Le passage  à la version  0.9.2 demande une petite  manipulation pour
ceux qui le font tourner derrière un nat. En effet, le serveur semble
par défaut  vouloir se  connecter à l’adresse  ip publique,  qu’il ne
trouve évidemment  pas sur l’interface.  Le message du  mainteneur du
port est  tout sauf clair,  puisqu’il semble décrire l’inverse  de ce
qu’il faut faire :

     If  you’re running Prosody  in a jail and  experience problems,
 please  add   the  following   to  the   global  section   of  your
 prosody.cfg.lua: interfaces = { ‘x.x.x.x’  } where ‘x.x.x.x’ is the
 public IP you wish Prosody to bind to.

En réalité,  il faut placer l’adresse  interne du serveur à  la place
des ‘x.x.x.x’, par exemple ‘10.2.2.3’.