Ejabberd

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Cet article est une ébauche concernant ejabberd. N'hésitez pas à contribuer ou à en discuter.

Installation et configuration de ejabberd sur Debian Lenny et Squeeze

Ce tutoriel à été re-testé sur une Squeeze, il est fonctionnel.

Ce tutoriel destiné à l'installation d'un serveur jabberd (ejabberd) à destination d'un réseau local uniquement. Les question de sécurité et d'ouverture de votre serveur jabberd sur l'extérieur ne seront pas traitées.

L'installation de ejabberd et son administration (grâce à son interface web) sont simples. Ejabberd permet de créer facilement un serveur permettant les échanges au travers du protocole XMPP, il est stable, supporte des charges importantes. Ejabberd est un serveur Jabber écrit en Erlang.

Installation

# aptitude install ejabberd
...
Les NOUVEAUX paquets suivants vont être installés : 
  ejabberd erlang-asn1{a} erlang-base{a} erlang-crypto{a} erlang-inets{a} erlang-mnesia{a} erlang-odbc{a} erlang-public-key{a} 
  erlang-runtime-tools{a} erlang-ssl{a} erlang-syntax-tools{a} libsctp1{a} lksctp-tools{a} odbcinst{a} odbcinst1debian2{a} unixodbc{a}
... 

Vérification de l'installation :

$ erl
Erlang (BEAM) emulator version 5.6.3 [source] [64-bit] [smp:2] [async-threads:0] [kernel-poll:false]  Eshell V5.6.3  (abort with ^G)

1>  

Pour sortir de la console erlang Ctrl+C puis a puis entré.

(Ctrl+C donne accès à un menu "BREAK", a pour abort)...

BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution

Vous pouvez vérifier à tout moment que votre serveur ejabberd fonctionne avec la commande suivante:

# ejabberdctl status
The node ejabberd@hostname is started with status: started
ejabberd 2.1.5 is running in that node

Configuration

EJabberd se configure dans le fichier /etc/ejabberd/ejabberd.cfg

Nous verrons plus loin comment utiliser l'interface web accessible par 'http://votreserveur:5280/admin' pour réaliser les tâches d'administration.

Avant tout, il faut créer un certificat valide pour le domaine que vous allez utiliser :

# mv /etc/ejabberd/ejabberd.pem /etc/ejabberd/ejabberd.pem.orig
$ openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
$ openssl rsa -in privkey.pem -out privkey.pem
$ cat privkey.pem >> server.pem
$ rm privkey.pem
# mv server.pem /etc/ejabberd/ejabberd.pem
# chown root:ejabberd /etc/ejabberd/ejabberd.pem
# chmod 640 /etc/ejabberd/ejabberd.pem

Répondez à la question "Common Name" avec votre nom de domaine, c'est primordial car lors de la connexion de vos clients, il leur sera demandé de valider le certificat:

Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:votredomaine.ltd

Notez (ou retenez) le mot de passe demandé au début, même si vous ne devriez plus en avoir besoin par la suite.

Remarque au sujet du certificat: Si avec cette commande ($ cat privkey.pem > server.pem) vous obtenez une erreur de ce genre :

** Reason for termination =
** { {badmatch,{error,"SSL_CTX_use_certificate_file failed: error:0906D06C:PEM routines:PEM_read_bio:no start line"}},

Recommencez votre certificat avec cette commande : $ cat privkey.pem >> server.pem


Pensez à ouvrir dans votre firewall les ports TCP 5222 et 5269 pour le protocole XMPP, ainsi que le port TCP 5280 pour l'interface web d'administration.

Sauvegarder le fichier de configuration avant d'y faire la moindre modification (prudence...)

# cp /etc/ejabberd/ejabberd.cfg /etc/ejabberd/ejabberd.cfg.orig 

le fichier ejabberd.cfg

Complétez maintenant le fichier ejabberd.cfg comme suit :

# cat /etc/ejabberd/ejabberd.cfg

{acl, admin, {user, "laurent", "localhost"}}. {acl, admin, {user, "laurent", "isalo.org"}}. {acl, admin, {user, "admin", "isalo.org"}}. {hosts, ["localhost", "isalo.org"]}.

{loglevel, 3}.

{listen,

[
 {5222, ejabberd_c2s, [
                      {access, c2s},
                      {shaper, c2s_shaper},
                      {max_stanza_size, 65536},
                      starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"}
                      ]},
{5269, ejabberd_s2s_in, [
                        {shaper, s2s_shaper},
                        {max_stanza_size, 131072}
                        ]},
{5280, ejabberd_http, [
                      http_poll,
                      web_admin
                      ]}
]}.

{s2s_use_starttls, true}.

{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.

{auth_method, internal}.

{shaper, normal, {maxrate, 1000}}. {shaper, fast, {maxrate, 50000}}.

{acl, local, {user_regexp, ""}}.

{access, max_user_sessions, [{10, all}]}. {access, local, [{allow, local}]}. {access, c2s, [{deny, blocked},

              {allow, all}]}.

{access, c2s_shaper, [{none, admin},

                     {normal, all}]}.

{access, s2s_shaper, [{fast, all}]}. {access, announce, [{allow, admin}]}. {access, configure, [{allow, admin}]}. {access, muc_admin, [{allow, admin}]}. {access, muc, [{allow, all}]}. {access, register, [{allow, all}]}. {access, pubsub_createnode, [{allow, all}]}.

{host_config, "isalo.org",

[  
 {access, c2s, [{allow, admin}, {allow, all}]},
 {access, register, [{allow, all}]}
]

}.

{language, "fr"}.

{modules,

[
 {mod_adhoc,    []},
 {mod_announce, [{access, announce}]}, % requires mod_adhoc
 {mod_caps,     []},
 {mod_configure,[]}, % requires mod_adhoc
 {mod_ctlextra, []},               
 {mod_disco,    []},
 %%{mod_echo,   [{host, "echo.localhost"}]},
 {mod_irc,      []},   
 {mod_last,     []},
 {mod_muc,      [
                 %%{host, "conference.@HOST@"},
                 {access, muc},
                 {access_create, muc},
                 {access_persistent, muc},
                 {access_admin, muc_admin},
                 {max_users, 500}
                ]},
 %%{mod_muc_log,[]},
 {mod_offline,  []},
 {mod_privacy,  []},
 {mod_private,  []},
 {mod_proxy65,  [
                 {access, local},
                 {shaper, c2s_shaper}
                ]},
 {mod_pubsub,   [ % requires mod_caps
                 {access_createnode, pubsub_createnode},
                 {plugins, ["default", "pep"]}
                ]},
 {mod_register, [
                 {welcome_message, {"Bienvenue!",
                                    "Bienvenue sur le Serveur Jabber de isalo.org. "
                                    "Pour plus d'information à propos de Jabber :"
                                    "http://www.jabber.org"}},
                 {access, register}
                ]},
 {mod_roster,   []},
 {mod_stats,    []},
 {mod_time,     []},
 {mod_vcard,    []},
 {mod_version,  []}
]}.

Petite explication rapide...

Le fichier de configuration ci-dessus est en erlang. Le caractère % est utilisé, et non # ou ; pour commenter une ligne. Tous les blocs se terminent par un ".", il est indispensable!

  • le nom du compte administrateur du serveur
{acl, admin, {user, "laurent", "localhost"}}. {acl, admin, {user, "admin", "isalo.org"}}. 
  • Les nom d'hôte utilisé :
{hosts, ["localhost", "isalo.org"]}. 
  • L'adresse de courriel qui va recevoir les notifications de nouveaux comptes :
{registration_watchers, ["admin@isalo.org"]}. 
  • Le niveau de log (de 0 à 5) - 3 est raisonnable :
{loglevel, 3}. 
  • Les ports utilisés :

Il est recommandé de laisser ceux par défaut : Nous avons un beau certificat, nous forçons donc la connexion avec ttls : starttls_required

{listen,
 [
  {5222, ejabberd_c2s, [
                        {access, c2s},
                        {shaper, c2s_shaper},
                        {max_stanza_size, 65536},
                        starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"}
                        ]},
  {5269, ejabberd_s2s_in, [
                        {shaper, s2s_shaper},
                        {max_stanza_size, 131072}
                        ]},
  {5280, ejabberd_http, [
                        http_poll,
                        web_admin 
                        ]}
 ]}. 

Je vous laisse découvrir vous-même la suite (A faire!), il s'agit des règles d'accès au serveur (les ACL). Tel quelle la configuration ci-dessus permet à n'importe qui de s'enregistrer. Comme ce serveur n'est destiné qu'a votre réseau local, pas de problèmes pour l'instant!

DNS

Nous allons maintenant ajouter à notre DNS (ici Bind9) les enregistrements nécessaires : Attention, mon serveur DNS local n'ést pas sur la machine ou tourne ejabberd. J'ai donc précisé sur quelle machine trouver les services (nas.isalo.org)

_xmpp-server._tcp.isalo.org.	        86400	IN	SRV	5 0 5269 nas.isalo.org.
_xmpp-client._tcp.jabber.isalo.org.	86400	IN	SRV	5 0 5222 nas.isalo.org.
_jabber._tcp.jabber.isalo.org.	        86400	IN	SRV	5 0 5222 nas.isalo.org.

Pour vérifier que votre DNS répond bien :

$ dig -t srv _xmpp-client._tcp.jabber.isalo.org

; <<>> DiG 9.6-ESV-R1 <<>> -t srv _xmpp-client._tcp.jabber.isalo.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62356
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; QUESTION SECTION:
;_xmpp-client._tcp.jabber.isalo.org. IN	SRV

;; ANSWER SECTION:
_xmpp-client._tcp.jabber.isalo.org. 86400 IN SRV 5 0 5222 nas.isalo.org.

;; AUTHORITY SECTION:
isalo.org.		38400	IN	NS	lol.isalo.org.

;; ADDITIONAL SECTION:
nas.isalo.org.		38400	IN	A	192.168.0.6
lol.isalo.org.		38400	IN	A	192.168.0.1

;; Query time: 0 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Sat Aug 21 08:49:23 2010
;; MSG SIZE  rcvd: 135

Vous devez obtenir les deux lignes 'grasses' : le nom de la machine qui héberge le serveur jabber et son IP.

Ajout d'un administrateur

Nous enregistrons l'utilisateur qui fera l'administration; Création de l'utilisateur "laurent" du domaine "localhost" avec le mot de passe "motdepasse" :

# ejabberdctl register laurent localhost motdepasse

Si vous souhaitez par la suite supprimer un utilisateur :

# ejabberdctl unregister laurent localhost 

Nous redémarrons le service

# /etc/init.d/ejabberd restart  

ou

# invoke-rc.d ejabberd restart

Premier contact avec l'interface Web

Nous nous rendons maintenant à l'adresse suivante pour la console d'administration :

http://127.0.0.1:5280/admin Connexion avec laurent@localhost motdepasse


Vérifions nos domaines :


Nous avons bien deux domaines : localhost et isalo.org

Utilisation

Nous allons maintenant tester notre serveur ejabberd...

J'utilise Pidgin, il en existe beaucoup d'autres...

Il suffit de se s'enregistrer via le nom de domaine renseigné dans la configuration, en choisissant de créer (nous l'avons autorisé dans la configuration). Si ce n'est pas le cas, il vous faudra le faire au travers de l'interface Web d'administration



Ici, il faut préciser le serveur de connexion (soit par son nom - J'ai mis nas - si vous avec un DNS, soit par son IP).

Laissez vide "proxy pour les serveurs de connexion" sinon vous aurez un message d'erreur






Il nous reste à vérifier que les utilisateurs sont bien inscrits :

Aller plus loin

le site officiel de ejabberd

De nombreux tutoriaux

ejabberd est soutenu par Process-one - Site commercial. www.process-one.net

Voici une documentation détaillée (Attention l'installation proposée dans cette documentation passe par un installeur qui n'est pas apt). Vous y trouverez de nombreuses astuces et réglages pour votre configuration.

Beaucoup de modules sont disponibles pour augmenter les possibilités de votre serveur ejabberd (support mysql, support de nombreux autres protocoles, etc.)

Lol 20 août 2010 à 12:17 (EAT)