Strumenti Utente

Strumenti Sito


rete:xmpp:prosody_simple

Un server messaggistica instantanea XMPP per uso privato

Autore: Fabio Di Matteo
Ultima revisione: 19/02/2026 10:50

Configurazione di un piccolo server di messaggistica completo di tutte le caratteristiche moderne più usate. Ovvero:

  • Connessioni cifrate mediante certificato;
  • Cifratura End to End tramite OMEMO (via client Blabber.im)
  • Condivisioni di contenuti multimediali come immaggini, video, audio, posizione, file;
  • Chiamate Audio/Video;

Software utilizzati

Lato server

SoftwareDescrizione
ProsodyServer xmpp
Prosody mod_turncredentialsFornisce l'accesso di prosody al server Turn
Prosody mod_http_file_sharePermette la condivisione di media tra gli utenti
Coturn server turn per le chiamate Audio/Video

Lato client

SoftwareDescrizione
Blabber.im app per android che supporta che le chat xmpp

Server Hardware:Raspberry Pi 1 SO: Arch Linux Arm

Configuriamo Prosody

Creiamo i chiave privata e certificati per le connessioni cifrate. Dobbiamo creare 2 certificati uno per xmpp e l'altro per https (media sharing):

Se si vuole creare un file di certificato unico per tutti gli hostname utilizzati (cosa da preferire a mio avviso) meglio seguire questa guida: Creare certificati OpenSSL per hostname di terzo livello
xmpp (non usare scegliere la guida sopra)
cd /etc/prosody/certs/
openssl genrsa -out prosody.key 4096
openssl req -new -sha256 -key prosody.key -out prosody.csr
openssl x509 -req -sha256 -days 3650 -in prosody.csr -signkey prosody.key -out prosody.crt

https (non usare scegliere la guida sopra)

cd /etc/prosody/certs/
openssl genrsa -out prosody_https.key 4096
openssl req -new -sha256 -key prosody_https.key -out prosody_https.csr
openssl x509 -req -sha256 -days 3650 -in prosody_https.csr -signkey prosody_https.key -out prosody_https.crt

Configuriamo il Virtual host:

VirtualHost "mioserver.it"
        
	key = "/etc/prosody/certs/prosody.key";
        certificate = "/etc/prosody/certs/prosody.crt"; 
    
Nelle mie prove ho usato i certificati generati da Caddy webserver anche per prosody. Faccio 2 virtualhost uno per mioserver.it e l'altro per upload.mioserver.it . In questo modo Caddy si occuperà automaticamente della gestione dei certificati.

Abilitiamo il web server integrato.Ci servira' per far funzionare la componente http_file_share .Prima di VirtualHost, nella parte serer-wide aggiungiamo:

Se uso caddy come proxy http posso omettere la configurazione del virtualhost in modalità ssl per upload.mioserver.it. Verrà comunque avviato il server in chiaro per gli upload che farà uso di caddy per la crittografia
http_host = "upload.mioserver.it"
https_ports = { 5281 }
https_interfaces = { "*" }
https_ssl = {
        certificate = "/etc/prosody/certs/prosody.crt";
        key = "/etc/prosody/certs/prosody.key";
        };

Abilitiamo il support a Coturn. Prima di VirtualHost, nella parte serer-wide aggiungiamo:

turncredentials_host = "turn.mioserver.it"
turncredentials_secret="chiavestaticacoturn"

Abilitiamo la condivisione di media con mod_http_file_share, dopo la sezione VirtualHost inseriamo le righe:

Component "upload.mioserver.it" "http_file_share"
   http_file_share_size_limit = 160*1024*1024 -- 160 MiB
   http_external_url = "https://upload.mioserver.it" --uso di caddy come proxy per ottenere i certificati gratuitamente

http_file_share_access = {
        "mioserver.it", -- anyone with a @example.org address
}

Caddy, il proxy http in questo caso

Con caddy ottengo i certificati ssl che permetteranno ai client xmpp di scaricare gli allegati in maniera sicura evitando di usare i certificati autofirmati usati per prosody. /etc/caddy/Caddyfile

upload.mioserver.it {
    reverse_proxy upload.mioserver.it:5280
}

Configuriamo Coturn

listening-port=3478
min-port=64739
max-port=65535
log-file=/var/log/turnserver/turn.log
pidfile=/run/turnserver/turnserver.pid
realm=turn.mioserver.it
server-name=turn.mioserver.it
use-auth-secret
static-auth-secret=chiavestaticacoturn
listening-ip=0.0.0.0
external-ip=mioserver.it
detect-external-ip=yes

E impostare le variabili d'ambiente di coturn in questo modo:

DETECT_EXTERNAL_IP=yes  DETECT_RELAY_IP=yes 

Porte da inoltrare nel modem/router

Le porte da inoltrare verso l'ip del server all'interno della rete locale.

PortaProtocolloDescrizione
5222tcpXmpp server
5269tcpXmpp server connessioni esterne
5280tcpWeb server integrato usato per mod_http_file_share non cifrato
5281tcpWeb server integrato usato per mod_http_file_share cifrato
3478udp e tcpCoturn
da 64739 a 65535udpporte usate da coturn per le connessioni
Inoltre occorre associare tutti i domini di 4 livello associati all'host. Qualora non lo fossero gia'. In modo tale che <qualunquecosa>.mioserver.it punti sempre all'ip pubblico del nostro server. Ci serve per abilitare i servizi come conference.mioserver.it, upload.mioserver.it, turn.mioserver.it etc…

Lato client

Alcuni client di messaggistica non permettono di utilizzare i nostri certificati autofirmati. Possiamo però aggiungerli a livello di sistema con i seguenti comandi.
Gnu/Linux:

Ubuntu

sudo cp prosody.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
sudo cp prosody_https.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
rete/xmpp/prosody_simple.txt · Ultima modifica: 25/02/2026 16:12 da Fabio Di Matteo