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