|
|
# INTRO
|
|
|
In questa pagina sono elencate le configurazioni più rilevanti, sono la versione commentata delle configurazioni presenti nel repo git.
|
|
|
|
|
|
Le scelte più importanti rispetto alla sicurezza sono quelle che riguardano l'uso di connessioni protette da crittografia e la forzatura ad usare solo connessioni crittografate, tra client e server e fra server e server. In questo modo possiamo essere certi che nessuna comunicazione passi in 'chiaro' su internet. Invece è necessario usare l a crittografia end to end per evitare che il contenuto delle conversazioni che passano attraverso il server di chat siano accessibili da terzi.
|
|
|
|
|
|
Altre configurazioni sensibili sono quelle dell'archivio dei messaggi su server (Message Archive Management). Questa è una funzionalità molto utile che permette di avere un'esperienza di chat simile a quella degli altri provider, cioè la possibilità di lasciare i messaggi ricevuti sul server per poterli scaricare in un secondo momento. Questa funzione però espone l'utente ad un rischio: nel caso il server venisse compromesso i messaggi archiviati con MAM sarebbero leggibili. Una precauzione da adottare per proteggersi da questa evenienza è l'utilizzo della cifratura end to end. Quindi abbiamo optato per una configurazione che permetta di salvare i messaggi sul server, conservandoli però per un periodo massimo di 2 settimane.
|
|
|
|
|
|
Coerentemente con questa scelta utilizziamo la funzione di archiviazione dei messaggi interna di prosody (su file) invece di archiviare i messaggi nel database.
|
|
|
|
|
|
Infatti il problema di archiviare le chat nel database sarebbe quello di avere gli archivi di alcune conversazioni nei backup periodici del database.
|
|
|
|
|
|
## Come installare prosody
|
|
|
|
|
|
Abbiamo scelto di installare prosody su una macchina virtuale dedicata. La macchina è virtualizzata con qemu/kvm e il suo disco è ospitato all'interno di una partizione cifrata. Questo setup ci assicura che se la macchina host è spenta nessun@ può accedere ai dati del server di chat. Un'altra ragione per avere una macchina dedicata è che qualsiasi compromissione rimarrà isolata alla macchina stessa.
|
|
|
|
|
|
Gli step necessari sono installare:
|
|
|
* Debian stabile o qualsiasi distro a scelta
|
|
|
* [Certbot](https://certbot.eff.org/)
|
|
|
* [Nginx](#nginx) (non necessario ma comodo per configurazioni e{r,s}otiche)
|
|
|
* [MySQL/MariaDB/PostgreSQL](#database) (se il piano è di usare un DB come backend per lo storage)
|
|
|
* Prosody
|
|
|
Ed infine clonare il repository dei [prosody-modules](http://hg.prosody.im/prosody-modules/)
|
|
|
|
|
|
|
|
|
## Scelta delle configurazioni
|
|
|
|
|
|
Per ottenere un servizio di chat il più possibile sicuro ma allo stesso tempo facilmente utilizzabile, coerentemente con le riflessioni fatte in precendenza abbiamo configurato il server nel seguente modo.
|
|
|
|
|
|
Le configurazioni possono essere divise in
|
|
|
|
|
|
### Generali
|
|
|
|
|
|
Moduli abilitati:
|
|
|
* roster `fornisce agli utenti una rubrica per i contatti`
|
|
|
* saslauth `permette l'autenticazione con SASL`
|
|
|
|
|
|
Impostate le seguenti configurazioni:
|
|
|
* authentication = "internal_hashed" `Salva le password come hash`
|
|
|
* log = { error = "/path/to/file.log";} `Imposta il livello di log a error ed imposta la cartella`
|
|
|
* http_ports = { } `HTTP liscio non deve essere possibile`
|
|
|
* https_ports = { 5281 } `HTTPS su porta 5281`
|
|
|
* https_interfaces = { "*" } `HTTPS su tutte le interfacce`
|
|
|
* c2s_require_encryption = true `I client possono connettersi al server solo usando crittografia`
|
|
|
|
|
|
### Connessioni fra i server
|
|
|
|
|
|
* Moduli disabilitati
|
|
|
* dialback `Un metodo basato su dns per la verifica dell'identità del server a cui connettersi`
|
|
|
|
|
|
* Moduli abilitati
|
|
|
* tls
|
|
|
Impostate le seguenti configurazioni:
|
|
|
* s2s_require_encryption = true `La connessione fra server *deve* essere fatta in modo cifrato`
|
|
|
* s2s_secure_auth = true `Il certificato *deve* essere valido. (Limita la compatibilità con alcuni server che non supportano la crittografia)`
|
|
|
|
|
|
### Features per i client
|
|
|
Abilitati i moduli:
|
|
|
* saslauth
|
|
|
* disco `Abilita la scoperta dei servizi presenti sul server`
|
|
|
* pep `Abilita il supporto per per PEP necessario per omemo`
|
|
|
|
|
|
> I prossimi 3 servono per poter usare l'upload http dei files e per scaricare files via HTTP
|
|
|
|
|
|
* http
|
|
|
* http-files
|
|
|
* http_uppload
|
|
|
* http_max_content_size = 5000000000 `Imposta il limite di upload per i file degli utenti`
|
|
|
* http_upload_file_size_limit = 5000000000
|
|
|
|
|
|
* register
|
|
|
* allow_registration = false `Impedisce la registrazione di nuovi utenti ma permette a quelli correnti di cambiarsi la password da soli`
|
|
|
|
|
|
> Le prossime 3 servono soprattutto per i dispositivi mobili per risparmiare batteria
|
|
|
|
|
|
* csi `Abilita il client state indication`
|
|
|
* throttle_presence `I client possono avvertire quando non sono attivi e non vogliono visualizzare gli stati "è online/offline"`
|
|
|
* filter_chatstates `Come sopra ma per "sta digitando"`
|
|
|
* carbons `Abilita le carbon-copies, un messaggio viene ricevuto su tutte le istanze collegate per un dato account`
|
|
|
* mam `Abilita l'archivio dei messaggi su server quando un client è offline`
|
|
|
* mam_muc `Abilita l'archivio dei messaggi delle chatroom su server quando un client è offline`
|
|
|
* max_archive_query_results = 500 `Al massimo 500 messaggi per richiesta vengono scaricati quando si scarica la history (tenere questo valore basso per non impallare il server)`
|
|
|
* archive_expires_after = "2w" `I messaggi archiviati scadono dopo 2 settimane`
|
|
|
* default_archive_policy = true `Di default i messaggi vengono salvati sul server, i client possono disabilitare la funzionalità`
|
|
|
* max_history_message = 200 `Quanti messaggi possono essere ricevuti, al massimo, da un client che entra in una stanza`
|
|
|
* muc_log_by_default = true `Di default i messaggi delle room vengono salvati sul server, i client possono disabilitare la funzionalità`
|
|
|
|
|
|
|
|
|
## Configurazioni altre da prosody
|
|
|
|
|
|
### DNS server
|
|
|
|
|
|
TODO
|
|
|
|
|
|
### Nginx
|
|
|
|
|
|
TODO
|
|
|
|
|
|
### Database |
|
|
\ No newline at end of file |