... | @@ -16,7 +16,7 @@ Abbiamo scelto di installare prosody su una macchina virtuale dedicata. La macch |
... | @@ -16,7 +16,7 @@ Abbiamo scelto di installare prosody su una macchina virtuale dedicata. La macch |
|
Gli step necessari sono installare:
|
|
Gli step necessari sono installare:
|
|
* Debian stabile o qualsiasi distro a scelta
|
|
* Debian stabile o qualsiasi distro a scelta
|
|
* [Certbot](https://certbot.eff.org/)
|
|
* [Certbot](https://certbot.eff.org/)
|
|
* [Nginx](#nginx) (non necessario ma comodo per configurazioni e{r,s}otiche)
|
|
* [Nginx](#nginx) (non necessario ma comodo per configurazioni esotiche)
|
|
* [MySQL/MariaDB/PostgreSQL](#database) (se il piano è di usare un DB come backend per lo storage)
|
|
* [MySQL/MariaDB/PostgreSQL](#database) (se il piano è di usare un DB come backend per lo storage)
|
|
* Prosody
|
|
* Prosody
|
|
Ed infine clonare il repository dei [prosody-modules](http://hg.prosody.im/prosody-modules/)
|
|
Ed infine clonare il repository dei [prosody-modules](http://hg.prosody.im/prosody-modules/)
|
... | @@ -42,6 +42,17 @@ Impostate le seguenti configurazioni: |
... | @@ -42,6 +42,17 @@ Impostate le seguenti configurazioni: |
|
* https_interfaces = { "*" } `HTTPS su tutte le interfacce`
|
|
* https_interfaces = { "*" } `HTTPS su tutte le interfacce`
|
|
* c2s_require_encryption = true `I client possono connettersi al server solo usando crittografia`
|
|
* 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, veddi 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 = { };
|
|
|
|
|
|
### Connessioni fra i server
|
|
### Connessioni fra i server
|
|
|
|
|
|
* Moduli disabilitati
|
|
* Moduli disabilitati
|
... | @@ -84,15 +95,33 @@ Abilitati i moduli: |
... | @@ -84,15 +95,33 @@ Abilitati i moduli: |
|
* max_history_message = 200 `Quanti messaggi possono essere ricevuti, al massimo, da un client che entra in una stanza`
|
|
* 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à`
|
|
* 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
|
|
## Configurazioni altre da prosody
|
|
|
|
|
|
|
|
Dopo aver configurato prosody sono necessari alcuni altri passaggi per poter usare il servizio di chat: devono essere configurati dei record DNS e opzionalmente nginx che agisca come reverse proxy.
|
|
|
|
|
|
### DNS server
|
|
### DNS server
|
|
|
|
|
|
TODO
|
|
I record DNS sono consigliati per garantire che tutti i client riescano a connettersi se si usa una configurazione "standard" e sono obbligatori se si usa una configurazione non standard.
|
|
|
|
Normalmente il protocollo XMPP usa la porta 5222 per le connessioni dei clients e 5269 per le connessioni degli altri servers. A volte per aggirare restrizioni imposte dai firewall o per esigenze particolari queste porte potrebbero non essere usabili e quindi bisogna istruire i clients ed i server rispetto a come connettersi. Per fare questo si usano dei record di tipo SRV secondo questa sintassi:
|
|
|
|
```
|
|
|
|
_xmpp-server._tcp IN SRV <priority> <weight> <port> server.tld
|
|
|
|
_xmpp-client._tcp IN SRV <priority> <weight> <port> server.tld
|
|
|
|
```
|
|
|
|
|
|
|
|
Nel caso ci fossero più server XMPP con il valore di `<priority>` è possibile decidere quale avrà la precedenza, il valore di `<weight>` invece indica chi, a parità di priorità, verrà preferito.
|
|
|
|
|
|
### Nginx
|
|
### Nginx
|
|
|
|
|
|
TODO
|
|
Nginx non è necessario ma è utile in alcune situazioni particolari. La scelta è caduta su nginx perchè svolge in maniera molto efficente il ruolo di reverse proxy non chiedendo molte risorse.
|
|
|
|
Un caso in cui risulta utile potrebbe essere quello di servire una pagina di presentazione o registrazione ed allo stesso tempo BOSH o http-upload. Senza nginx questi servizi dovrebbero ascoltare su porte diverse ed i client dovrebbero esserne informati, usando nginx come reverse proxy invece i servizi saranno contattabili sulla stessa porta (magari una 80 o 443) anche se internamente ascolteranno su porte diverse come 5280 e 5281.
|
|
|
|
|
|
|
|
Nella [cartella delle configurazioni](https://git.eigenlab.org/eigenlab/do-it-yourJabber/tree/master/serviceconf/) sono presenti alcune configurazioni di esempio.
|
|
|
|
|
|
|
|
### Letsencrypt
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
### Database
|
|
### Database
|
|
|
|
|
|
|
|
Prosody supporta diversi metodi per memorizzare i dati, in particolare diversi moduli possono usare diversi 'backend' quelli disponibili vanno dallo storage null(non persistente e che fallisce sempre) a quello su file (internal) fino ad arrivare ai database (sql). I database supportati fra i quali scegliere sono SQLite3, MySQL e PostgreSQL.
|
|
|
|
Il fatto che diversi moduli possano usare diversi backend è comodo perché permette ad esempio di usare sql per tutto tranne che per l'archivio dei messaggi, le motivazioni sono riportate sopra. Oltre a questo permette di avere più flessibilità. |
|
|
|
\ No newline at end of file |