« Installation d'un serveur Jabber (ejabberd) » : différence entre les versions
(création incomplète (sauvegarde)) |
(fin création) |
||
Ligne 1 : | Ligne 1 : | ||
[[Catégorie:Informatique]] | [[Catégorie:Informatique]] | ||
J'ai récemment installé '''ejabberd''' sous Debian GNU/Linux lenny, et je vais décrire rapidement la procédure. | J'ai récemment installé '''ejabberd''', un serveur Jabber (XMPP), sous Debian GNU/Linux lenny, et je vais décrire rapidement la procédure. | ||
Toutes les manipulations sont à réaliser sous l'utilisateur root. | Toutes les manipulations sont à réaliser sous l'utilisateur root. | ||
Ligne 23 : | Ligne 23 : | ||
Vous l'aurez compris, le fichier qui nous concerne le plus dans un premier temps est {{fich|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 '''%'''. | Vous l'aurez compris, le fichier qui nous concerne le plus dans un premier temps est {{fich|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 sections suivantes expliquent les modifications à apporter pour bien démarrer. À noter que pour que les modifications soient prises en compte, il est nécessaire de redémarrer le processus ejabberd, ce qui a pour fâcheuse conséquence de déconnecter tous les utilisateurs du serveur. Essayez de créer une configuration stable, et faites vos essais avant d'inviter la terre entière à s'installer chez vous ! La commande pour redémarrer est la suivante (vous pouvez aussi utiliser invoke-rc.d si vous êtes quelqu'un de moderne) : | ||
/etc/init.d/ejabberd restart | |||
=== Les ACL, ou droits des utilisateurs === | === Les ACL, ou droits des utilisateurs === | ||
Ligne 35 : | Ligne 36 : | ||
{acl, admin, {user, "moi", "mondomaine.org"}}. | {acl, admin, {user, "moi", "mondomaine.org"}}. | ||
Vous pouvez aussi ajouter des utilisateurs à la liste des « registration watchers », dans la structure de configuration du module {{fich|mod_register}}. Ces utilisateurs recevront une notification lorsqu'un compte sera créé ; cela n'est évidemment utile que si vous autorisez les inscriptions publiques (voir ''[[#Ouvrir le serveur au monde extérieur|infra]]''). Exemple : | |||
{registration_watchers, ["moi@mondomaine.org", "moncollegue@mondomainepro.com"]}, | |||
De même, il est possible de créer une liste d'utilisateurs qui recevront une alerte si le processus de ejabberd s'emballe et consomme trop de mémoire : | |||
{watchdog_admins, ["moi@mondomaine.org", "monadmin@mondomainepro.com"]}. | |||
=== Noms de domaines === | === Noms de domaines === | ||
Ligne 90 : | Ligne 95 : | ||
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 [http://www.process-one.net/en/ejabberd/guide_en documentation]. | 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 [http://www.process-one.net/en/ejabberd/guide_en documentation]. | ||
=== Ouvrir le serveur au monde extérieur === | |||
Pour commencer, afin de permettre la connexion aux utilisateurs de l'extérieur, et pas seulement depuis l'hôte local, commentez la ligne suivante : | |||
{access, local, [{allow, local}]}. | |||
Ensuite, si vous souhaitez que n'importe qui puisse créer un compte sur votre serveur Jabber, changez la ligne : | |||
{access, register, [{deny, all}]}. | |||
en : | |||
{access, register, [{allow, all}]}. | |||
Cela permettra aux gens de créer un compte depuis leur client Jabber. Si vous préférez créer les comptes à la main, ne touchez pas cette ligne. | |||
=== Permettre de garder l'historique des salles de discussion === | |||
Ceci n'est pas du tout indispensable, mais il peut être utile de garder l'historique des conversations d'un salon de conférence. À noter que cette configuration ne sauvegarde pas les historiques de tous les salons, mais seulement des salons pour lesquels on a activé l'archivage. | |||
Cette configuration est à faire dans la section {{code|modules}} (un morceau de bloc {{code|mod_muc_log}} existe mais est commenté). Voici ma configuration : | |||
<pre> | |||
%% Log MUC conversations | |||
%% Documentation: see http://www.process-one.net/en/ejabberd/guide_en#modmuclog | |||
{mod_muc_log, [ | |||
{access_log, muc_admin}, | |||
{cssfile, "http://jabber.mondomaine.org/muclog/log.css"}, | |||
{dirname, room_jid}, | |||
{dirtype, subdirs}, | |||
{outdir, "/srv/jabber/muclog"}, | |||
{timezone, universal}, | |||
{spam_prevention, true}, | |||
{top_link, {"http://jabber.mondomaine.org/", "jabber.mondomaine.org"}} | |||
]}, | |||
</pre> | |||
* La directive {{code|access_log}} permet de spécifier que seuls les membres du groupe muc_admin peuvent activer l'archivage dans une salle. Si vous voulez que tout le monde le puisse, remplacer « muc_admin » par « all » doit fonctionner. Pour ajouter des utilisateurs au groupe muc_admin, des ACL doivent être présentes quelque part dans le fichier de configuration, par exemple : | |||
{acl, muc_admin, {user, "moi", "mondomaine.org"}}. | |||
{acl, muc_admin, {user, "monpote", "mondomaine.org"}}. | |||
* {{code|cssfile}} permet d'indiquer l'adresse d'un fichier CSS à appliquer aux pages HTML générées. | |||
* {{code|dirname}} permet de spécifier le format du répertoire de sortie ; {{code|room_jid}} signifie que le répertoire sera l'adresse de la salle, et {{code|room_name}} seulement son nom. | |||
* {{code|outdir}} est le répertoire de base des historiques. | |||
* {{code|timezone, universal}} permet d'indiquer que les heures seront affichées en UTC. L'autre possibilité est {{code|local}}, auquel cas l'heure sera l'heure locale du serveur. | |||
* {{code|spam_prevention}} ajoute une directive nofollow à tous les liens présents dans les messages des utilisateurs. | |||
* Enfin, {{code|top_link}} permet de choisir le texte et la référence du lien qui apparaît en haut de chaque page. | |||
Les historiques sont générés en HTML ; à partir de la version 2.1 de ejabberd, le format peut également être du texte, grâce à la directive suivante : | |||
{file_format, plaintext}, | |||
En attendant, j'ai écrit un [https://code.lm7.fr/p/scripts/source/tree/master/make_html2text petit script à base de {{fich|html2text}}] qui permet de convertir les historiques HTML en texte. | |||
=== Peaufinage === | |||
Il reste quelques options que vous pouvez personnaliser, comme le message de bienvenue et la langue par défaut des messages du serveur. Je vous laisse explorer le reste du fichier. | |||
== Création des comptes administrateurs == | == Création des comptes administrateurs == | ||
Ligne 98 : | Ligne 153 : | ||
Vous pouvez contrôler que l'utilisateur a bien été créé avec la commande suivante, qui affiche le nombre d'utilisateurs enregistrés : | 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 | ejabberdctl stats registeredusers | ||
Une fois un administrateur créé, il pourra créer des comptes depuis son client Jabber, en naviguant dans les services du serveur. | |||
== L'interface web == | == L'interface web == | ||
Ligne 104 : | Ligne 161 : | ||
== Règles iptables == | == Règles iptables == | ||
Si vous avez mis en place un pare-feu, il faudra ouvrir les ports sur lesquels écoute ejabberd. Voici un extrait de script iptables : | |||
<pre> | |||
# Communication en clair et STARTTLS | |||
iptables -A INPUT -p tcp --dport 5222 -j ACCEPT | |||
# Communication TLS | |||
iptables -A INPUT -p tcp --dport 5223 -j ACCEPT | |||
# Communication avec les autres serveurs | |||
iptables -A INPUT -p tcp --dport 5269 -j ACCEPT | |||
# Interface web | |||
iptables -A INPUT -p tcp --dport 5280 -j ACCEPT | |||
</pre> | |||
== Un mot sur le certificat SSL == | == Un mot sur le certificat SSL == | ||
Ligne 109 : | Ligne 179 : | ||
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 : | 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 | cat key.pem cert.pem >keycert.pem | ||
C'est ce fichier (ici {{fich|keycert.pem}}) qu'il faudra indiquer dans {{fich|ejabberd.cfg}}. | C'est ce fichier (ici {{fich|keycert.pem}}) qu'il faudra indiquer dans {{fich|ejabberd.cfg}}. Pour éviter des erreurs de frappe (le nom du certificat apparaissant à de multiples endroits dans le fichier de configuration), vous pouvez simplement remplacer l'ancien {{fich|ejabberd.pem}} par votre nouveau certificat, ou par un lien vers icelui. |
Version du 18 janvier 2010 à 23:30
J'ai récemment installé ejabberd, un serveur Jabber (XMPP), 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. À noter que pour que les modifications soient prises en compte, il est nécessaire de redémarrer le processus ejabberd, ce qui a pour fâcheuse conséquence de déconnecter tous les utilisateurs du serveur. Essayez de créer une configuration stable, et faites vos essais avant d'inviter la terre entière à s'installer chez vous ! La commande pour redémarrer est la suivante (vous pouvez aussi utiliser invoke-rc.d si vous êtes quelqu'un de moderne) :
/etc/init.d/ejabberd restart
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"}}.
Vous pouvez aussi ajouter des utilisateurs à la liste des « registration watchers », dans la structure de configuration du module mod_register. Ces utilisateurs recevront une notification lorsqu'un compte sera créé ; cela n'est évidemment utile que si vous autorisez les inscriptions publiques (voir infra). Exemple :
{registration_watchers, ["moi@mondomaine.org", "moncollegue@mondomainepro.com"]},
De même, il est possible de créer une liste d'utilisateurs qui recevront une alerte si le processus de ejabberd s'emballe et consomme trop de mémoire :
{watchdog_admins, ["moi@mondomaine.org", "monadmin@mondomainepro.com"]}.
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.
Ouvrir le serveur au monde extérieur
Pour commencer, afin de permettre la connexion aux utilisateurs de l'extérieur, et pas seulement depuis l'hôte local, commentez la ligne suivante :
{access, local, [{allow, local}]}.
Ensuite, si vous souhaitez que n'importe qui puisse créer un compte sur votre serveur Jabber, changez la ligne :
{access, register, [{deny, all}]}.
en :
{access, register, [{allow, all}]}.
Cela permettra aux gens de créer un compte depuis leur client Jabber. Si vous préférez créer les comptes à la main, ne touchez pas cette ligne.
Permettre de garder l'historique des salles de discussion
Ceci n'est pas du tout indispensable, mais il peut être utile de garder l'historique des conversations d'un salon de conférence. À noter que cette configuration ne sauvegarde pas les historiques de tous les salons, mais seulement des salons pour lesquels on a activé l'archivage.
Cette configuration est à faire dans la section modules
(un morceau de bloc mod_muc_log
existe mais est commenté). Voici ma configuration :
%% Log MUC conversations %% Documentation: see http://www.process-one.net/en/ejabberd/guide_en#modmuclog {mod_muc_log, [ {access_log, muc_admin}, {cssfile, "http://jabber.mondomaine.org/muclog/log.css"}, {dirname, room_jid}, {dirtype, subdirs}, {outdir, "/srv/jabber/muclog"}, {timezone, universal}, {spam_prevention, true}, {top_link, {"http://jabber.mondomaine.org/", "jabber.mondomaine.org"}} ]},
- La directive
access_log
permet de spécifier que seuls les membres du groupe muc_admin peuvent activer l'archivage dans une salle. Si vous voulez que tout le monde le puisse, remplacer « muc_admin » par « all » doit fonctionner. Pour ajouter des utilisateurs au groupe muc_admin, des ACL doivent être présentes quelque part dans le fichier de configuration, par exemple :
{acl, muc_admin, {user, "moi", "mondomaine.org"}}. {acl, muc_admin, {user, "monpote", "mondomaine.org"}}.
cssfile
permet d'indiquer l'adresse d'un fichier CSS à appliquer aux pages HTML générées.dirname
permet de spécifier le format du répertoire de sortie ;room_jid
signifie que le répertoire sera l'adresse de la salle, etroom_name
seulement son nom.outdir
est le répertoire de base des historiques.timezone, universal
permet d'indiquer que les heures seront affichées en UTC. L'autre possibilité estlocal
, auquel cas l'heure sera l'heure locale du serveur.spam_prevention
ajoute une directive nofollow à tous les liens présents dans les messages des utilisateurs.- Enfin,
top_link
permet de choisir le texte et la référence du lien qui apparaît en haut de chaque page.
Les historiques sont générés en HTML ; à partir de la version 2.1 de ejabberd, le format peut également être du texte, grâce à la directive suivante :
{file_format, plaintext},
En attendant, j'ai écrit un petit script à base de html2text qui permet de convertir les historiques HTML en texte.
Peaufinage
Il reste quelques options que vous pouvez personnaliser, comme le message de bienvenue et la langue par défaut des messages du serveur. Je vous laisse explorer le reste du fichier.
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
Une fois un administrateur créé, il pourra créer des comptes depuis son client Jabber, en naviguant dans les services du serveur.
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
Si vous avez mis en place un pare-feu, il faudra ouvrir les ports sur lesquels écoute ejabberd. Voici un extrait de script iptables :
# Communication en clair et STARTTLS iptables -A INPUT -p tcp --dport 5222 -j ACCEPT # Communication TLS iptables -A INPUT -p tcp --dport 5223 -j ACCEPT # Communication avec les autres serveurs iptables -A INPUT -p tcp --dport 5269 -j ACCEPT # Interface web iptables -A INPUT -p tcp --dport 5280 -j ACCEPT
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. Pour éviter des erreurs de frappe (le nom du certificat apparaissant à de multiples endroits dans le fichier de configuration), vous pouvez simplement remplacer l'ancien ejabberd.pem par votre nouveau certificat, ou par un lien vers icelui.