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’.