Plugins de prosody

De Wiki JabberFR
Aller à la navigation Aller à la recherche

Tutoriels prosody

  1. Installation du serveur Jabber prosody
  2. Configuration de base du serveur prosody
  3. Création des comptes avec prosody
  4. Configuration des ports de prosody
  5. Configuration avancée de prosody
  6. Configuration de prosody et Coturn
  7. Intégration de LDAP dans prosody
  8. Configurer les passerelles pour prosody
  9. server2server (s2s) de prosody
  10. Plugins de prosody

Plugins inclus avec prosody

Prosody fournit une configuration de base avec déjà un certain nombre de plugins activés, il est recommandé de garder ces modules, et d’en ajouter d’autres. À titre d’exemple, voici la liste des modules fournis avec prosody 0.11 (les modules préfixés par -- ne sont pas activés) :

modules_enabled = {
                                              
       -- Generally required                                                                  
               "roster"; -- Allow users to have a roster. Recommended ;)
               "saslauth"; -- Authentication for clients and servers. Recommended if you want to log in.
               "tls"; -- Add support for secure TLS on c2s/s2s connections
               "dialback"; -- s2s dialback support       
               "disco"; -- Service discovery                                                  
                                              
       -- Not essential, but recommended
               "carbons"; -- Keep multiple clients in sync
               "pep"; -- Enables users to publish their avatar, mood, activity, playing music and more
               "private"; -- Private XML storage (for room bookmarks, etc.)
               "blocklist"; -- Allow users to block communications with other users
               "vcard4"; -- User profiles (stored in PEP)
               "vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard
                                                                                              
       -- Nice to have                                                                        
               "version"; -- Replies to server version requests                      
               "uptime"; -- Report how long server has been running
               "time"; -- Let others know the time here on this server
               "ping"; -- Replies to XMPP pings with pongs                     
               "register"; -- Allow users to register on this server using a client and change passwords
               --"mam"; -- Store messages in an archive and allow users to access it
               --"csi_simple"; -- Simple Mobile optimizations         
                                                                                              
       -- Admin interfaces
               "admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands
               --"admin_telnet"; -- Opens telnet console interface on localhost port 5582
                                                                                              
       -- HTTP modules
               --"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
               --"websocket"; -- XMPP over WebSockets
               --"http_files"; -- Serve static files from a directory over HTTP
                                              
       -- Other specific functionality
               --"limits"; -- Enable bandwidth limiting for XMPP connections
               --"groups"; -- Shared roster support                     
               --"server_contact_info"; -- Publish contact information for this service
               --"announce"; -- Send announcement to all online users      
               --"welcome"; -- Welcome users who register accounts
               --"watchregistrations"; -- Alert admins of registrations
               --"motd"; -- Send a message to users when they log in
               --"legacyauth"; -- Legacy authentication. Only used by some old clients and bots.
               --"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
}



Fonctionnalités de base

mam

Le module mam, (pour Message Archive Management, la XEP-0313) permet au serveur de garder un historique des messages échangés par l’utilisateur (n’inclut pas ceux échangés dans des salons de discussion, qui gardent leur propre historique). Si votre but est d’avoir un serveur à destination d’utilisateurs grand public, il est fortement recommandé de l’activer, afin d’avoir une bonne expérience utilisateur entre les différents clients.

csi

Le module csi (intégré à prosody depuis la version 0.11) permet à un client d’envoyer des informations d’état au serveur, pour qu’il puisse mettre en place différentes optimisations afin de limiter les échanges entre les deux (par exemple, l’information qu’un utilisateur est en train de rédiger un message dans un salon de discussion n’a pas beaucoup d’intérêt pour votre client sur téléphone portable s’il est dans votre poche).

Ce module ne fait rien en lui-même, et il faut activer d’autres modules csi_ pour que les optimisations désirées soient mises en place. Il y a un choix varié et ce choix est laissé aux administrateurs du serveur.

csi_simple

Ce module applique certaines optimisations décrites dans la section juste au-dessus.

Documentation (en anglais)

Administration

admin_telnet

Permet l’administration du serveur via telnet en localhost sur le port 5582. N’importe quel utilisateur unix du serveur peut y accéder, c’est donc une faille de sécurité si quiconque d’autre que les administrateurs du serveur ont un compte dessus.

server_contact_info

Le but de ce module est de fournir un moyen de contact standardisé des administratrices et administrateurs d’un service XMPP. Il est standardisé dans la XEP-0157, et est donc accessible à tous. Il est particulièrement nécessaire quand on veut gérer un serveur ouvert aux inscriptions, puisque si aucun moyen de contact n’est trouvable facilement et que du spam est émis depuis ce domaine, il peut se retrouver dans la liste JabberSPAM.

contact_info = {
       abuse = { "mailto:abuse@example.com", "xmpp:admin1@example.com", "xmpp:admin2@example.com" },
       admin = { "mailto:xmpp@example.com", "xmpp:admin1@example.com", "xmpp:admin2@example.com" },
       feedback = { "xmpp:servicechat@example.com?join" },
       security = { "mailto:security@example.com",  "xmpp:admin1@example.com", "xmpp:admin2@example.com" },
       support = { "xmpp:servicechat@example.com?join" },
}
Invitations (invites, invites_page)

Assurer vous de charger les modules suivants :

       "invites";
       "invites_adhoc";
       "invites_page";
       "invites_register";
       "invites_register_web";
       "http_libjs";

D'avoir le paramètre : invites_page = "https://{host}:5281/invites_page?{invite.token}"

D'avoir installé les paquets Debian libjs-bootstrap4 libjs-jquery.

Alors la commande prosodyctl mod_invites generate example.com retournera un lien du type https://example.com:5281/invites_page?DL9JGrJNz-rUkMtI.

Assurez vous d'avoir ouvert le port 5281 vers votre serveur, et alors le lien ci-dessous sera servi par Prosody et retournera la page d'invitation incluant le jeton de création du compte :

La liste des jetons de création de compte en cours peut être visualisée directement dans le fichier /var/lib/prosody/domaine.ext/invite_token.dat.

Source : [1] [2]

watchregistrations

Ce module permet de recevoir un message XMPP provenant du domaine pour chaque nouveau compte utilisateur créé, qui contient le nom d’utilisateur ainsi que l’IP depuis laquelle le compte a été créé.

Plugins utilisant HTTP

Un certain nombre de plugins requièrent l’activation du serveur HTTP intégré à prosody.

Il est recommandé de mettre un serveur HTTP plus standard devant prosody, qui agira comme un proxy, gérera le HTTPS, etc, comme nginx.


http

Le module http permet d’activer le serveur HTTP de prosody. Il est requis pour pouvoir utiliser tous les modules utilisant HTTP.

Pour l’utiliser en ayant un autre serveur HTTP devant, il suffit donc d’écouter sur localhost :

http_interfaces = { "::1" }
https_interfaces = {}


Documentation (en anglais)

websocket

Le module websocket permet à un client web de se connecter à XMPP à travers un websocket. La documentation (voir le lien) donne des exemples de configuration pour le configurer dans son serveur Nginx ou Apache.

Dans ce cas, il faut également mettre l’option suivante dans la configuration de prosody pour lui dire de ne pas s’inquiéter pour le chiffrement de la connexion (puisqu’il est géré par le serveur web et pas par prosody) :

consider_websocket_secure = true

Documentation (en anglais)

bosh

Le module bosh est une façon moins efficace et plus ancienne de se connecter à XMPP avec les technologies web.

De la même façon que pour les websockets, il faut configurer le serveur web (des exemples sont là aussi donnés dans la documentation officielle), et activer une option pour indiquer à prosody que la sécurité de la connexion est assurée :

consider_bosh_secure = true

Documentation (en anglais)

Plugins venant de prosody-modules

Un grand nombre de plugins écrits par la communauté prosody existent, et sont visibles sur modules.prosody.im. Les développeurs de prosody sont un peu perfectionnistes, et ils écrivent des modules qui vont également dans ce dépôt qui peuvent ensuite passer dans le cœur de prosody si ils atteignent un degré de maturité jugé suffisant.

Pour obtenir les modules, il faut cloner le dépôt https://hg.prosody.im/prosody-modules/ avec mercurial.


bookmarks

Deux standards (un plus ancien et un plus moderne) sont en utilisation pour la gestions des marque-pages XMPP, ce qui pose des problèmes de synchronisation si l’utilisateur utilise à la fois un client ancien et un client plus récent. Ce module permet de synchroniser les deux automatiquement.

cloud_notify

Ce module permet d’utiliser la XEP-0357, qui est l’interaction XMPP avec les différents services de notifications push des systèmes d’exploitation mobile. Il est recommandé de l’activer, pour le bon fonctionnement des clients mobiles mais surtout particulièrement des clients iOS.

Documentation (en anglais)

http_upload

Nota : ce module a été déprécié en 2024 et n'est plus installable

Le plugin HTTP upload permet l’échange de fichiers avec la XEP-0363, qui consiste à envoyer et recevoir des fichiers via HTTP, en partageant l’adresse avec des métadonnées à travers XMPP. Il est pris en charge par la grande majorité des clients et même ceux qui ne le prennent pas en charge reçoivent l’adresse des fichiers.

Ce module fait partie de ceux qui ont besoin d’une configuration HTTP pour fonctionner (voir plus haut).

Voici un exemple de configuration du composant côté prosody :

Component "upload.mondomaine.fr" "http_upload"
       modules_disabled = {
               "s2s";
               "tls";
       }
       http_external_url = "https://upload.mondomaine.fr/"
       http_paths = {
               upload = "/";
       }
       http_upload_path = "/srv/http/upload.mondomaine.fr/"
       http_upload_file_size_limit = 10 * 1024 * 1024


Et voici un exemple de configuration pour nginx (analogue à celle présente sur jabberfr) :

   server {
       listen      [::]:443 ssl http2;
       server_name upload.mondomaine.fr;
       root /srv/http/$host;
       client_max_body_size 10m;
       expires 1y;
       location = / {
           proxy_pass http://[::1]:5280;
           proxy_set_header Host $host;
       }
       location / {
           limit_except GET {
               proxy_pass http://[::1]:5280;
           }
           proxy_set_header Host $host;
           #proxy_set_header Origin $origin;
       }
   }

Documentation (en anglais)

Note : Il existe également le module http_upload_external qui permet d’utiliser un composant découplé de prosody et compatible avec les autres serveurs.

inject_ecaps2

Permet de prendre en charge le nouveau format d’Entity Capabilities de la XEP-0390 (au lieu de la XEP-0115) sans intervention des utilisateurs.

ipcheck

Permet à un client de connaître son adresse IP externe, via la XEP-0279.

smacks

Le module smacks implémente la XEP-0198 (Stream Management) et permet une reconnexion transparente à une session XMPP déjà en cours. Elle est particulièrement utile sur les réseaux mobiles.

Documentation (en anglais)

turncredentials

Le module turncredentials sert à établir des canaux de discussion audio et vidéo en pouvant passer outre les différentes restrictions réseau en place, notamment sur les réseaux mobiles qui sont très limités.

Son activation requiert la configuration d’un serveur STUN/TURN (à JabberFR, nous avons choisi le serveur coturn), et le partage d’informations dans la configuration de prosody.

turncredentials_host = "votreserveurturn.example.com"
turncredentials_secret = "un secret partagé entre prosody et le serveur turn"

Le secret doit être unique et aléatoire, et vous pouvez en générer un avec la commande openssl rand -base64 32.

Documentation (en anglais)

s2s_auth_posh

Ce module permet d’ajouter la prise en charge de POSH qui est un autre moyen de valider les certificats.

Plugins concernant l'administration

s2s_blacklist

Le plugin s2s_blacklist permet de maintenir une liste statique de serveurs avec lesquels la communication n’est pas désirée, par exemple parce que les administrateurs ne répondent pas aux requêtes qui leurs sont faites pour purger les comptes de spammeurs.

Un bon départ est la liste du dépôt JabberSPAM. La liste lors de l’écriture de cet article est la suivante :

s2s_blacklist = {
   "bashtel.ru",
   "creep.im",
   "darkengine.biz",
   "default.rs",
   "hiddenlizard.org",
   "jabber.cd",
   "jabber.freenet.de",
   "jabber.ipredator.se",
   "jabber.npw.net",
   "jabber.sampo.ru",
   "labas.biz",
   "otr.chat",
   "paranoid.scarab.name",
   "rassnet.org",
   "safetyjabber.com",
   "sj.ms",
   "xmpp.bytesund.biz",
}

Plugins de monitoring

Pour pouvoir obtenir des statistiques sur l’utilisation de son serveur, et ainsi avoir une interface analogue à stats.jabberfr.org, il faut activer les modules suivants :

               "prometheus";
               "measure_cpu";
               "measure_memory";
               "measure_client_identities";
               "measure_client_features";
               "measure_client_presence";
               "measure_message_e2ee";
               "measure_registration";


Il faudra également avoir ces lignes dans la configuration globale :

statistics = "internal"
statistics_interval = 15


Documentation (en anglais)

Exemple de configuration