====== 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**
^Software^Descrizione^
|Prosody|Server xmpp|
|Prosody mod_turncredentials|Fornisce l'accesso di prosody al server Turn|
|Prosody mod_http_file_share|Permette la condivisione di media tra gli utenti|
|Coturn |server turn per le chiamate Audio/Video|
**Lato client**
^Software^Descrizione^
|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.
^Porta^Protocollo^Descrizione^
|5222|tcp|Xmpp server |
|5269|tcp|Xmpp server connessioni esterne|
|5280|tcp|Web server integrato usato per mod_http_file_share non cifrato|
|5281|tcp|Web server integrato usato per mod_http_file_share cifrato|
|3478|udp e tcp|Coturn|
|da 64739 a 65535|udp|porte 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 .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