« Plugins de prosody » : différence entre les versions
m (→cloud_notify : Ajout lien XEP) |
|||
(10 versions intermédiaires par 3 utilisateurs non affichées) | |||
Ligne 94 : | Ligne 94 : | ||
support = { "xmpp:servicechat@example.com?join" }, | 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 : <code>invites_page = "https://{host}:5281/invites_page?{invite.token}"</code> | |||
D'avoir installé les paquets Debian <code>libjs-bootstrap4 libjs-jquery</code>. | |||
Alors la commande <code>prosodyctl mod_invites generate example.com</code> retournera un lien du type <code>https://example.com:5281/invites_page?DL9JGrJNz-rUkMtI</code>. | |||
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 : | |||
[[Image:Screenshot-invite-page.png]] | |||
La liste des jetons de création de compte en cours peut être visualisée directement dans le fichier <code>/var/lib/prosody/domaine.ext/invite_token.dat</code>. | |||
Source : [https://blog.prosody.im/great-invitations/] [https://modules.prosody.im/mod_invites_page.html] | |||
===== watchregistrations ===== | ===== watchregistrations ===== | ||
Ligne 159 : | Ligne 182 : | ||
===== http_upload ===== | ===== http_upload ===== | ||
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. | 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 [https://xmpp.org/extensions/xep-0363.html 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). | Ce module fait partie de ceux qui ont besoin d’une configuration HTTP pour fonctionner (voir plus haut). | ||
Ligne 178 : | Ligne 203 : | ||
Et voici un exemple de configuration pour nginx (analogue | Et voici un exemple de configuration pour nginx (analogue à celle présente sur jabberfr) : | ||
server { | server { | ||
Ligne 205 : | Ligne 230 : | ||
===== inject_ecaps2 ===== | ===== 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. | Permet de prendre en charge le nouveau format d’''Entity Capabilities'' de la [https://xmpp.org/extensions/xep-0390.html XEP-0390] (au lieu de la [https://xmpp.org/extensions/xep-0115.html XEP-0115]) sans intervention des utilisateurs. | ||
===== ipcheck ===== | ===== ipcheck ===== | ||
Permet à un client de connaître son adresse IP externe, via la XEP-0279. | Permet à un client de connaître son adresse IP externe, via la [https://xmpp.org/extensions/xep-0279.html XEP-0279]. | ||
===== smacks ===== | ===== 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. | Le module <b>smacks</b> implémente la [https://xmpp.org/extensions/xep-0198.html 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. | ||
[https://modules.prosody.im/mod_smacks.html Documentation (en anglais)] | [https://modules.prosody.im/mod_smacks.html Documentation (en anglais)] | ||
Ligne 219 : | Ligne 244 : | ||
===== turncredentials ===== | ===== 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. | Le module <b>turncredentials</b> 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 [https://github.com/coturn/coturn coturn]), et le partage d’informations dans la configuration de prosody. | Son activation requiert la configuration d’un serveur STUN/TURN (à JabberFR, nous avons choisi le serveur [https://github.com/coturn/coturn coturn]), et le partage d’informations dans la configuration de prosody. | ||
Ligne 229 : | Ligne 254 : | ||
[https://modules.prosody.im/mod_turncredentials.html Documentation (en anglais)] | [https://modules.prosody.im/mod_turncredentials.html Documentation (en anglais)] | ||
===== s2s_auth_posh ===== | |||
Ce module permet d’ajouter la prise en charge de [https://www.rfc-editor.org/rfc/rfc7711.html POSH] qui est un autre moyen de valider les certificats. | |||
==== Plugins concernant l'administration ==== | ==== Plugins concernant l'administration ==== | ||
Ligne 234 : | Ligne 263 : | ||
===== s2s_blacklist ===== | ===== 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 | 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 [https://github.com/JabberSPAM/blacklist/blob/master/blacklist.txt JabberSPAM]. La liste lors de l’écriture de cet article est la suivante : | Un bon départ est la liste du dépôt [https://github.com/JabberSPAM/blacklist/blob/master/blacklist.txt JabberSPAM]. La liste lors de l’écriture de cet article est la suivante : | ||
Ligne 257 : | Ligne 286 : | ||
"xmpp.bytesund.biz", | "xmpp.bytesund.biz", | ||
} | } | ||
==== Plugins de monitoring ==== | ==== Plugins de monitoring ==== |
Dernière version du 8 novembre 2024 à 21:48
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.
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
.
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 = {}
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
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
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.
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; } }
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.
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.
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