---
comments_url: https://com.richard-dern.fr/post/519
date: '2012-02-08 00:34:00'
dossier:
- Créer son propre Cloud
entreprises:
- Google
- Facebook
- Twitter
personnages_de_fiction:
- CASE
tags:
- Prosody
- XMPP
- Réseaux sociaux
- Cloud
- Serveur
- Web
- Certificat
- Apache
- phpMyAdmin
- Firewall
- DNS
- Bind
- Client
- Plus
- GNU/Linux
- Chiffrement
title: Communiquer via XMPP
weather:
humidity: 68
illuminance: 0.0
precipitations: false
pressure: 1028.9
source:
- open-meteo
temperature: -10.5
wind_direction: 57
wind_speed: 17.7
weight: 7
---
On utilise le protocole [XMPP](http://xmpp.org/) notamment dans des applications de messagerie instantanées, mais son ouverture permet de l'embarquer dans à peu près tout type d'applications, y compris des réseaux sociaux.
Nous allons installer sur notre cloud personnel un serveur XMPP, qui, bien sûr, va nous permettre de communiquer avec le monde entier, mais dont nous nous servirons également à d'autres fins...
Nous exploiterons le serveur [prosody](http://prosody.im/), et son serveur [BOSH](http://fr.wikipedia.org/wiki/BOSH), qui va nous permettre de faire appel à une application web pour avoir son propre webchat et créer sa propre communauté.
En outre, nous nous en servirons dans un prochain article consacré à un remplaçant pour Google+/facebook/twitter.
Depuis que j'écris [cette série d'articles consacrés au cloud personnel](/interets/informatique/2012/02/05/creer-son-propre-cloud-introduction/), j'essaye de proposer des guides mettant en place des solutions évolutives.
Notre [serveur mail](/interets/informatique/2012/02/06/installation-de-son-propre-serveur-mail/) est capable d'accueillir une infinité (virtuelle) de domaines et d'utilisateurs par exemple.
J'appliquerai le même principe à prosody : vous pourrez disposer d'un nombre illimité de comptes sur un nombre illimité de domaines.
L'installation de prosody ne pose aucun problème, à condition de configurer le dépôt :
```bash
echo "deb http://packages.prosody.im/debian stable main" > /etc/apt/sources.list.d/prosody.list
apt-get update
apt-get install prosody-0.9 liblua5.1-0 liblua5.1-dbi0 liblua5.1-expat0 liblua5.1-filesystem0 liblua5.1-sec0 liblua5.1-socket2 lua-zlib lua5.1
```
Nous utiliserons notre base de données MySQL pour stocker les données de prosody.
On va donc devoir créer un utilisateur dédié, que nous nommerons par exemple _XMPP_.
[Procédez comme d'habitude](/interets/informatique/2012/02/07/installation-dun-serveur-http-https/) (générez le mot de passe, définissez l'hôte comme étant "_localhost_", et créez la base de données portant le même nom).
## Configuration
On va se passer de la configuration par défaut :
```bash
cd /etc/prosody
/etc/init.d/prosody stop
mv prosody.cfg.lua prosody.cfg.lua-orig
rm conf.avail/* conf.d/*
nano prosody.cfg.lua
```
```text
storage = "sql"
sql = {
driver = "MySQL";
database = "XMPP";
host = "localhost";
username = "XMPP";
password = "VotreMotDePasse";
}
admins { "contact@exemple.fr" }
modules_enabled = {
"roster";
"saslauth";
"dialback";
"disco";
"tls";
"private";
"vcard";
"compression";
"legacyauth";
"version";
"uptime";
"time";
"ping";
"pep";
"register";
"privacy";
"posix";
"bosh";
"groups";
"announce";
"watchregistrations";
};
bosh_ports { "http-bind" }
cross_domain_bosh = true
allow_registration = true;
log = {
{ levels = { "error" }; to = "syslog"; };
{ levels = { "error" }; to = "file"; filename = "/var/log/prosody/prosody.err"; };
{ levels = { min = "info" }; to = "file"; filename = "/var/log/prosody/prosody.log"; };
}
pidfile = "/var/run/prosody/prosody.pid"
Include "/etc/prosody/conf.d/*.lua"
```
Quelques remarques :
- La directive _admins_ permet de renseigner prosody des comptes autorisés à accéder aux fonctions d'administrations. Vous devez y mettre l'adresse du compte que vous allez prochainement vous créer. Cette directive permet notamment, grâce au module _watchregistrations_ d'être tenu informé via message instantané de la création de nouveaux comptes, ce qui est utile si vous affectez la valeur _true_ à la directive _allow_registration_. Si vous ne souhaitez pas autoriser les "étrangers"à s'enregistrer sur votre serveur XMPP, supprimez la ligne"_watchregistrations_" et affectez la valeur _false_ à la directive _allow_registration_
- L'installation par défaut n'inclue pas la directive _Include_ à la fin du fichier
Créons ensuite notre premier hôte virtuel :
```text
nano conf.avail/exemple.fr.cfg.lua
```
```text
VirtualHost "exemple.fr"
enabled = true
ssl = {
key = "/scripts/certificate_authority/prosody/exemple.fr.key";
certificate = "/scripts/certificate_authority/prosody/exemple.fr.crt";
}
Component "conference.exemple.fr" "muc"
```
Vu que nous définissons une clé et un certificat, il faut les créer :
```bash
/scripts/certificate_authority/make_request prosody exemple.fr
/scripts/certificate_authority/sign_request prosody exemple.fr
```
Warning : Lorsque le _Common Name_ vous sera demandé, indiquez le nom de domaine !
Et dans notre cas, acceptez la création d'une clé sans mot de passe !
De la même manière que la commande _a2ensite_ fournie par apache créé un lien symbolique depuis _/etc/apache2/sites-available/_ vers _/etc/apache2/sites-enabled/_ pour l'hôte virtuel concerné, il faut activer les hôtes virtuels dans prosody.
Malheureusement, il n'existe pas de commande du même genre, il faut donc créer ce lien à la main :
```bash
ln -s conf.avail/exemple.fr conf.d/exemple.fr
```
On peut redémarrer prosody :
```bash
/etc/init.d/prosody start
```
Et créer votre premier utilisateur :
```bash
prosodyctl adduser contact@exemple.fr MotDePasse
```
Une fois fait, retournez dans phpMyAdmin pour vérifier que l'utilisateur a été correctement enregistré en base de données.
## Firewall
```bash
nano /scripts/firewall
```
Entre les lignes :
```text
##### Configuration personnalisée #####
```
Et :
```text
##### Fin : Configuration personnalisée #####
```
Rajoutez les lignes suivantes :
```text
${IPT} -A SERVICES -p tcp --dport 5222 -j ACCEPT
${IPT} -A SERVICES -p tcp --dport 5269 -j ACCEPT
```
N'oubliez pas de relancer le script :
```bash
/scripts/firewall
```
## DNS
Éditons le fichier de configuration de notre zone :
```bash
nano /etc/bind/db.exemple.fr
```
Modifiez l'identifiant du fichier de configuration, comme d'habitude, puis ajoutez les lignes suivantes à la fin du fichier :
```text
_xmpp-client._tcp 86400 IN SRV 20 0 5222 exemple.fr.
_xmpp-server._tcp 86400 IN SRV 20 0 5269 exemple.fr.
```
Et redémarrez bind :
```bash
/etc/init.d/bind9 restart
```
Votre serveur est prêt, fonctionnel, et accessible de l'extérieur.
## Installation d'un client XMPP
Il existe une grande variété de clients XMPP, qui s'installent tous très facilement : jetez un oeil à la logithèque de votre distribution préférée pour en trouver.
[Une liste est disponible](http://xmpp.org/xmpp-software/clients/) sur le site officiel du protocole XMPP.
Parmi les plus répandus sous GNU/Linux on citera [pidgin](http://www.pidgin.im/), [empathy](http://live.gnome.org/Empathy), ou encore [kopete](http://kopete.kde.org/).
## Installation du webchat
Nous installerons [Jappix](https://project.jappix.com/).
Il va nous permettre un certain nombre de choses, et notamment tester le serveur BOSH.
Pour commencer, on va créer un nouveau sous-domaine :
```bash
mkdir-p /var/www/exemple.fr/xmpp/{www,log}
nano /etc/apache2/sites-available/xmpp.exemple.fr
```
```text
ServerName xmpp.exemple.fr.fr
Redirect / https://xmpp.exemple.fr/
ServerName xmpp.exemple.fr
DocumentRoot /var/www/exemple.fr/xmpp/www
SSLEngine On
SSLCertificateFile /scripts/certificate_authority/xmpp.exemple.fr.crt
SSLCertificateKeyFile /scripts/certificate_authority/xmpp.exemple.fr.key
ProxyPass /http-bind/ http://127.0.0.1:5280/http-bind/
ProxyPassReverse /http-bind/ http://127.0.0.1:5280/http-bind/
Header set Access-Control-Allow-Origin "*"
```
Comme d'habitude lors de la création d'un site sécurisé, on créé la paire clé/certificat :
```bash
/scripts/certificate_authority/make_request apache xmpp.exemple.fr
/scripts/certificate_authority/sign_request apache xmpp.exemple.fr
chown www-data:www-data /scripts/certificate_authority/apache/*
```
Warning : Lorsque le _Common Name_ vous sera demandé, indiquez le nom de domaine !
Et dans notre cas, acceptez la création d'une clé sans mot de passe !
```bash
a2ensite xmpp.exemple.fr
/etc/init.d/apache2 restart
```
On télécharge et on installe Jappix :
```bash
cd /usr/src
wget http://codingteam.net/project/jappix/download/file/jappix-spaco-0.9.zip
unzip jappix-spaco-0.9.zip
```
Important : Si vous n'avez pas encore installé le paquet _unzip_ et que vous avez une erreur lors de la décompression de l'archive, installez-le :
```text
apt-get install unzip
```
```bash
cp -Rv jappix/* /var/www/exemple.fr/xmpp/www/
chown -R www-data:www-data
```
Et accédez au site pour le configurer, via `http://xmpp.exemple.fr`.
La première étape va être de créer l'utilisateur administrateur, alors laissez-vous guider par l'assistant.
Vous avez ensuite accès à d'autres options, et particulièrement les hôtes, que vous configurerez comme suit :
| Hôte principal | exemple.fr |
| -------------- | ------------------------------------ |
| Hôte de salons | `conference.exemple.fr` |
| Hôte pubsub | `pubsub.exemple.fr ` |
| Hôte BOSH | `https://xmpp.exemple.fr/http-bind/` |
Pensez également à configurer la variable "_Salons à rejoindre_"de l'onglet"_Configuration_", en spécifiant le nom d'un salon quelconque, sous la forme *salon@conference.exemple.fr*.
Cochez également les cases relatives au chiffrement et au HTTPS, et la case "_Lien du gestionnaire_".
Enfin, décochez la case "_Verrouiller l'hôte_" si vous souhaitez que des comptes non gérés par votre serveur puissent se connecter.
## Tests
Testez ensuite une première fois la connexion, en cliquant sur le bouton "_Fermer_" tout en haut à droite.
Vous pourrez ensuite revenir à l'interface de configuration depuis le lien "_Gestionnaire_".
Cliquez sur le gros bouton "_Connexion_", indiquez vos identifiants (par exemple, *contact@exemple.fr*) et votre mot de passe.
La connexion devrait être immédiate.
Si ce n'est pas le cas, c'est probablement une question de connexion sécurisée.
Consultez les fichiers journaux de prosody et apache pour tenter de déterminer d'où vient le problème.
Important : Le second test est optionnel : il devrait être effectué si vous permettez à des clients qui n'existent pas sur votre serveur de se connecter.
Si vous avez réussi à vous connecter, nous allons procéder à un second test, visant à vérifier le bon fonctionnement du serveur BOSH pour les clients externes.
Si vous disposez déjà d'un compte XMPP ailleurs que sur votre propre serveur, essayez de vous connecter avec ces identifiants.
Sinon, vous pouvez vous créer rapidement une adresse sur le site [jabber.org](http://register.jabber.org/).