Barra laterale

Command disabled: revisions
rete:xmpp:prosody_simple

Un server messaggistica instantanea XMPP per uso privato

Autore: Fabio Di Matteo
Ultima revisione: 19/09/2022 - 10:23

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):

xmpp

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

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

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

http_host = "upload.mioserver.it"
https_ports = { 5281 }
https_interfaces = { "*" }
https_ssl = {
        certificate = "/etc/prosody/certs/prosody_https.crt";
        key = "/etc/prosody/certs/prosody_https.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_file_share_access = {
        "mioserver.it", -- anyone with a @example.org address
}

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

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: 19/09/2022 - 10:31 da Fabio Di Matteo