... | ... | @@ -24,77 +24,72 @@ Ed infine clonare il repository dei [prosody-modules](http://hg.prosody.im/proso |
|
|
|
|
|
|
|
|
## 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
|
|
|
Per ottenere un servizio di chat il più possibile sicuro ma allo stesso tempo facilmente utilizzabile, e tenendo a mente le riflessioni fatte in precedenza, illustriamo la configurazione di Prosody che abbiamo scelto (vedi anche [qui](https://prosody.im/doc/configure) una guida generale alla configurazione di Prosody).
|
|
|
Le configurazioni possono essere divise in generali, connessioni fra server, e funzionalità per i client.
|
|
|
|
|
|
### Generali
|
|
|
|
|
|
Moduli abilitati:
|
|
|
* roster `fornisce agli utenti una rubrica per i contatti`
|
|
|
* saslauth `permette l'autenticazione con SASL`
|
|
|
* `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`
|
|
|
|
|
|
> I seguenti parametri vanno inseriti nel blocco https_ssl { }
|
|
|
|
|
|
* certificate = "/path/to/file/fullchain.pem"; `File contenente il certificato`
|
|
|
* key = "/path/to/file/privkey.pem"; `File contenente la chiave privata del certificato`
|
|
|
* ciphers = "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305-D:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305-D:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA"; `I cifrari da usare, in ordine di sicurezza`
|
|
|
* dhparam = "/path/to/filedhparam4096.pem"; `Parametri Diffie-Helman generati per l'host, vedi logjam attack`
|
|
|
* curve = "secp384r1"; `La curva da usare fra quelle disponibili`
|
|
|
* protocol = "tlsv1_2"; `Abilita solo tls1.2, gli altri sono da considerare 'bucabili' limita il supporto a client recenti.`
|
|
|
* options = { "no_sslv2", "no_sslv3", "no_tlsv1", "no_tlsv1_1", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" }; `Disabilita SSLv2 e v3 che sono considerati insicuri così come TLSv1 e TLSv2, impone di rispettare l'ordine dei cifrari del server più altri accorgimenti.`
|
|
|
* verifyext = { };
|
|
|
* `authentication = "internal_hashed"` Salva le password come hash
|
|
|
* `log = { error = "/path/to/file.log";}` Imposta il livello di log a "error" ed imposta il file di destinazione
|
|
|
* `http_ports = { }` Non consente connessioni via HTTP liscio (avendo specificato un elenco vuoto di porte ammesse)
|
|
|
* `https_ports = { 5281 }` HTTPS su porta 5281
|
|
|
* `https_interfaces = { "*" }` HTTPS su tutte le interfacce
|
|
|
* `c2s_require_encryption = true` Impone ai client di usare la cifratura quando si connettono al server
|
|
|
|
|
|
I seguenti parametri vanno inseriti nel blocco `https_ssl { }`, vedi anche [questa](https://prosody.im/doc/advanced_ssl_config) guida alla configurazione di SSL con Prosody.
|
|
|
* `certificate = "/path/to/file/fullchain.pem";` File contenente il certificato
|
|
|
* `key = "/path/to/file/privkey.pem";` File contenente la chiave privata del certificato
|
|
|
* `ciphers = "ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305-D:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305-D:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA";` I cifrari da usare, in ordine di preferenza; noi li abbiamo elencati in ordine di robustezza.
|
|
|
* `dhparam = "/path/to/filedhparam4096.pem";` Parametri Diffie-Helman generati per l'host (vedi [logjam](https://en.wikipedia.org/wiki/Logjam_(computer_security)))
|
|
|
* `curve = "secp521r1";` La curva da usare fra quelle disponibili
|
|
|
* `protocol = "tlsv1+";` Abilita il supporto di TLSv1, TLSv1.1, TLSv1.2 e impedisce l'uso di SSLv2, SSLv3.
|
|
|
* `options = { "no_sslv2", "no_sslv3", "no_tlsv1", "no_tlsv1_1", "no_ticket", "no_compression", "cipher_server_preference", "single_dh_use", "single_ecdh_use" };` Disabilita SSLv2 e v3 che sono considerati insicuri così come TLSv1 e TLSv2, impone di rispettare l'ordine dei cifrari del server più altri accorgimenti.
|
|
|
* `verifyext = { };` opzioni per verifiche "extra"
|
|
|
|
|
|
### Connessioni fra i server
|
|
|
|
|
|
* Moduli disabilitati
|
|
|
* dialback `Un metodo basato su dns per la verifica dell'identità del server a cui connettersi`
|
|
|
|
|
|
* `dialback` Un metodo basato su dns per la verifica dell'identità del server a cui connettersi
|
|
|
* Moduli abilitati
|
|
|
* tls
|
|
|
* `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)`
|
|
|
* `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 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 `permette agli utenti di cambiarsi la password da soli`
|
|
|
* allow_registration = false `Impedisce la registrazione di nuovi utenti in-band`
|
|
|
|
|
|
> 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à`
|
|
|
* `saslauth`
|
|
|
* `disco` Abilita la scoperta dei servizi presenti sul server
|
|
|
* `pep` Abilita il supporto 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` permette agli utenti di cambiarsi la password da soli
|
|
|
* `allow_registration = false` Impedisce la registrazione di nuovi utenti in-band
|
|
|
|
|
|
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à
|
|
|
|
|
|
## Prosody modules
|
|
|
|
... | ... | @@ -126,7 +121,7 @@ Un caso in cui risulta utile potrebbe essere quello di servire una pagina di pre |
|
|
|
|
|
Nella [cartella delle configurazioni](https://git.eigenlab.org/eigenlab/do-it-yourJabber/tree/master/serviceconf/) sono presenti alcune configurazioni di esempio.
|
|
|
|
|
|
### Letsencrypt
|
|
|
### Let'sEncrypt
|
|
|
|
|
|
Per i certificati SSL una buona scelta è quella di usare letsencrypt: fornisce certificati Domain Validated gratuitamente. Altro vantaggio è che la procedura di rinnovo è completamente scriptabile. Il progetto parte dall' Internet Security Research Group (ISRG) un ente no profit dietro al quale si trovano Mozilla, EFF, alcune università, Cisco ed altri. Sono presenti innumerevoli guide che spiegano come configurare il software. Unica cosa che può essere utile menzionare è che nel file `/etc/letsencrypt/cli.ini` può essere inserito un parametro per la dimensione delle chiavi generate e per far ripartire automaticamente nginx e/o prosody al momento del rinnovo così da farli usare il nuovo certificato. Nella [cartella delle configurazioni](https://git.eigenlab.org/eigenlab/do-it-yourJabber/tree/master/serviceconf/) è presente un esempio.
|
|
|
|
... | ... | |