A travers cette article, je vais vous montrez comment mettre en place un server XMPP avec prosody et du chiffrement en TLS avec un certificat auto-signé mais si vous possédez un cerificat signé par une autorité vous pourrez l’utiliser sans problème.
XMPP est protocol de messagerie instantannée, c’est ce protocol qui est utilisé sur GoogleTalk de Google.
1 – Ajouter les dépots
2 – Récuperer la clé GPG du dépot
3 – Mettre à jour les dépôts et installer les packets nécessaires
4 – Création du certificat
5 – Génération du dhparam
6 – Configuration de prosody
7 – Ajouter un utilisateur
8 – DNS
9 – Firewall
10 – Redemarrer le service prosody
.
L’ensemble des commandes seronts éxécutées avec les privilèges root :
$ sudo -s password : #
1 – Ajouter les dépots :
# echo "deb http://packages.prosody.im/debian wheezy main" >> /etc/apt/sources.list # echo "deb http://ftp.debian.org/debian wheezy-backports main contrib non-free" >> /etc/apt/sources.list
.
2 – Récuperer la clé GPG du dépot
# wget https://prosody.im/files/prosody-debian-packages.key -O- | apt-key add -
.
3 – Mettre à jour les dépôts et installer les packets nécessaires :
# aptitude update && sudo aptitude install prosody libevent zlib lua-sec-prosody
.
4 – Création du certificat
# prosodyctl cert generate domain.tld
vérifier l’emplacement des certificats une fois qu’ils sont générés
vous pouvez les bouger dans /etc/prosody/certs/ si vous avez envie (on part du principe que c’est le cas pour la suite)
N’oubliez pas les deux lignes suivantes :
# chmod 600 /etc/prosody/certs/domain.tld.key # chown prosody:prosody /etc/prosody/certs/domain.tld.key # chown prosody:prosody /etc/prosody/certs/domain.tld.crt
.
5 – Génération du dhparam
$ openssl dhparam -out /etc/prosody/certs/dhparam.pem 4096
.
6 – Configuration de prosody
L’ensemble de la configuration se fait dans un seul fichier, adaptez les mots en rouge par vos informations.
# vim /etc/prosody/prosody.cfg.lua admins = { "exemple@domain.tld" } modules_enabled = { -- Modules obligatoires "roster"; "saslauth"; "tls"; "dialback"; "disco"; -- Pas essentielle mais recommendé "private"; "vcard"; "privacy"; "compression"; -- Modules utiles "legacyauth"; "version"; "uptime"; "time"; "ping"; "pep"; "register"; "adhoc"; -- Interfaces administrateur "admin_adhoc"; --"admin_telnet"; -- Autres fonctionnalité --"bosh"; --"httpserver"; --"groups"; --"announce"; --"welcome"; --"watchregistrations"; --"motd"; -- Ne pas supprimer "posix"; }; -- Modules désactivés modules_disabled = { -- "presence"; -- "message"; -- "iq"; -- "offline"; }; allow_registration = false; c2s_ports = { 5222 } s2s_ports = { 5269 } interfaces = { "IPv4", "IPv6" } c2s_require_encryption = true s2s_require_encryption = true s2s_secure_auth = false use_libevent = true allow_unencrypted_plain_auth = false; daemonize = true; compression_level = 5 -- Emplacements des Logs log = { info = "/var/log/prosody/prosody.log"; error = "/var/log/prosody/prosody.err"; { levels = { "error" }; to = "syslog"; }; } -- Emplacement du PID pidfile = "/var/run/prosody/prosody.pid"; ----------- Virtual hosts ----------- VirtualHost "domain.tld" enabled = true ssl = { key = "/etc/prosody/certs/domain.tld.key"; certificate = "/etc/prosody/certs/domain.tld.crt"; dhparam = "/etc/prosody/certs/dhparam.pem"; options = { "no_sslv2", "no_sslv3", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" }; ciphers = "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"; } Component "conference.domain.tld" "muc" component_secret = "Un mot de passe pour le salon" restrict_room_creation = true ------ Fichier de conf additionnel ------ Include "conf.d/*.cfg.lua"
.
7 – Ajouter un utilisateur
# prosodyctl adduser exemple@domain.tld
.
8 – DNS
N’oubliez pas d’ajouter les enregistrements SRV dans vos DNS :
_xmpp-client._tcp.jabber IN SRV 0 5 5222 exemple.domain.tld. _xmpp-server._tcp.jabber IN SRV 0 5 5269 exemple.domain.tld. _xmpp-server._tcp.conference IN SRV 0 5 5269 exemple.domain.tld.
.
9 – Firewall
Si vous utilisez un firewall, il faut ouvrir les ports 5269 et 5222 (IN et OUT) en TCP. La configuration pour iptables donne ceci :
# iptables -t filter -A INPUT -p tcp --dport 5269 -j ACCEPT # iptables -t filter -A OUTPUT -p tcp --sport 5269 -j ACCEPT # iptables -t filter -A INPUT -p tcp --dport 5222 -j ACCEPT # iptables -t filter -A OUTPUT -p tcp --sport 5222 -j ACCEPT
.
10 – Redemarrer le service prosody
# service prosody restart
Enjoy ! Vous pouvez maintenant utiliser un client XMPP tel que Pidgin qui est sous Windows et Linux, sur MAC vous pouvez utiliser Adium