On utilise le protocole XMPP 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, et son serveur 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, j’essaye de proposer des guides mettant en place des solutions évolutives. Notre 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 :
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 (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 :
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
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 :
nano conf.avail/exemple.fr.cfg.lua
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 :
/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 :
ln -s conf.avail/exemple.fr conf.d/exemple.fr
On peut redémarrer prosody :
/etc/init.d/prosody start
Et créer votre premier utilisateur :
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
nano /scripts/firewall
Entre les lignes :
##### Configuration personnalisée #####
Et :
##### Fin : Configuration personnalisée #####
Rajoutez les lignes suivantes :
${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 :
/scripts/firewall
DNS
Éditons le fichier de configuration de notre zone :
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 :
_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 :
/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 sur le site officiel du protocole XMPP. Parmi les plus répandus sous GNU/Linux on citera pidgin, empathy, ou encore kopete.
Installation du webchat
Nous installerons Jappix. 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 :
mkdir-p /var/www/exemple.fr/xmpp/{www,log}
nano /etc/apache2/sites-available/xmpp.exemple.fr
<VirtualHost *:80>
ServerName xmpp.exemple.fr.fr
Redirect / https://xmpp.exemple.fr/
</VirtualHost>
<VirtualHost *:443>
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 "*"
</VirtualHost>
Comme d’habitude lors de la création d’un site sécurisé, on créé la paire clé/certificat :
/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 !
a2ensite xmpp.exemple.fr
/etc/init.d/apache2 restart
On télécharge et on installe Jappix :
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 :
apt-get install unzip
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.
Richard Dern
Échanger autour de ce texte
Si vous souhaitez réagir publiquement, un fil dédié vous attend.
Ouvrir le fil de discussion