Ejabberd
|
Cet article est en cours de rédaction. |
Prérequis
Présentation
Le serveur Ejabberd sera hébergé sur un serveur dédié avec les caractéristiques réseaux suivantes :
- Nom du serveur : xmpp.geocoucou.im
- Noms d'hôte de messagerie :
- geocoucou.im : domaine de messagerie principal pour les utilisateurs authentifiés.
- public.geocoucou.im : domaine de messagerie pour les utilisateurs disposants d'un compte temporaire (comptes invités / anonymes).
- Services associés :
- upload.geocoucou.im : serveur d'hébergement des pièces jointes.
- conference.geocoucou.im : domaine de messagerie des salons de discussion.
- Adresses IP du serveur Ejabberd :
- IPv4 : 152.228.135.223
- IPv6 : 2001:41d0:404:200::5eee
- Adresse IP du serveur proxy web Apache2 :
- Nom du serveur : web.cachelou.net
- IPv4 : 51.38.231.60
- IPv6 : 2001:41d0:305:2100::9789
Les enregistrements DNS pour les noms d'hôtes xmpp.geocoucou.im et geoucoucou.im pointent sur les adresse IPv4 et IPv6 du serveur hébergeant le service Ejabberd. |
Configuration de la zone DNS geocoucou.im
Synthèse
|
Le nom de domaine geocoucou.im sera spécialement dédié à l'usage de la messagerie instantanée Ejabberd. |
- Voici la liste des enregistrements DNS qui seront déclarées dans la zone nécessaire au bon fonctionnement du protocole XMPP :
Sous-domaine | Type | Priorité | Poids | Port | Cible | Rôle |
---|---|---|---|---|---|---|
@ | A | — | — | — | 152.228.135.223 | Pointage du serveur XMPP pour le nom de domaine geocoucou.im |
@ | AAAA | — | — | — | 2001:41d0:404:200::5eee | Pointage du serveur XMPP pour le nom de domaine geocoucou.im |
xmpp | A | — | — | — | 152.228.135.223 | |
xmpp | AAAA | — | — | — | 2001:41d0:404:200::5eee | |
_xmpp-client._tcp | SRV | 0 | 0 | 5222 | xmpp.geocoucou.im | Configuration pour les échanges entre les clients de messagerie instantanés et le serveur XMPP. |
_xmpp-server._tcp | SRV | 0 | 0 | 5269 | xmpp.geocoucou.im | Configuration pour les échanges entre les serveurs XMPP. |
_xmpps-client._tcp | SRV | 0 | 0 | 5223 | xmpp.geocoucou.im | Configuration pour les échanges entre les clients de messagerie instantanés et le serveur XMPP via un canal sécurisé TLS. |
_xmpps-server._tcp | SRV | 0 | 0 | 5270 | xmpp.geocoucou.im | Configuration pour les échanges entre les serveurs XMPP via un canal sécurisé TLS. |
conference | CNAME | — | — | — | xmpp.geocoucou.im | Domaine XMPP réservé pour l'hébergement des salons de discussion. |
public | CNAME | — | — | — | xmpp.geocoucou.im | Domaine XMPP réservé pour les comptes anonymes / invités. |
upload | CNAME | — | — | — | web.cachelou.net | Spécifique pour la fonction File HTTP Upload (mod_http_upload). Configuration en reverse proxy. |
wss | CNAME | — | — | — | web.cachelou.net | Spécifique pour les échanges nécessitant une connexion websocket. Configuration en reverse proxy. |
Configuration DNS de base
- Vérifions le pointage du champs DNS de type A pour la zone geocoucou.im. Ce dernier doit pointer sur l'adresse IPv4 152.228.135.223 :
|
|
; <<>> DiG 9.16.50-Debian <<>> geocoucou.im ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48588 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;geocoucou.im. IN A ;; ANSWER SECTION: geocoucou.im. 3600 IN A 152.228.135.223 ;; Query time: 28 msec
;; SERVER: 213.186.33.99#53(213.186.33.99) ;; WHEN: Sun Jul 28 16:32:36 UTC 2024 ;; MSG SIZE rcvd: 57 }}
- Vérifions le pointage du champs DNS de type AAAA pour la zone geocoucou.im. Ce dernier doit pointer sur l'adresse IPv6 2001:41d0:404:200::5eee :
|
|
; <<>> DiG 9.16.50-Debian <<>> aaaa geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3116
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;geocoucou.im. IN AAAA
;; ANSWER SECTION:
geocoucou.im. 3600 IN AAAA 2001:41d0:404:200::5eee
;; Query time: 44 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 16:33:20 UTC 2024
;; MSG SIZE rcvd: 69
- Vérifions le pointage du champs DNS de type A pour le sous-domaine xmpp.geocoucou.im. Ce dernier doit pointer sur l'adresse IPv4 152.228.135.223 :
|
|
; <<>> DiG 9.16.50-Debian <<>> a xmpp.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51841
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;xmpp.geocoucou.im. IN A
;; ANSWER SECTION:
xmpp.geocoucou.im. 3600 IN A 152.228.135.223
;; Query time: 56 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 18:19:08 UTC 2024
;; MSG SIZE rcvd: 62
- Vérifions le pointage du champs DNS de type AAAA pour le sous-domaine xmpp.geocoucou.im. Ce dernier doit pointer sur l'adresse IPv6 2001:41d0:404:200::5eee :
|
|
; <<>> DiG 9.16.50-Debian <<>> aaaa xmpp.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13822
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;xmpp.geocoucou.im. IN AAAA
;; ANSWER SECTION:
xmpp.geocoucou.im. 3600 IN AAAA 2001:41d0:404:200::5eee
;; Query time: 76 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 18:19:52 UTC 2024
;; MSG SIZE rcvd: 74
- Vérifions le pointage du champs DNS de type SRV pour le sous-domaine _xmpp-client._tcp.geocoucou.im. Ce dernier doit pointer sur le sous-domaine xmpp.geocoucou.im :
|
|
; <<>> DiG 9.16.50-Debian <<>> srv _xmpp-client._tcp.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48499
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;_xmpp-client._tcp.geocoucou.im. IN SRV
;; ANSWER SECTION:
_xmpp-client._tcp.geocoucou.im. 3600 IN SRV 0 5 5222 xmpp.geocoucou.im.
;; Query time: 80 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 22:22:08 UTC 2024
;; MSG SIZE rcvd: 96
- Vérifions le pointage du champs DNS de type SRV pour le sous-domaine _xmpps-client._tcp.geocoucou.im. Ce dernier doit pointer sur le sous-domaine xmpp.geocoucou.im :
|
|
; <<>> DiG 9.16.50-Debian <<>> srv _xmpps-client._tcp.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50852
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;_xmpps-client._tcp.geocoucou.im. IN SRV
;; ANSWER SECTION:
_xmpps-client._tcp.geocoucou.im. 3600 IN SRV 0 5 5223 xmpp.geocoucou.im.
;; Query time: 76 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 22:34:43 UTC 2024
;; MSG SIZE rcvd: 97
- Vérifions le pointage du champs DNS de type SRV pour le sous-domaine _xmpp-server._tcp.geocoucou.im. Ce dernier doit pointer sur le sous-domaine xmpp.geocoucou.im :
|
|
; <<>> DiG 9.16.50-Debian <<>> srv _xmpp-server._tcp.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10740
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;_xmpp-server._tcp.geocoucou.im. IN SRV
;; ANSWER SECTION:
_xmpp-server._tcp.geocoucou.im. 3600 IN SRV 0 5 5269 xmpp.geocoucou.im.
;; Query time: 80 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 22:37:40 UTC 2024
;; MSG SIZE rcvd: 96
- Vérifions le pointage du champs DNS de type SRV pour le sous-domaine _xmpps-server._tcp.geocoucou.im. Ce dernier doit pointer sur le sous-domaine xmpp.geocoucou.im :
|
|
; <<>> DiG 9.16.50-Debian <<>> srv _xmpps-server._tcp.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19399
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;_xmpps-server._tcp.geocoucou.im. IN SRV
;; ANSWER SECTION:
_xmpps-server._tcp.geocoucou.im. 3600 IN SRV 0 5 5270 xmpp.geocoucou.im.
;; Query time: 40 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 22:36:34 UTC 2024
;; MSG SIZE rcvd: 97
- Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine conference.geocoucou.im. Ce dernier doit pointer sur le sous-domaine xmpp.geocoucou.im :
|
|
; <<>> DiG 9.16.50-Debian <<>> cname conference.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64401
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;conference.geocoucou.im. IN CNAME
;; ANSWER SECTION:
conference.geocoucou.im. 3600 IN CNAME xmpp.geocoucou.im.
;; Query time: 84 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 18:15:53 UTC 2024
;; MSG SIZE rcvd: 71
Pointage DNS pour le module MUC
|
Ce sous-domaine héberge les services de salons de discussion abrégé ici par MUC (Multi-User Chat). |
- Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine conference.geocoucou.im. Ce dernier doit pointer sur le sous-domaine xmpp.cachelou.net :
|
|
; <<>> DiG 9.16.50-Debian <<>> conference.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62519
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;conference.geocoucou.im. IN A
;; ANSWER SECTION:
conference.geocoucou.im. 3600 IN CNAME xmpp.geocoucou.im.
;; Query time: 64 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 10:07:01 UTC 2024
;; MSG SIZE rcvd: 87
Pointage DNS pour le module HTTP_FILE_UPLOAD
|
Ce sous-domaine pointe vers le serveur de fichiers qui stockera les pièces jointes échangées par les utilisateurs du chat. |
- Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine upload.geocoucou.im. Ce dernier doit pointer sur le serveur web proxy reverse web.cachelou.net :
|
|
; <<>> DiG 9.16.50-Debian <<>> cname upload.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3099
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;upload.geocoucou.im. IN CNAME
;; ANSWER SECTION:
upload.geocoucou.im. 3600 IN CNAME web.cachelou.net.
;; Query time: 64 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Tue Jul 30 20:04:53 UTC 2024
;; MSG SIZE rcvd: 78
Pointage DNS pour la fonction WEBSOCKET
- Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine wss.geocoucou.im. Ce dernier doit pointer sur le serveur web proxy reverse web.cachelou.net :
|
|
; <<>> DiG 9.16.50-Debian <<>> wss.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48465
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;wss.geocoucou.im. IN A
;; ANSWER SECTION:
wss.geocoucou.im. 3600 IN CNAME web.cachelou.net.
;; Query time: 28 msec ;; SERVER: 213.186.33.99#53(213.186.33.99) ;; WHEN: Sat Aug 03 09:20:02 UTC 2024 ;; MSG SIZE rcvd: 122
Pointage DNS pour le portail ChatMail (spécifique Géocoucou)
- Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine chatmail.geocoucou.im. Ce dernier doit pointer sur le serveur web web.cachelou.net :
|
|
; <<>> DiG 9.16.50-Debian <<>> chatmail.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57535
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;chatmail.geocoucou.im. IN A
;; ANSWER SECTION:
chatmail.geocoucou.im. 3600 IN CNAME web.cachelou.net.
;; Query time: 4 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 09:24:18 UTC 2024
;; MSG SIZE rcvd: 127
Installation
Dans cette installation, le serveur Ejabberd s'appuiera sur une base de données MariaDB. Par défaut, Ejabberd utilise une base de données Mnesia. Cependant, ce type de base de données ne peut traiter un volume de données supérieure à 2 Go. Pour cette raison, il est préférable d'utiliser une base de données SQL.
|
Pour cette installation, le serveur de base de données MariaDB ainsi que le serveur de messagerie instantanée Ejabberd sont installés sur la même machine. |
Serveur Ejabberd
- Installation du paquet ejabberd :
|
|
- Installation du paquet erlang-p1-mysql pour l'exploitation d'une base de données SQL (MySQL, MariaDB) :
|
|
- Pour vérifier si le service fonctionne normalement :
|
|
- Création d'un premier compte utilisateur sur le serveur :
|
|
Base de données SQL
- Le script d'installation de la base de données se trouve à la racine /usr/share/ejabberd/sql. Importer le script dans la base de données dédiée nommée ejabberd :
|
|
- Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis après la ligne :
auth_password_format: scram
- Ajouter et adapter les lignes suivantes en fonction des paramètres de connexion de la base de données :
# Méthode d'authentification par défaut : SQL auth_method: sql # Méthode de stockage par défaut : SQL default_db: sql # Paramètres de connexion de la base de données Ejabberd sql_type: mysql sql_server: "localhost" sql_database: "ejabberd" sql_username: "ejabberd" sql_password: "password"
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Configuration
La configuration du serveur Ejabberd est enregistrée dans le fichier /etc/ejabberd/ejabberd.yml. Il s'agit d'un fichier écrit en language YAML (Yet Another Markup Language). En cas d'erreur de démarrage du service Ejabberd, après la modification du fichier de configuration, consulter le journal des erreurs disponible à l'emplacement /var/log/ejabberd/error.log.
|
Veuillez respecter les indentations pour les différents paramètres. Il ne s'agit pas seulement d'un style de mise en forme. En cas de non respect, le service Ejabberd retournera des erreurs et ne démarrera pas. |
Définition du domaine de messagerie
- Editer le fichier ejabberd.yml puis rechercher la ligne :
hosts:
- localhost
- Remplacer par :
hosts
- geocoucou.im
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Paramètre du compte administrateur
- Le compte administrateur dispose de privilèges étendus sur le serveur. Par défaut, aucun compte n'est associé à ce rôle. Pour cela, éditer le fichier ejabberd.yml puis rechercher la ligne :
acl:
admin:
user:
- ""
- Puis renseigner l'adresse JID du compte créé lors de l'installation du serveur Ejabberd :
acl:
admin:
user:
- "coyotte@geocoucou.im"
- Nous allons également déclarer une nouvelle ACL nommée net_remote_admin et qui contiendra l'adresse IP du client autorisé à se connecter avec le compte administrateur :
acl: net_remote_admin: ip: - 109.190.143.97/32
- Maintenant, il faut déclarer cette ACL dans les paramètres d'autorisation de l'API. Pour cela, rechercher le bloc :
api_permissions:
...
"admin access":
who:
access:
allow:
- acl: loopback
- acl: admin
- Puis, y ajouter l'ACL créée précédemment (identifiée en rouge) :
api_permissions: ... "admin access": who: access: allow: - acl: net_remote_admin - acl: loopback - acl: admin
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
|
Dès à présent, il est possible de se connecter à l'interface d'administration du serveur Ejabberd via le lien https://xmpp.geocoucou.im:5280/admin. |
Activation des protocoles de découverte TURN/STUN
- Editer le fichier ejabberd.yml puis rechercher la ligne :
- port: 3478 ip: "::" transport: udp module: ejabberd_stun use_turn: true ## The server's public IPv4 address: # turn_ipv4_address: "203.0.113.3" ## The server's public IPv6 address: # turn_ipv6_address: "2001:db8::3"
- Décommenter les lignes ci-dessous et adapter le contenu (éléments en rouge) :
- port: 3478 ip: "::" transport: udp module: ejabberd_stun use_turn: true ## The server's public IPv4 address: turn_ipv4_address: "152.228.135.223" ## The server's public IPv6 address: turn_ipv6_address: "2001:41d0:404:200::5eee"
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
- Lorsque la fonction est correctement initialisée, dans les journaux d'activités de Ejabberd /var/log/ejabberd/ejabberd.log nous observons les lignes suivantes :
2024-07-31 11:37:34.735470+00:00 [info] <0.478.0>@mod_stun_disco:parse_listener/1:615 Going to offer STUN/TURN service: 152.228.135.223:3478 (udp) 2024-07-31 11:37:34.735598+00:00 [info] <0.478.0>@mod_stun_disco:parse_listener/1:615 Going to offer STUN/TURN service: [2001:41d0:404:200::5eee]:3478 (udp)
Configuration de l'adresse de contact de l'administrateur
|
L'adresse de contact est une information qui sera fournit aux utilisateurs pour pouvoir contacter les administrateurs du service par courriel. |
- Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis remplacer :
mod_disco {}
- Par les informations suivantes (adapter les éléments en rouge):
mod_disco: server_info: - modules: all name: "abuse-addresses" urls: ["mailto:abuse@geocoucou.eu"]
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Configuration des options par défaut pour les salons de discussion
- Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis après le bloc :
default_room_options: mam: true
- Ajouter les éléments suivants :
allow_change_subj: true allow_private_messages: true allow_private_messages_from_visitors: anyone allow_visitor_nickchange: true anonymous: false presence_broadcast: [moderator,participant,visitor] public: true
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Installation du certificat SSL
|
Pour illustrer cette installation, nous utiliserons un certificat SSL gratuit fournit par Let's Encrypt à l'aide du programme Certbot. |
- Installation de Certbot et de ses dépendances :
|
|
- Lancer Certbot en tapant simplement la commande :
certbot certonly
- Le serveur de messagerie Ejabberd ne disposant pas de serveur web, choisir l'option Spin up a temporary webserver (standalone) :
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Saisir une adresse mail. Cette dernière sera utilisée par l'autorité de certification en cas d'échec de renouvellement automatique du certificat :
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): tech@ncad.fr
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Lire et accepter les conditions générales du service en saisissant y puis en tapant sur la touche Entrée :
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: y
- Accepter / refuser la réutilisation de l'adresse mail saisie précédemment à des fins d'informations publicitaires :
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
- Saisir les domaines pour lesquelles le certificat devra être généré. Dans notre cas il s'agit des adresses geocoucou.im et xmpp.geocoucou.im :
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): geocoucou.im xmpp.geocoucou.im
- Lorsque le certificat est généré avec succès, prendre note de son emplacement sur le serveur :
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/geocoucou.im/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/geocoucou.im/privkey.pem Your certificate will expire on 2024-10-26. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
- Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis rechercher la ligne :
certfiles:
- "/etc/ejabberd/ejabberd.pem"
- Remplacer par :
certfiles: - "/etc/letsencrypt/live/geocoucou.im/fullchain.pem" - "/etc/letsencrypt/live/geocoucou.im/privkey.pem"
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Paramètre du module mod_http_upload
|
Ce mode permet d'héberger des fichiers sur le serveur de messagerie instantané. Cette fonction est utilisée pour partager des pièces jointes sur le chat. |
Configuration du connecteur Ejabberd
- Tout d'abord, il faut autoriser les requêtes HTTP_UPLOAD depuis le connecteur Ejabberd. Pour cela, éditer le fichier de configuration /etc/ejabberd/ejabberd.yml puis rechercher le bloc suivant :
- port: 5443 ip: "::" module: ejabberd_http tls: true protocol_options: 'TLS_OPTIONS' request_handlers: /api: mod_http_api ##/bosh: mod_bosh ##/upload: mod_http_upload /ws: ejabberd_http_ws
- Puis, décommenter la ligne suivante :
- port: 5443 ip: "::" module: ejabberd_http tls: true protocol_options: 'TLS_OPTIONS' request_handlers: /api: mod_http_api ##/bosh: mod_bosh /upload: mod_http_upload /ws: ejabberd_http_ws
- Enfin, redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Paramétrage du module
- Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis après la ligne :
modules:
- Ajouter les éléments suivants (adapter les éléments en rouge) :
mod_http_upload: access: local thumbnail: false docroot: "/var/lib/ejabberd/upload" put_url: "https://upload.@HOST@/upload" custom_headers: "Access-Control-Allow-Origin": "*" "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS" "Access-Control-Allow-Headers": "Content-Type"
- Créer le répertoire qui contiendra les fichiers téléchargés sur le serveur et octroyer les autorisations adéquates :
|
|
- Redémarrer le serveur Ejabberd pour la prise en compte des nouveaux paramètres :
service ejabberd restart
Paramétrage du reverse proxy
- Dans notre cas, le sous-domaine upload.geocoucou.im pointe sur un serveur web Apache2 externe. Nous allons créer un nouveau VHost pour cet hôte.
- À la racine /etc/apache2/sites-available/, créer le fichier upload.geocoucou.im.conf et y renseigner la configuration du proxy reverse suivante (adapter les éléments en rouge) :
ProxyRequests Off RewriteEngine on SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off <VirtualHost *:80> ServerName upload.geocoucou.im ErrorLog ${APACHE_LOG_DIR}/rev-upload.geocoucou.im_error.log CustomLog ${APACHE_LOG_DIR}/rev-upload.geocoucou.im_access.log combined ProxyPreserveHost On ProxyVia Full RequestHeader edit Transfer-Encoding Chunked chunked early RequestHeader unset Accept-Encoding CheckSpelling On TimeOut 1800 ProxyPass / https://xmpp.geocoucou.im:5443/ ProxyPassReverse / https://xmpp.geocoucou.im:5443/ </VirtualHost>
- Pour appliquer la nouvelle configuration, activer le nouveau VHost puis redémarrer le serveur Apache2 :
|
|
- Ensuite, nous utilisons le programme Certbot pour l'installation du certificat SSL.
- Pour valider le bon fonctionnement du VHost, ouvrir un navigateur web et se rendre à l'url https://upload.geocoucou.im/upload. Le serveur retournera le message :
not found
Fonctionnalités avancées
Configuration du module mod_mam
Ce module permet aux utilisateurs de conserver un historique de leurs dernières conversations. L'implémentation de cette fonction est décrite dans la norme XEP-0313.
Activation du module
Paramètre | Type | Description |
}
modules: (...) mod_mam: db_type: sql compress_xml: true default: always
Configuration du module mod_registerCe module permet aux utilisateurs de créer un nouveau compte XMPP sur le serveur Ejabberd depuis un client de messagerie instantané compatible avec la norme XEP-0077. Pour illustrer cette section, nous prendrons comme exemple les besoins suivants :
Activation du module
modules: (...) mod_register: {}
Filtrage IP des clients autorisés à s'inscrire
acl: (...) register_networks: ip: - 109.190.125.2/32 - 51.38.231.60/32 - 2001:41d0:305:2100::9789
access_rules: (...) register_access: allow: register_networks
modules: (...) mod_register: ip_access: register_access
Filtrage IP des clients autorisés à se désinscrire
acl: (...) register_remove_networks: ip: - 109.190.125.2/32 - 51.38.231.60/32 - 2001:41d0:305:2100::9789
access_rules: (...) register_remove_access: allow: register_remove_networks
modules: (...) mod_register: ip_access: register_access access_remove: register_remove_access
Filtrage par expression régulière du nom d'utilisateur
acl: (...) rgxp_synthax_login: user_regexp: - "^[a-zA-Z]+[a-zA-Z0-9_-]+[a-zA-Z0-9]+$": geocoucou.im
access_rules: (...) rgxp_filtre_login: allow: rgxp_synthax_login
modules: (...) mod_register: ip_access: register_access access_remove: register_remove_access access: rgxp_filtre_login Filtrage par mots clés du nom d'utilisateur
acl: (...) rgxp_termes_techniques: user_regexp: - "(abuse|tech|admin|staff|contact|webmaster|mail|dns|xmpp)": geocoucou.im
access_rules: (...) rgxp_filtre_login: deny: rgxp_termes_techniques allow: rgxp_synthax_login
Notification pour les nouvelles inscriptions
modules: (...) mod_register: ip_access: register_access access_remove: register_remove_access access: rgxp_filtre_login registration_watchers: - cach3ln@geocoucou.im
Message de bienvenue aux nouveaux inscrits
modules: (...) mod_register: ip_access: register_access access_remove: register_remove_access access: rgxp_filtre_login registration_watchers: - cach3ln@geocoucou.im welcome_message: subject: "Bienvenue !" body: |- Bienvenue sur le serveur XMPP Geocoucou ChatMail, En cas de problèmes ou de difficultés rendez-vous sur le Salon de Discussion support@conference.geocoucou.im. Un abus, un comportement suspect ? Signalez-le à abuse@geocoucou.eu ! Cordialement. L'équipe support Geocoucou ChatMail.
Paramètres de l'APIune API permet à une application tierce de pouvoir exécuter des commandes sur le serveur Ejabberd. La liste des commandes disponibles est consultable depuis la documentation en ligne en distinguant les commandes liées à l'administration du service et les commandes liées à l'administration des salons de discussion. Pour illustrer cette section, nous disposons donc :
À cet effet, pour mener à bien cette architecture il faudra :
Activation du module mod_http_api
-
port: 5443
ip: "::"
module: ejabberd_http
tls: true
protocol_options: 'TLS_OPTIONS'
request_handlers:
/api: mod_http_api
/bosh: mod_bosh
## /captcha: ejabberd_captcha
/upload: mod_http_upload
/ws: ejabberd_http_ws
Mise à jour des permissions
"public commands":
who:
ip:
- 127.0.0.1/8
what:
- status
- connected_users_number
"public commands": who: ip: - 127.0.0.1/8 - 51.38.231.60/32 - 2001:41d0:305:2100:9789/56 what: "*"
Paramètres DNS
; <<>> DiG 9.16.50-Debian <<>> cname api.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54871
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;api.geocoucou.im. IN CNAME
;; ANSWER SECTION:
api.geocoucou.im. 3600 IN CNAME web.cachelou.net.
;; Query time: 28 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sat Aug 03 13:48:44 UTC 2024
;; MSG SIZE rcvd: 75
Création du VHost proxy reverse
ProxyRequests Off RewriteEngine on SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off <VirtualHost *:80> ServerName api.geocoucou.im ErrorLog ${APACHE_LOG_DIR}/rev-api.geocoucou.im_error.log CustomLog ${APACHE_LOG_DIR}/rev-api.geocoucou.im_access.log combined ProxyPreserveHost On ProxyVia Full RequestHeader edit Transfer-Encoding Chunked chunked early RequestHeader unset Accept-Encoding CheckSpelling On TimeOut 1800 ProxyPass / https://xmpp.geocoucou.im:5443/ ProxyPassReverse / https://xmpp.geocoucou.im:5443/ </VirtualHost>
Analyse des journaux d'évènements
2001:41d0:305:2100::9789 - - [03/Aug/2024:11:36:49 +0000] "POST /api/check_password HTTP/1.1" 200 3072 "-" "-"
2024-08-03 11:36:53.004757+00:00 [info] <0.364.0>@ejabberd_listener:accept/7:273 (<0.2740.0>) Accepted connection [::ffff:51.38.231.60]:51652 -> [::ffff:152.228.135.223]:5443 2024-08-03 11:36:53.025377+00:00 [info] <0.2740.0>@mod_http_api:log/3:510 API call check_password [{<<"user">>,<<"cach3ln">>}, {<<"host">>,<<"geocoucou.im">>}, {<<"password">>,<<"***">>}] from ::ffff:51.38.231.60:51652
Installation du client XMPP-WEBPrésentationXMPP-WEB est client web léger de messagerie instantané intégrant les fonctionnalités de base du protocole XMPP. La dernière version peut être récupérée depuis le dépôt GitHub à l'adresse : https://github.com/nioc/xmpp-web. Paramètres DNSDans la zone DNS du nom de domaine geocoucou.im, créer un nouvel enregistrement CNAME avec les caractéristiques suivantes :
; <<>> DiG 9.16.50-Debian <<>> cname webchat.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63589
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;webchat.geocoucou.im. IN CNAME
;; ANSWER SECTION:
webchat.geocoucou.im. 3600 IN CNAME web.cachelou.net.
;; Query time: 68 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 18:36:45 UTC 2024
;; MSG SIZE rcvd: 79
Création du VHost proxy reverse
ProxyRequests Off RewriteEngine on SSLProxyEngine on SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off <VirtualHost *:80> ServerName wss.geocoucou.im ErrorLog ${APACHE_LOG_DIR}/rev-wss.geocoucou.im_error.log CustomLog ${APACHE_LOG_DIR}/rev-wss.geocoucou.im_access.log combined ProxyPreserveHost On ProxyVia Full RequestHeader edit Transfer-Encoding Chunked chunked early RequestHeader unset Accept-Encoding CheckSpelling On TimeOut 1800 ProxyPass / wss://xmpp.geocoucou.im:5443/ ProxyPassReverse / wss://xmpp.geocoucou.im:5443/ </VirtualHost>
Paramétrage du pare-feuMatrice des flux autorisésPar défaut, les flux non listés ci-dessous ne sont pas autorisés sur l’équipement.
Configuration iptables sur la couche IPv4
|
---|