[Tuto] Prosody XMPP avec TLS

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *