XMPP
Serveur de messagerie instantanée Jabber
Introduction :
Cet article est une variante de l'article original paru dans le numéro 25 (Août 2003), du magazine Planète-Linux.
Jabber est un protocole de communication XML développé sous l'égide de la Jabber Software Foundation. Un protocole, c'est un "langage" particulier permettant à des ordinateurs de communiquer entre eux Jabber est plus particulièrement développé pour la messagerie instantanée, et c'est un protocole libre (licence GPL/JOSL). Comme ses principaux concurrents privés (AIM, ICQ, MSN, Yahoo), il permet de connaître et de faire connaître votre état de présence sur le réseau Internet et d'envoyer ou de recevoir des messages instantanément. Si vous n'êtes pas connecté, vos messages sont stockés et distribués dès que vous revenez en ligne.
L'intérêt de Jabber ? il y en a plusieurs. Le protocole Jabber est libre, public, ouvert et basé sur un langage connu (XML), gage de pérennité et de développement futur. Il est et restera non payant. Il permet donc de créer des serveurs extensibles (ajout d'une brique au serveur), décentralisés (création de son propre serveur) et sûr (sans espion logiciel, avec cryptage SSL). Il n'est par contre pas nativement multi-protocole, mais des passerelles vers les autres services de messagerie instantanée existent, à installer en complément du serveur de base.
Outre le serveur de messagerie instantanée Jabber, il existe de nombreux autres serveurs utilisant le protocole Jabber. WPJabber est une alternative libre à Jabber, tandis que le site http://www.jabber.com diffuse un des nombreux serveurs sous licence payante et propriétaire. Un bref comparatif des serveurs existant est disponible ici. Le choix est donc vaste et devrait permettre de couvrir vos besoins : de Windows à Solaris, en passant par OS X, intégrable avec une base de données MySql, Oracle ou LDAP, vous trouverez forcément une version publique ou commerciale du serveur Jabber qui vous conviendra.
Enfin, pour se connecter à votre serveur, une multitude de clients existent, en licence libre ou propriétaire : on peut citer Gabber, Gaim et Psi sous Linux, Exodus sous Windows.
L'article qui suit devrait vous permettre d'installer un serveur de messagerie instantanée Jabber (version 1.4.2), soit à partir des sources, soit à partir des paquetages rpm, sur un serveur Mandrake 9.1. Mais le principe est identique pour toute distribution. Le hostname du serveur sera jabber.masociete.com et l'adresse IP 192.168.0.1.
Matériel requis :
Le matériel requis dépend du nombre de personnes qui vont se connecter à votre serveur : un système Linux équipé d'un processeur de type Pentium avec 512 Mo de Ram peut supporter de 100 à 1000 utilisateurs, avec un taux de charge maximum de 50%. La bande passante nécessaire est de 15 bits par seconde par utilisateur connecté Attention, sans recompilation, Linux n'accepte pas plus de 1024 connexions simultanéesÂ
Installation à partir des sources :
Se logger comme root.
Récupérer la source du serveur Jabberd à l'adresse suivante : http://jabberd.jabberstudio.org/downloads/jabber-1.4.2.tar.gz
et la copier dans le répertoire /usr/local
Décompresser le fichier source :
Renommer le répertoire jabber-1.4.2 :
Récupérer le code source de openssl (openssl-0.9.7b.tar.gz) à l'adresse suivante : http://www.openssl.org. Et la copier dans le répertoire /usr/local. Décompresser le fichier source :
Renommer le répertoire openssl-0.9.7b :
Changer de répertoire :
Compiler openssl (Perl5 doit notamment être installé) :
# make
# make test
# make install
Changer de répertoire :
Installer le serveur jabber, avec prise en charge du cryptage de la connexion ssl :
Vérifier que ssl a bien été pris en compte. Les premières lignes du fichier sortie.txt doivent contenir :
Searching for SSL... Found.
Une erreur existe dans le fichier résultant platform-settings, qu'il faut corriger. Editer le fichier avec vi par exemple :
Repérer la ligne :
Et la transformer en :
Faire la même modification pour la ligne CCFLAGS
. Taper alors :
Et c'est terminé, votre serveur de messagerie instantanée est installé (enfin presque...) !
Configuration :
L'essentiel de la configuration du serveur s'effectue en intervenant sur le fichier /usr/local/jabber/jabber.xml
(ou /etc/jabber/jabber.xml
si vous avez utilisé un paquet Mandrake). Avant toute modification, il est judicieux de faire une copie de secours du fichier original
Ouvrir le fichier jabber.xml et modifier la ligne :
en remplaçant localhost par votre nom de domaine (jabber.masociete.com par exemple), ou par l'adresse IP de votre serveur Jabber (déconseillé). Si vous créer un serveur jabber interne, sans lien avec internet, vous pouvez commenter cette ligne :
C'est la commande permettant de contrôler automatiquement la présence de mise à jour sur le serveur jabber.org. Configurer alors le répertoire destiné à stocker les fichiers de profils des utilisateurs :
en remplaçant jabber.masociete.com par le nom que vous avez indiqué ci-dessus à la place de localhost dans la balise <host>
du fichier jabber.xml. Démarrez Jabber et tester son fonctionnement sans cryptage ssl (voir rubrique [#demarrer-arreter Démarrer/Arrêter le serveur]). Si tout fonctionne normalement, on peut passer à la suite.
Il faut maintenant créer la clé de cryptage SSL. Rester dans le répertoire /usr/local/jabber et repérer l'emplacement de l'éxécutable openssl :
Il réside normalement dans le répertoire /usr/bin/openssl
. C'est ce chemin qui devra figurer dans la première ligne du fichier keygen.sh.
Créer un fichier keygen.sh :
et taper le code suivant :
## régler le chemin ci desous sur le chemin de openssl
OPENSSL=/usr/bin/openssl
## Génération du certificat et de la clé
$OPENSSL req -new -x509 -newkey rsa:1024 -keyout privkey.pem -out key.pem
## effacement de la phrase servant de mot de passe
$OPENSSL rsa -in privkey.pem -out privkey.pem
## Assemblage
cat privkey.pem >> key.pem
## Effacement
rm privkey.pem
Enregistrer et rendre exécutable ce fichier :
Exécuter ce fichier :
Répondre aux questions posées. A la fin de l'éxécution, vous devez trouver dans le répertoire /usr/local/jabber
un fichier key.pem
. Tester alors le mode ssl :
en remplaçant 192.168.0.1 par l'adresse ip de votre serveur. Vous devez recevoir une réponse du type :
depth=0 /C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address
verify return:1
---
Certificate chain
0 s:/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address
i:/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDdDCCAt2gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBiTELMAkGA1UEBhMCVVMx EDAOBgNVBAgTB0FyaXpvbmExEDAOBgNVBAcTB1Bob2VuaXgxETAPBgNVBAoTCERJ TExJR0FGMQ8wDQYDVQQLEwZKYWJiZXIxFzAVBgNVBAMTDkNocmlzIE1jRG9uYWxk MRkwFwYJKoZIhvcNAQkBFgpwaHgtamFiYmVyMB4XDTAxMDYwNjAxNTMwNloXDTAx MDcwNjAxNTMwNlowgYkxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRAw DgYDVQQHEwdQaG9lbml4MREwDwYDVQQKEwhESUxMSUdBRjEPMA0GA1UECxMGSmFi YmVyMRcwFQYDVQQDEw5DaHJpcyBNY0RvbmFsZDEZMBcGCSqGSIb3DQEJARYKcGh4 LWphYmJlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArbyosgcyf9VNpPZc +nU6yKdfAsOSpBu/n/MkChis5POuLkXo62WEoiYuDYF6bmd6XYaVC7ZwItcCwTIv OqdErh4u82E2qeArN0j9eq6EX+MMrYBSkv2nzwabNkkWPCS9VaOsVWx+kvRw598p ACyANf52liFhfDGISIoTlBOn+ysCAwEAAaOB6TCB5jAdBgNVHQ4EFgQUv9mxa1Yj o7Um9ZK0OSW0phiG23AwgbYGA1UdIwSBrjCBq4AUv9mxa1Yjo7Um9ZK0OSW0phiG 23ChgY+kgYwwgYkxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRAwDgYD VQQHEwdQaG9lbml4MREwDwYDVQQKEwhESUxMSUdBRjEPMA0GA1UECxMGSmFiYmVy MRcwFQYDVQQDEw5DaHJpcyBNY0RvbmFsZDEZMBcGCSqGSIb3DQEJARYKcGh4LWph YmJlcoIBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4GBAGzAwYHlBY+P ioqT8O4t4o30MkIDR7Q9Wqc0Uv1dUXViOKDzkzHXV/gB89yOmFVf6qNg7GB4rexs 0/fMmlSOkvXJPRCvmX05J9c5JpvcprkTjp7ECHPNZgaGsdNT+lilJ2f83uTvpJgM KoQY9OKbV4NnkxDM8lxCjvIvGvrbvnkR
-----END CERTIFICATE-----
subject=/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address
issuer=/C=FR/ST=FRANCE/L=Departement/O=organization/OU=Jabber/CN=contact name/Email=email address
---
No client certificate CA names sent
---
SSL handshake has read 1042 bytes and written 320 bytes
---
New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA
Server public key is 1024 bit
SSL-Session:
Protocol : TLSv1
Cipher : DES-CBC3-SHA
Session-ID: A23C1FB04F635EC09F92CBD722DAB8BB1503B54D4A0E9C61B3708CB33D6ED372
Session-ID-ctx:
Master-Key: C8C25C17D5B4312E1440DBC956FF5738829C50E16E8E704010B84B1A8D33C405995D8B7FB02E06988890C7ED400ACF32
Key-Arg : None
Start Time: 991792771
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
Ouvrir le fichier /usr/local/jabber/jabber.xml
et valider la prise en charge du mode SSL en repérant la ligne :
et en ajoutant la ligne suivante à la suite :
De même, repérer la ligne :
Redémarrez le serveur et tester avec cryptage ssl (voir rubrique [#demarrer-arreter Démarrer/Arrêter le serveur]).
Installation simplifiée :
Si compiler les sources vous paraît trop compliqué, sous Mandrake 9.1 et KDE 3.1, il suffit d'utiliser l'interface graphique (Configuration / Paquetages / Installer des logiciels). Le paquetage actuel est jabber-1.4.2a-6mdk.i586.rpm. Le fichier principal de configuration est alors /etc/jabber/jabber.xml
. Les seules modifications à effectuer sont celles indiquées ci-dessus concernant ce fichier. La clé SSL est générée automatiquement.
Démarrage/Arrêt du serveur :
Si vous avez installé Jabber depuis les sources (fichier tar.gz), pour démarrez le serveur, tapez :
Il y a un mode debug :
Si vous avez installé Jabber à partir du fichier rpm, pour démarrer/arrêter/redémarrer, votre serveur Jabber, tapez :
et le mode "debug" (option -D) :
# /usr/sbin/jabberd -h jabber.masociete.com -c /etc/jabber/jabber.xml -B -D
Pour vérifier que le serveur Jabber est effectivement en service, tapez :
Vous devez obtenir un résultat ressemblant aux deux lignes suivantes :
> 3053 ? S 0:00 /usr/sbin/jabberd -h jabber.masociete.com -c /etc/jabber/jabber.xml -B
où jabber.masociete.com est remplacé par le hostname de votre serveur.
Le serveur jabber utilise les ports 5222 (connexion normale avec le client), 5223 (connexion sécurisée avec le client) et 5269 (connexion entre serveurs). En tapant :
vous devez obtenir la ligne suivante, qui vous indique que le serveur Jabber écoute le port 5222 : :
De même pour 5223 et 5269.
Pour gérer le démarrage, vous pouvez utiliser chkconfig :
# chkconfig --add jabber # ajouter jabber à la liste des services
# chkconfig jabber off # inhibition du démarrage automatique
# chkconfig jabber on # démarrage automatique au démarrage
Passerelles :
Il existe plusieurs briques additionnelles au serveur jabber de base : mu-conference (conférence multi-utilisateurs), jud (Jabber User Directory : répertoire des utilisateurs), et les passerelles pour les utilisateurs de AIM, ICQ, MSN et Yahoo.
Les paquetages sont distribués avec la Mandrake 9.1, et peuvent donc être installés facilement (Configuration / Paquetages / Installer des logiciels).
Il faut ensuite les déclarer dans le fichier jabber.xml : c'est généralement expliqué dans le fichier README du paquetage (pour savoir ou il est : rpm -ql nom_du_paquetage
) et le fichier jabber.xml est abondamment commenté.
L'exemple suivant s'applique au paquetage jabber-jud. Une fois le paquetage installé, il existe un fichier jud.so
dans le répertoire /usr/lib/jabber/jud
Pour activer ce service, il faut insérer les lignes suivantes dans le fichier jabber.xml, dans la zone où sont défini les services :
<host>jud.monserveurjabber</host>
<load><jud>./jud/jud.so</jud></load>
<jud xmlns="jabber:config:jud">
<vcard>
<fn>Annuaire des utilisateurs locaux</fn>
<desc>Ce service est un annuaire des utilisateurs locaux</desc>
<url></url>
</vcard>
</jud>
</service>
Et à la place du jud existant, qui déclare l'annuaire du serveur jabber.org (users.jabber.org), dans la zone <browse>
:
<ns>jabber:iq:search</ns>
<ns>jabber:iq:register</ns>
</service>
Redémarrez jabber : le service d'annuaire devrait maintenant exister.
Depuis Gabber, il faut choisir Actions/Consultations des agents IM pour s'inscrire dans l'annuaire des utilisateurs locaux de jabber.masociete.com
Liste des extensions serveurs :
- Conférence multi-utilisateurs : http://mu-conference.jabberstudio.org/
- JUD (Jabber User Directory) : http://download.jabber.org/dists/1.4/final/
- Passerelle AIM : http://aim-transport.jabberstudio.org/
- Passerelle ICQ : http://icqv7-t.sourceforge.net/
- Passerelle MSN : http://msn-transport.jabberstudio.org/
- Passerelle Yahoo : http://yahoo-transport.jabberstudio.org/
Intranet :
Pour une utilisation en Intranet, sans communication avec l'extérieur, il faut réaliser les opérations suivantes :
- Interdire la communication entre serveurs : pour cela, fermer le port 5269 du firewall de votre organisation.
- Interdire la communication avec les clients extérieurs : fermer les ports 5222 et 5223 du firewall de votre passerelle internet.
- Commenter les sections
<service id="dnsrv"> Â </service> et <service id="s2s"> Â </service>
- Commenter la ligne
<update> Â </update>
(mise à jour automatique : ce sera à vous de la faire manuellement)
Votre serveur ne peut alors plus communiquer avec l'extérieur. Pour des raisons de sécurité, il est important de désactiver l'authentification par mot de passe en clair : commentez la ligne <mod_auth_plain> <mod_plain>
. N'oubliez pas de redémarrer le serveur jabber chaque fois que vous effectuez une modification du fichier jabber.xml (service jabber restart)
Webmin
Pour configurer facilement votre serveur, éventuellement depuis un poste distant, il est judicieux d'utiliser webmin. Si ce n'est pas déjà fait, installer Webmin puis, depuis un navigateur Internet, rentrez l'adresse https://198.168.0.1:10000
(toujours en remplaçant 192.168.0.1 par l'adresse de votre serveur), et se connecter en tant que root.
C:\WINNT\SYSTEM32\DRIVERS\ETC\HOSTS
:192.168.0.1 jabber.masociete.com
Ceci est d'ailleurs valable aussi pour vous connecter au serveur Jabber depuis un client installé sur un poste Windows.
Il faut ensuite choisir l'onglet "serveurs" et trouver l'icône "Jabber IM Server". L'interface graphique permet la définition de nombreux paramètres :
- Général Options : emplacement des fichiers log.
- IP Access Control : gestion des autorisations/refus d'accès.
- Messages : définition des messages de bienvenue de votre serveur.
- User filters : options de filtrage de message.
- Jabber modules : modules chargés par le serveur.
- Administration users : définition des administrateurs et de leurs droits.
Le droit lire permet de lire les messages destinés à l'administrateur du serveur et de voir la liste des utilisateurs connectés
Le droit écrire permet d'envoyer un message à tous les utilisateurs. - Karma traffic control : réglage de la bande passante allouée au serveur (taux de charge).
- Edit config file : édition du fichier jabber.xml.
Debugage
Il est possible de tester le bon foctionnement de Jabber via Telnet. Ouvrir une session telnet :
Le serveur doit vous répondre :
Connected to jabber.masociete.com.
Escape character is '^]'.
Taper les instructions suivantes :
to='jabber.masociete.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>
Vous devez recevoir immédiatement une réponse :
xmlns:stream='http://etherx.jabber.org/streams' id='nombre-aleatoire'
xmlns='jabber:client' from='jabber.masociete.com'>
Demander alors les informations nécessaires pour enregistrer un compte :
<query xmlns='jabber:iq:register'/>
</iq>
Vous devriez recevoir quelque chose du type :
<query xmlns='jabber:iq:register'>
<instructions>
Choose a username and password to register with this server.
</instructions>
<name/>
<email/>
<username/>
<password/>
</query>
</iq>
Envoyer alors vos informations d'enregistrement :
<query xmlns='jabber:iq:register'>
<username>jabberuser</username>
<password>secret</password>
<name>Votre-Nom</name>
<email>votre-email@domaine.com</email>
</query>
</iq>
Si tout fonctionne correctement, vous devez recevoir :
Si le répertoire de spool (/usr/local/jabber/spoll/jabber.masociete.com
) n'est pas configuré correctement :
Si votre nom d'utilisateur existe déjà :
Avant de vous logger sur votre compte nouvellement créé, demander au serveur quelles infos sont nécessaires :
<query xmlns='jabber:iq:auth'>
<username>jabberuser</username>
</query>
</iq>
Le serveur doit vous renvoyer les informations suivantes :
<query xmlns='jabber:iq:auth'>
<username>jabberuser</username>
<password/><digest/>
<resource/>
</query>
</iq>
Connectez-vous alors à votre compte :
<query xmlns='jabber:iq:auth'>
<username>jabberuser</username>
<password>secret</password>
<resource>telnet</resource>
</query>
</iq>
Le serveur doit vous répondre :
Indiquer au serveur que vous êtes en ligne :
Le serveur doit vous envoyer immédiatement un message de bienvenue (paramètrable dans le fichier jabber.xml) :
<subject>Welcome!<subject>
<body>
Welcome to the Jabber server at localhost -- we
hope you enjoy this service! For information about
how to use Jabber, visit the Jabber User's
Guide at http://docs.jabber.org/
</body>
</message>
Refaire la même démarche depuis un autre poste distant, avec un autre nom d'utilisateur, puis essayer d'envoyer un message à votre premier compte :
<body>hi!</body>
</message>
Pour quitter correctement vos sessions telnet :
Si tout a fonctionné correctement, vous pouvez installer un client (Gabber, Gaim, Psi, ...).
D'autres fichiers contiennent des informations importantes :
- /var/run/jabber/jabber.pid contient le numéro de processus affecté à jabber, lorsqu'il a démarré.
- /var/log/jabber/error.log contient la liste des erreurs.
- /var/log/jabber/record.log contient la liste des personnes qui se sont connectées à votre serveur, leur adresse IP, le client qu'ils utilisent et la durée de leur connexion.
- /var/lib/jabber contient un répertoire correspondant au nom (hostname) de votre serveur, dans lequel seront stockés les profils utilisateurs.
Ce sont des fichiers XML contenant notamment (en clair) le mot de passe de connexion et les contacts de l'utilisateurs. - /usr/share/doc/jabber-1.4.2a est un répertoire contenant une documentation succincte.
En cas de problème, ou pour obtenir plus de renseignement :
- la communauté francophone des utilisateurs de Jabber : http://www.jabberfr.org
- La FAQ utilisateur
- La FAQ administrateur
- Enfin, après avoir consulté les archives pour vérifier que votre question (et sa réponse) ne figure pas déjà quelquepart, la mailing-list administrateur : http://mailman.jabber.org/listinfo/jadmin/
Copyright
Copyright © 01/10/2003, Laurent DUBETTIER-GRENIER
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique, Contexte non commercial 2.0 : http://creativecommons.org/licenses/by-nc-sa/2.0/fr/ |