Table des matières
Service xmpp.chapril.org
Aspects notables de cette instance XMPP
Identifiants XMPP
Les comptes créés ont des identifiants de la forme pseudo@chapril.org.
Lutte anti-spam/anti-bot
L'inscription au service est ouverte à tout le monde. Il y a actuellement deux mécanismes qui peuvent un peu limiter les abus.
Actuellement l'inscription ne peut se faire qu'à travers un client XMPP, ce qui rend déjà la tâche de création de comptes un peu plus compliquée que si c'était faisable par un formulaire Web classique. Attention donc le jour où on envisage d'activer le module mod_register_web.
Lors de l'inscription un captcha évolué est présenté, limitant ainsi la création de comptes massive par des bots, car posant une question variable et demandant une manipulation de l'information présentée (par exemple addition, suppression de chiffres dans un nombre, etc). En supplément, on limite le nombre de captcha émis par IP avec la règle captcha_limit, configurée à 10 dans le fichier de configuration d'ejabberd, qui limite le nombre de captcha émis par JID/IP par minute.
Quotas de stockage
Les données partagées (photos, vidéos, pdf, …) sont stockées pendant 380 jours maximum. C'est un peu plus qu'une année et ça peut être utile par exemple à un repas de famille annuel où on aimerait revoir une photo prise l'an passé.
Chaque compte dispose d'un quota de 500 Mo pour ces données. Le mécanisme de quota dans ejabberd n'est pas bloquant, lorsqu'un nouveau fichier est envoyé et que le quota du compte est atteint alors ejabberd supprime le ou les plus anciens fichiers de ce compte pour libérer suffisamment de place pour le nouveau fichier.
Données personnelles
Intégration du service dans l'infra Chapril
Routage
Les ports à ouvrir :
- TCP 5222 : xmpp-client
- TCP 5223 : xmpps-client
- TCP 5269 : xmpp-server
- TCP 3478 : _stun et _turn
- TCP 5349 : _stuns et _turns
Certificats SSL
Le service XMPP n'étant pas un simple service Web comme la plupart des autres services Chapril, il a nécessité quelques adaptations dans la façon de gérer les certificats letsencrypt.
En attendant, la doc correspondante pour mumble devrait suffire (à mutualiser peut-être ?)
- pourquoi du DNS-challenge sur xmpp et du HTTP-challenge sur bastion ?
- pourquoi du wildcard plutôt qu'une une liste exhaustive de AltNames ?
- sur bastion
- xmpp.chapril.org : uniquement pour le site Web et pour le service de partage de fichiers http_upload
- sur xmpp
- chapril.org
- *.chapril.org (wildcard)
Enregistrements DNS
xmpp IN A xxxxxxxxxx muc IN CNAME xmpp echo IN CNAME xmpp pubsub-xmpp IN CNAME xmpp upload-xmpp IN CNAME xmpp irc IN CNAME xmpp ;proxy IN CNAME xmpp _xmpp-server._tcp.chapril.org. 86400 IN SRV 10 10 5269 xmpp.chapril.org. _xmpp-client._tcp.chapril.org. 86400 IN SRV 10 10 5222 xmpp.chapril.org. _xmpps-client._tcp.chapril.org. 86400 IN SRV 5 10 5223 xmpp.chapril.org. _stun._udp.chapril.org. 86400 IN SRV 10 10 3478 xmpp.chapril.org. _stun._tcp.chapril.org. 86400 IN SRV 10 10 3478 xmpp.chapril.org. _stuns._tcp.chapril.org. 86400 IN SRV 10 10 5349 xmpp.chapril.org. _turn._tcp.chapril.org. 86400 IN SRV 10 10 3478 xmpp.chapril.org. _turn._udp.chapril.org. 86400 IN SRV 10 10 3478 xmpp.chapril.org. _turns._tcp.chapril.org. 86400 IN SRV 10 10 5349 xmpp.chapril.org. _xmppconnect.chapril.org. 86400 IN TXT "_xmpp-client-xbosh=https://xmpp.chapril.org/bosh" _xmppconnect.chapril.org. 86400 IN TXT "_xmpp-client-websocket=wss://xmpp.chapril.org/ws"
Première installation
Pour mémoire voici comment j'ai réalisé la première installation.
Un serveur PostgreSQL dédié avec un compte utilisateur dédié (à priori la version exacte importe peu)
apt install postgresql sudo -u postgres createuser -P ejabberd sudo -u postgres createdb -O ejabberd ejabberd
Puis, après avoir activé le dépôt Debian stretch-backports (pour avoir une version ejabberd pas trop vieille) :
sudo apt install -t stretch-backports ejabberd erlang-p1-pgsql
psql -U ejabberd -h localhost ejabberd < /usr/share/ejabberd/sql/pg.new.sql
Pour le pont XMPP/IRC Biboumi :
sudo apt install biboumi
Modération
Désactiver un compte
Génère un mot de passe aléatoire pour un compte et ferme immédiatement toutes les sessions actives de ce compte . (encore jamais testé)
sudo -u ejabberd ejabberdctl ban_account <username> chapril.org "Raison du bannissement"
Si besoin de réactiver le compte, il faut lui affecter un nouveau mot de passe (il n'est pas possible de restaurer le précédent) et le communiquer à son propriétaire.
sudo -u ejabberd ejabberdctl change_password <username> chapril.org <nouveau_mot_de_passe>
Supprimer un compte
Pour supprimer définitivement un compte :
sudo -u ejabberd ejabberdctl unregister <username> chapril.org
Retirer des messages inappropriés dans un salon
Actuellement, ejabberd
ne prend pas encore en charge la XEP-0425: Message Moderation (cf. github#3730).
Donc en attendant, pour nettoyer d'éventuels messages inappropriés on est limité :
- on peut retirer/modifier les message dans l'archive MAM, donc ça n'aura aucun effet sur les clients XMPP qui auraient déjà reçu les messages en question
- il faut nettoyer à la main directement en BDD, donc il faut être très prudent et bien cibler exactement les messages incriminés
Procédure suggérée, issue d'un expérience vécue.
Un compte spammeur du serveur otherserver.net
a posté sur plusieurs salons Chapril des images dont l'url commence par https://otherxmpp.net:5443/upload/
, dans la nuit du 18 au 19 février.
Cet url se retrouve dans les colonnes archive.xml
et archive.txt
, c'est donc dans ces colonnes qu'il faut faire du ménage.
-- Identifier les lignes ayant besoin d'être corrigées. SELECT id, nick, bare_peer, txt, xml, created_at FROM archive WHERE kind = 'groupchat' AND bare_peer LIKE '%@otherserver.net' AND created_at > now() - INTERVAL '1 day'
Récupérer les id
des messages inappropriés (par exemple : 30787317,30787332,30787341,30787229,30787205) et les réutiliser dans la requête UPDATE qui suit :
UPDATE archive SET xml = regexp_replace(xml, '<body>.*</body>', '<body>Message retiré par l''équipe de modération</body>'), txt = 'Message retiré par l''équipe de modération' WHERE id IN (30787317,30787332,30787341,30787229,30787205);
Maintenance
Consulter les logs
tail -f /var/log/ejabberd/ejabberd.log | ccze -A
Augmenter la verbosité des logs
Ouvrir le fichier /etc/ejabberd/ejabberd.yml et passer le paramètre loglevel: 3 à 4 ou 5 pour avoir plus d'infos.
Pour prendre en compte le changement sans redémarrer le service :
sudo -u ejabberd ejabberdctl reload_config
Autre possibilité : augmenter temporairement la verbosité avec la commande :
sudo -u ejabberd ejabberdctl set_loglevel loglevel
Relancer le service
Recharger le service sans interruption (après avoir modifié une configuration par exemple) :
sudo -u ejabberd ejabberdctl reload_config
Sinon, quand on n'a pas le choix, stopper et relancer le service (avec quelques secondes d'interruption) :
systemctl restart ejabberd
Pour le pont XMPP/IRC Biboumi:
systemctl restart biboumi
Consulter l'état global du service
La liste exhaustive des commandes possibles :
sudo -u ejabberd ejabberdctl help | less
Lister les connexions établies avec d'autres serveurs XMPP (aka. connexions s2s)
sudo -u ejabberd ejabberdctl incoming_s2s_number sudo -u ejabberd ejabberdctl outgoing_s2s_number
Nombre de comptes
Nombre total de comptes créés et nombre de sessions actives. Attention, il peut y avoir plusieurs sessions simultanées pour un même compte.
sudo -u ejabberd ejabberdctl registered_users chapril.org | wc -l sudo -u ejabberd ejabberdctl connected_users_number