Indice

Installazione Server Ejabberd

ATTENZIONE! Questa guida è la traduzione dell'originale di Denshi e non è stata testata dai traduttori.

Ejabberd è un server per il protocollo XMPP scritto in Erlang. È più scalabile e più facile da impostare di Prosody per il fatto che la maggior parte dei suoi moduli sono integrati e preconfigurati in automatico.

Prerequisiti

Porte richieste: 5000, 5222, 5269, 5280, 5281

Sottodomini

Ejabberd presuppone che tu abbia già creato tutti i sottodomini richiesti e opzionali per il suo uso prima di eseguirlo.

A seconda dell'utilizzo, potresti aver bisogno di alcuni o tutti i seguenti domini per le funzionalità di XMPP:

Il solo dominio esempio.org è richiesto per l'uso di base, di chat privata. Se non desideri usare un certo dominio, disabilita semplicemente il modulo associato e ejabberd non avrà problemi quando non riuscirà a trovare il suo certificato associato. Per esempio, se non vuoi il supporto Publish-Subscribe, semplicemente commenta la configurazione mod_pubsub in /opt/ejabberd/ejabberd.yml:

##  mod_pubsub:
##    access_createnode: pubsub_createnode
##    plugins:
##      - flat
##      - pep
##    force_node_config:
##      ## Avoid buggy clients to make their bookmarks public
##      storage:bookmarks:
##        access_model: whitelist

Questa guida presuppone che tutti questi sottodomini siano stati creati.

Sottodomini Personalizzati

Se vuoi personalizzare qualcuno di questi domini, modifica /opt/ejabberd/conf/ejabberd.yml e sotto ogni apposito modulo che necessita un sottodominio aggiungi la seguente impostazione:

mod_muc:
  host: muc.esempio.org

Installazione

Per ottenere l'ultima versione di ejabberd, devi prima aggiungere i repository di ejabberd:

curl -o /etc/apt/sources.list.d/ejabberd.list https://repo.process-one.net/ejabberd.list
curl -o /etc/apt/trusted.gpg.d/ejabberd.gpg https://repo.process-one.net/ejabberd.gpg

Quindi aggiorna i repo e installa il pacchetto ejabberd:

apt update
apt install ejabberd

Configurazione

Il server ejabberd è configurato in /opt/ejabberd/conf/ejabberd/ejabberd.yml. Le modifiche vengono applicate solo riavviando il demone ejabberd in systemd:

systemctl restart ejabberd

Hostname

L' hostname XMPP è specificato nella sezione hosts di ejabberd.yml:

hosts:
  - esempio.org

Certificati

A differenza di Prosody, ejabberd non è equipaggiato di uno script che può automaticamente copiare i relativi certificati in una cartella dove l'utente ejabberd possa leggerli.

Un modo di organizzare i certificati per ejabberd è di averli conservati in /opt/ejabberd/certs, una cartella separata per ogni dominio con sia la chiave privata sia la fullchain.

Prima di continuare, crea la relativa cartella:

mkdir -p /opt/ejabberd/certs

Usando certbot, questo processo può essere facilmente automatizzato con questi comandi:

DOMAIN=esempio.org
 
# Imposta qui i nomi dominio che vuoi
declare -a subdomains=("" "conference." "proxy." "pubsub." "upload.")
 
for i in "${subdomains[@]}"; do
   certbot --nginx -d $i$DOMAIN certonly
   mkdir -p /opt/ejabberd/certs/$i$DOMAIN
   cp /etc/letsencrypt/live/$i$DOMAIN/fullchain.pem /opt/ejabberd/certs/$i$DOMAIN/
   cp /etc/letsencrypt/live/$i$DOMAIN/privkey.pem /opt/ejabberd/certs/$i$DOMAIN/
done

Nota: proprio come con Prosody, si può scrivere questo script in un file e impostare un server/cron|cronjob per lanciarlo periodicamente. Questo dovrebbe aiutare a prevenire che i certificati scadano.

Assicurati che tutti i certificati siano leggibili dall'utente ejabberd :

chown -R ejabberd:ejabberd /opt/ejabberd/certs

Per abilitare l'uso di tutti questi certificati in ejabberd, è necessaria la seguente configurazione :

certfiles:
 - "/opt/ejabberd/certs/*/*.pem";

Amministratore

L' utente amministratore può essere specificato in ejabberd.yml sotto la sezione acl:

acl:
  admin:
    user: admin

Questo dovrebbe rendere admin@esempio.org l'utente con privilegi di amministratore.

Caricare i File

Per assicurare la completa conformità agli standard XMPP, aggiungi la seguente configurazione a mod_http_upload:

mod_http_upload:
   put_url: https://@HOST@:5443/upload
   docroot: /var/www/upload
   custom_headers:
     "Access-Control-Allow-Origin": "https://@HOST@"
     "Access-Control-Allow-Methods": "GET,HEAD,PUT,OPTIONS"
     "Access-Control-Allow-Headers": "Content-Type"

Assicurati di creare e di render proprietario l'utente ejabberd di /var/www/upload o di ogni altra cartella che intendi usare per caricare i file:

 chown -R ejabberd:ejabberd /var/www/upload

Archivio Messaggi

Il server ejabberd supporta l'archiviazione dei messaggi attraverso il suo modulo mod_mam. Questo può essere abilitato decommentando le seguenti linee:

mod_mam:
  assume_mam_usage: true
  default: always</pre>

Database

Perché usare un database?

Possiamo trovare il seguente commento nella sezione 'mod_mam di ejabberd.yml:

  mod_mam:
  ## Mnesia is limited to 2GB, better to use an SQL backend
  ## For small servers SQLite is a good fit and is very easy
  ## to configure. Uncomment this when you have SQL configured:
  ## db_type: sql

Come questi commenti suggeriscono, un SQL backend è fortemente raccomandato se vuoi usare il tuo server ejabberd per qualunque cosa più che un semplice test. Ejabberd supporta MySQL, SQLite e PostgreSQL. Ai fini dell' efficienza, questa guida utilizzerà PostgresSQL perché altri server come ad esempio Matrix e PeerTube lo supportano.

Installare PostgreSQL

PostgreSQL è reperibile nei repository Debian:

apt install postgresql

In aggiunta, dovrai installare i relativi driver per Erlang, (headers nell'originale, N.d.T.) il linguaggio in cui ejabberd è scritto, così puoi effettivamente interagire col server PostgreSQL:

apt install erlang-p1-pgsql

Lancia il demone PostgreSQL per cominciare ad usarlo:

systemctl start postgresql

Creare il Database

Per creare il database, prima crea un utente PostgreSQL per ejabberd:

 su -c "createuser --pwprompt ejabberd" postgres

Quindi, crea il database e rendi ejabberd il suo proprietario:

 su -c "psql -c 'CREATE DATABASE ejabberd OWNER ejabberd;'" postgres

Importare lo Schema del Database

Ejabberd non crea lo schema del database in automatico; Deve essere importato nel database prima di usarlo.

 su -c "curl -s https://raw.githubusercontent.com/processone/ejabberd/master/sql/pg.sql | psql ejabberd" postgres

Configurare ejabberd per usare PostgreSQL

Infine, aggiungi la seguente configurazione a ejabberd.yml:

sql_type: pgsql
sql_server: "localhost"
sql_database: "ejabberd"
sql_username: "ejabberd"
sql_password: "psql_password"

default_db: sql

Quella linea alla fine imposta automaticamente che ogni database del modulo sia gestito da sql . Questo include il modulo mod_mam , quindi tutti i nostri dati saranno salvati con PostgreSQL.

Chiamate Voce e Video

Ejabberd supporta i protocolli TURN e STUN per permettere agli utenti internet dietro NAT di eseguire chiamate voce e video con altri utenti XMPP. Questo è abilitato in automatico con l'uso di ejabberd_stun.

Ad ogni modo, se hai intenzione di usare ejabberd a fianco di altre applicazioni che richiedono TURN e STUN, come ad esempio Matrix, dovrai configurare il tuo server TURN esterno usando Coturn.

Configurazione con Coturn e `mod_stun_disco`

Innanzitutto, configura un server TURN e STUN con Coturn usando un segreto per l'identificazione.

Quindi, modifica mod_stun_disco in modo che contenga l'informazione apposita per il tuo server TURN:

  mod_stun_disco:
    secret: &quot;your_auth_secret&quot;
    services:
      -
        host: turn.esempio.org
        type: stun
      -
        host: turn.esempio.org
        type: turn

Usare ejabberd

Registrare l'Utente Amministratore

Per cominciare ad usare ejabberd, prima di tutto lancia il demone ejabberd:

systemctl restart ejabberd

Quindi, usando ejabberdctl come utente ejabberd, registra l'utente amministratore impostato in ejabberd.yml:

su -c "ejabberdctl register admin esempio.org password" ejabberd

Questo andrà a creare l'utente admin@esempio.org.

Usare l'Interfaccia Web

Di base, ejabberd ha un'interfaccia web accessibile da http://esempio.org:5280/admin. Quando accedi a questa interfaccia, ti vengono chieste le credenziali di amministratore.

Dopo aver eseguito l'accesso con le credenziali di amministratore, sarai in grado di gestire il tuo server ejabberd da questa interfaccia.

Configurazioni Ulteriori

Per uno sguardo più approfondito a tutti i moduli e opzioni, da' un occhio alla seguente documentazione ejabberd:

E con questo, hai configurato con successo il tuo server XMPP ejabberd!