Installation d'un serveur Jabber (ejabberd)
J'ai récemment installé ejabberd sous Debian GNU/Linux lenny, et je vais décrire rapidement la procédure.
Toutes les manipulations sont à réaliser sous l'utilisateur root.
Installation
Tout bête, il suffit d'installer le paquet ejabberd :
aptitude install ejabberd
Configuration
La configuration de ejabberd se trouve dans le répertoire /etc/ejabberd. On y trouve le fichier de configuration principal (ejabberd.cfg), un certificat SSL généré automatiquement pendant l'installation (ejabberd.pem), ainsi qu'un fichier nommé inetrc auquel je ne me suis pas intéressé.
# ls -lh /etc/ejabberd total 24K -rw------- 1 ejabberd ejabberd 14K jan 16 15:29 ejabberd.cfg -rw-r----- 1 root ejabberd 2,0K jan 14 23:23 ejabberd.pem -rw-r--r-- 1 root root 37 avr 16 2009 inetrc
À propos de ejabberd.cfg
Vous l'aurez compris, le fichier qui nous concerne le plus dans un premier temps est ejabberd.cfg. C'est en fait un morceau de code Erlang (le langage dans lequel est codé ejabberd), ce qui fait une syntaxe particulière, mais assez claire toutefois. Une notice explicative concernant cette syntaxe est incluse en commentaire dans le fichier. La principale chose à savoir est que les commentaires commencent par le caractère %.
Les sections suivantes expliquent les modifications à apporter pour bien démarrer.
Les ACL, ou droits des utilisateurs
Le premier élément à configurer est la liste des utilisateurs possédant les droits d'administration sur le serveur. Ils pourront, depuis leur compte Jabber (si leur client le supporte), effectuer des opérations telles que l'ajout et la suppression d'utilisateurs, le paramétrage des messages et annonces du serveur, ou même redémarrer à distance ejabberd.
Une ACL est de la forme :
{acl, nom_groupe, {user, "nom_utiliateur", "domaine_utilisateur"}}.
Par exemple, pour ajouter l'utilisateur moi@mondomaine.org au groupe des administrateurs (nommé « admin ») :
{acl, admin, {user, "moi", "mondomaine.org"}}.
Il existe d'autres groupes, comme nous le verrons un peu plus loin.
Noms de domaines
Il faut ensuite indiquer le ou les noms de domaines qui seront gérés par ejabberd. Si vous n'avez qu'un domaine, il suffit d'écrire :
{hosts, ["mondomaine.org"]}.
Si vous en avez plusieurs :
{hosts, ["mondomaine.org", "monautredomaine.net", "mondomainepro.com"]}.
Ports d'écoute du serveur
Une section importante est la structure listen
, qui spécifie les ports d'écoute du serveur (et donc les services qu'il propose). Voici ma configuration :
{listen, [ %% Client à serveur : {5222, ejabberd_c2s, [ {access, c2s}, {shaper, c2s_shaper}, {max_stanza_size, 65536}, starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"} ]}, %% Ancienne méthode de connexion SSL (obsolète) sur le port 5223 : {5223, ejabberd_c2s, [ {access, c2s}, {shaper, c2s_shaper}, {max_stanza_size, 65536}, tls, {certfile, "/etc/ejabberd/ejabberd.pem"} ]}, %% Serveur à serveur : {5269, ejabberd_s2s_in, [ {shaper, s2s_shaper}, {max_stanza_size, 131072} ]}, %% Interface web : {5280, ejabberd_http, [ http_poll, web_admin, tls, {certfile, "/etc/ejabberd/ejabberd.pem"} ]} ]}.
- La partie « client à serveur » (port 5222) est indispensable. J'ai changé la directive
starttls
enstarttls_required
, afin d'empêcher que des mots de passe en clair ne transitent. - La deuxième partie, relative à l'ancienne méthode de connexion SSL, est facultative, et désactivée par défaut. Je l'ai activée parce que STARTTLS n'est pas encore supportée par tous les clients Jabber (par exemple mon client préféré mcabber).
- La partie « serveur à serveur » est indispensable si vous voulez que votre serveur communique avec les autres serveurs Jabber. Pour un serveur interne, vous pouvez commenter cette section.
- Enfin, la partie concernant l'interface web est facultative, mais il faut savoir que certaines opérations ne peuvent être effectuées qu'à travers cette interface. Par rapport au fichier de configuration par défaut, j'ai ajouté les directives
tls
et {{{certfile, "/etc/ejabberd/ejabberd.pem"}}}, qui permettent d'accéder à l'interface web de manière sécurisée (en https).
Si vous désirez configurer des passerelles vers d'autres réseaux de messagerie instantanée, il vous faudra configurer des nouveaux ports d'écoute dans cette section. Je ne peux pas vous aider sur ce point car j'utilise Jabber « pur » : lisez les exemples en commentaire et la documentation.
Création des comptes administrateurs
Même si nous avons spécifié des ACL dans le fichier de configuration, les utilisateurs ne sont pas créés pour autant. Pour les créer, il faut utiliser l'utilitaire ejabberdctl (le serveur doit être lancé) :
ejabberdctl register moi mondomaine.org mon_mot_de_passe
Vous pouvez contrôler que l'utilisateur a bien été créé avec la commande suivante, qui affiche le nombre d'utilisateurs enregistrés :
ejabberdctl stats registeredusers
L'interface web
L'accès à l'interface web se fait sur le port spécifié dans le fichier de configuration, à savoir 5280 par défaut, et le répertoire à charger est /admin/. Dans notre exemple, l'adresse à charger est donc : https://mondomaine.org:5280/admin/
(http:// ne marchera pas si vous avez activé le chiffrement comme je l'ai fait).
Règles iptables
Un mot sur le certificat SSL
Il est conseillé de générer votre propre certificat SSL « aux petits oignons ». Cela sort du cadre de cet article, mais sachez que comme on ne peut spécifier qu'un certificat et non une signature dans la configuration de ejabberd, il faudra concaténer le fichier de signature et le fichier de certificat :
cat key.pem cert.pem >keycert.pem
C'est ce fichier (ici keycert.pem) qu'il faudra indiquer dans ejabberd.cfg.