Ejabberd

De NCad Wiki
Aller à la navigation Aller à la recherche

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
  • Nom d'hôte de messagerie : geocoucou.im
  • Adresses IP :
    • IPv4 : 152.228.135.223
    • IPv6 : 2001:41d0:404:200::5eee
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

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 :
Enregistrement DNS
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 SRV 0 0 5222 xmpp.geocoucou.im Enregistrement pour la découverte automatique des paramètres XMPP pour les clients.
_xmpp-server SRV 0 0 5269 xmpp.geocoucou.im Enregistrement pour la découverte automatique des paramètres XMPP pour les serveur.
conference CNAME xmpp.geocoucou.im Domaine XMPP réservé pour l'hébergement des salons de discussion.
webchat CNAME web.cachelou.net sous-domaine pointant vers le site hébergeant le webchat Converse.js.
  • 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 a geocoucou.im

; <<>> 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 aaaa geocoucou.im

; <<>> 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 a xmpp.geocoucou.im

; <<>> 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 aaaa xmpp.geocoucou.im

; <<>> 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.geocoucou.im. Ce dernier doit pointer sur le dous-domaine xmpp.geocoucou.im :

dig srv _xmpp-client.geocoucou.im

; <<>> DiG 9.16.50-Debian <<>> srv _xmpp-client.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43567
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;_xmpp-client.geocoucou.im.     IN      SRV

;; ANSWER SECTION:
_xmpp-client.geocoucou.im. 3600 IN      SRV     0 0 5222 xmpp.geocoucou.im.

;; Query time: 52 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 18:22:38 UTC 2024
;; MSG SIZE  rcvd: 91
  • Vérifions le pointage du champs DNS de type SRV pour le sous-domaine _xmpp-server.geocoucou.im. Ce dernier doit pointer sur le dous-domaine xmpp.geocoucou.im :

dig srv _xmpp-server.geocoucou.im

; <<>> DiG 9.16.50-Debian <<>> srv _xmpp-server.geocoucou.im
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14041
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;_xmpp-server.geocoucou.im.     IN      SRV

;; ANSWER SECTION:
_xmpp-server.geocoucou.im. 3600 IN      SRV     0 0 5269 xmpp.geocoucou.im.

;; Query time: 68 msec
;; SERVER: 213.186.33.99#53(213.186.33.99)
;; WHEN: Sun Jul 28 18:24:40 UTC 2024
;; MSG SIZE  rcvd: 91
  • Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine conference.geocoucou.im. Ce dernier doit pointer sur le dous-domaine xmpp.geocoucou.im :

dig cname conference.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
  • Vérifions le pointage du champs DNS de type CNAME pour le sous-domaine webchat.geocoucou.im. Ce dernier doit pointer sur le dous-domaine web.cachelou.net :

dig cname webchat.geocoucou.im

; <<>> 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

Installation

Serveur Ejabberd

  • Installation du paquet ejabberd :

apt-get install ejabberd

  • Installation du paquet erlang-p1-mysql pour l'exploitation d'une base de données SQL (MySQL, MariaDB) :

apt-get install erlang-p1-mysql

  • Pour vérifier si le service fonctionne normalement :

service ejabberd status

  • Editer le fichier ejabberd.yml puis rechercher la ligne :
hosts:
  - localhost
  • Remplacer par :
hosts
  - geocoucou.im
  • Rechercher la ligne :
acl:
  admin:
    user:
      - ""
  • Remplacer par :
acl:
  admin:
    user:
      - "root@geocoucou.im"
  • Redémarrer le serveur ejabberd pour la prise en compte des nouveaux paramètres :

service ejabberd restart

  • Création de l'utilisateur root@geocoucou.im avec le mot de passe password :

ejabberdctl register root geocoucou.im password

Dès à présent, il est possible de se connecter à l'interface d'administration du serveur ejabberd via le lien https://<IP_SERVEUR_EJABERD:5280/admin et avec l'identifiant créé à l'étape précédente.

Certificats avec Certbot (Let's Encrypt)

  • Installation de Certbot et de ses dépendances :

apt-get install certbot

  • 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

Sécu

  • Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis après :
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128
  • Ajouter :
  net_ncad:
    ip:
      - 109.190.9.125/32

Options de découverte du serveur

  • Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis remplacer :
  mod_disco {}
  • Par
  mod_disco:
    server_info:
    -
        modules: all
        name: "abuse-addresses"
        urls: ["mailto:abuse@geocoucou.eu"]

Options par défaut des salons de discussion

  • Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis après :
    default_room_options:
      mam: true
  • Ajouter :
      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

Base de données

  • Les scripts d'installation de la base de données se trouvent à la racine /usr/share/ejabberd/sql.
  • À l'aide de la commande mysqldump, procéder à l'importation de la structure de tables :

mysql -u root ejabberd < mysql.sql

  • Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis adapter les ligne suivantes :
sql_type: mysql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: "password"

auth_method: sql
default_db: sql

Paramètres de l'API

Permissions

  • Editer le fichier de configuration /etc/ejabberd/ejabberd.yml puis remplacer :
   who:
     ip:
       - 127.0.0.1/8
   what:
     - status
     - connected_users_number
  • Par les éléments suivants :
   who:
     ip:
       - 127.0.0.1/8
       - 51.38.231.60/32
       - 2001:41d0:305:2100:9789/56
   what: "*"

Installation de Converse

Converse est un client web XMPP.

Paramétrage du pare-feu

Matrice des flux autorisés

Par défaut, les flux non listés ci-dessous ne sont pas autorisés sur l’équipement.

Matrice de flux
Source Protocole(s) Port(s) Description
* tcp 22 Accès SSH, SFTP.
* tcp 5280 Accès interface d'administration Ejabberd.
* tcp 5222 Connexion des clients XMPP au serveur Ejabberd.
* tcp 5269 Echanges entre serveurs XMPP.
<@IP_SUPERVISION> udp 161,162 Accès SNMP depuis serveur supervision.
* icmp Réponse aux requêtes ping.

Configuration iptables sur la couche IPv4

  • Installation des paquets iptables (pare-feu) et iptables-persistent (sauvegarde persistante de la configuration).

root@apache2:~# apt-get install iptables iptables-persistent -y

  • Ajout des règles iptables pour autoriser les flux SSH, ICMP et MySQL :

root@apache2:~# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
root@apache2:~# iptables -A INPUT -p tcp --dport 5280 -j ACCEPT
root@apache2:~# iptables -A INPUT -p tcp --dport 5222 -j ACCEPT
root@apache2:~# iptables -A INPUT -p tcp --dport 5269 -j ACCEPT
root@apache2:~# iptables -A INPUT -p udp -m multiport -s <@IP_SUPERVISION> --dports 161,162 -j ACCEPT
root@apache2:~# iptables -A INPUT -p icmp -j ACCEPT
root@apache2:~# iptables -A INPUT -i lo -j ACCEPT
root@apache2:~# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
root@apache2:~# iptables -P INPUT DROP

  • Sauvegarde de la configuration et application automatique à chaque redémarrage du système.

root@apache2:~# dpkg-reconfigure iptables-persistent