Prosody è un server XMPP open source gratuito scritto in Lua. È veloce e leggero. XMPP è un ottimo protocollo per la messaggistica istantanea. Questo tutorial ti mostrerà come installare e configurare il server Prosody XMPP su Ubuntu 20.04. Una volta terminato questo tutorial, avrai il tuo server di chat.
Passaggio 1:installa Prosody su Ubuntu 20.04
Prosody è incluso nel repository Ubuntu predefinito. Il team di Prosody mantiene anche un repository di pacchetti. Se vuoi ottenere l'ultima versione, devi aggiungere il repository Prosody con il seguente comando.
echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list
Quindi esegui il comando seguente per scaricare e importare la chiave pubblica di Prosody, che consente al gestore di pacchetti APT di verificare l'integrità dei pacchetti scaricati da questo repository.
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
Quindi, aggiorna l'indice del pacchetto locale e installa l'ultima versione di Prosody.
sudo apt update sudo apt install prosody
Una volta installato, Prosody si avvierà automaticamente. Puoi verificarne lo stato con:
systemctl status prosody
Uscita:
● prosody.service - Prosody XMPP Server Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-04-19 13:58:40 UTC; 16s ago Docs: https://prosody.im/doc Main PID: 1894 (lua5.2) Tasks: 1 (limit: 1108) CGroup: /system.slice/prosody.service └─1894 lua5.2 /usr/bin/prosody -F Apr 19 13:58:40 localhost systemd[1]: Started Prosody XMPP Server.
Se non è in esecuzione, puoi avviarlo con
sudo systemctl start prosody
Per abilitare l'avvio automatico all'avvio del sistema, esegui
sudo systemctl enable prosody
Fase 2:apertura delle porte nel firewall
Per impostazione predefinita, è in ascolto sulla porta TCP 5269 e 5222 dell'indirizzo IP pubblico, come si può vedere con il comando seguente. (Se il tuo Ubuntu non ha il comando netstat, puoi installarlo con sudo apt install net-tools
.)
sudo netstat -lnptu | grep lua
- La porta 5222 viene utilizzata per la connessione da client a server.
- La porta 5269 viene utilizzata per la connessione da server a server.
Se hai abilitato il firewall UFW su Ubuntu, devi aprire le porte sopra con il seguente comando.
sudo ufw allow 5222,5269/tcp
Fase 3:Configura il server XMPP di Prosody
Modifica il file di configurazione principale con un editor di testo a riga di comando come Nano.
sudo nano /etc/prosody/prosody.cfg.lua
In module_enabled {...}
sezione, puoi decommentare una riga per abilitare un modulo specifico o commentare una riga per disabilitare un modulo specifico. Ogni modulo ha una descrizione che ti dice cosa fa. Probabilmente vorrai abilitare il modulo BOSH, che sta per B flussi idirezionali O ver S H sincrona TTP. Consente la comunicazione XMPP su HTTP.
Quindi, scorrere verso il basso nel file di configurazione. Se desideri consentire la registrazione dell'account dal client XMPP, imposta allow_registration
al vero. Nota che devi sapere come prevenire gli abusi prima di farlo. Se non conosci XMPP, probabilmente non vorrai consentire ai client XMPP di registrare gli account da soli.
allow_registration = true;
Prosody consente solo comunicazioni crittografate, indicate dalle due righe seguenti.
c2s_require_encryption = true s2s_require_encryption = true
Tuttavia, è necessario creare un host virtuale e installare il certificato TLS, in modo che le connessioni possano essere crittografate. Per impostazione predefinita, in Prosody è presente un solo host virtuale:localhost, come indicato dalla riga seguente.
VirtualHost "localhost"
Ora creiamo un altro host virtuale come chat.example.com
. Aggiungi la seguente riga in questo file.
VirtualHost "chat.example.com"
Salva e chiudi il file. Quindi dobbiamo ottenere e installare un certificato TLS affidabile da Let's Encrypt.
Fase 4:ottieni un certificato TLS affidabile da Let's Encrypt
Emetti il seguente comando per installare il client Let's Encrypt (certbot) sul server Ubuntu.
sudo apt install certbot
Se non hai ancora un server web in esecuzione, ti consiglio di installarne uno (Apache o Nginx), perché è più facile ottenere e installare il certificato TLS con un server web piuttosto che usare altri metodi.
Se utilizzi il server web Apache, devi installare il plugin Apache. (Il seguente comando installerà il server Web Apache se non è già installato sul tuo sistema.)
sudo apt install python3-certbot-apache
Se utilizzi il server web Nginx, installa il plugin Nginx. (Il seguente comando installerà il server web Nginx se non è già installato sul tuo sistema.)
sudo apt install python3-certbot-nginx
Ottenere il certificato TLS con Apache Web Server
Devi disporre di un host virtuale Apache per chat.example.com
prima di ottenere il certificato Let's Encrypt TLS. Crea il file dell'host virtuale:
sudo nano /etc/apache2/sites-available/prosody.conf
Quindi incolla il seguente testo nel file. Sostituisci chat.example.com
con il tuo vero nome di dominio. Non dimenticare di impostare un record DNS A per questo.
<VirtualHost *:80> ServerName chat.example.com DocumentRoot /var/www/prosody </VirtualHost>
Salva e chiudi il file. Quindi crea la directory webroot.
sudo mkdir /var/www/prosody
Imposta www-data
(utente Apache) come proprietario della webroot.
sudo chown www-data:www-data /var/www/prosody -R
Abilita questo host virtuale.
sudo a2ensite prosody.conf
Ricarica Apache per rendere effettive le modifiche.
sudo systemctl reload apache2
Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere e installare il certificato Let's Encrypt TLS.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Sostituisci il testo rosso con i tuoi dati effettivi. Dovresti vedere quanto segue, il che significa che il certificato è stato ottenuto correttamente. Puoi anche vedere la directory in cui è archiviato il tuo certificato.
Ottenere il certificato TLS con il server Web Nginx
Devi disporre di un host virtuale Nginx per chat.example.com
prima di ottenere il certificato Let's Encrypt TLS. Crea il file dell'host virtuale:
sudo nano /etc/nginx/conf.d/prosody.conf
Quindi, incolla il seguente testo nel file. Sostituisci chat.example.com
con il tuo vero nome di dominio. Non dimenticare di impostare un record DNS A per questo.
server { listen 80; listen [::]:80; server_name chat.example.com; root /var/www/prosody/; location ~ /.well-known/acme-challenge { allow all; } }
Salva e chiudi il file. Quindi crea la directory principale web.
sudo mkdir /var/www/prosody/
Imposta www-data
(utente Nginx) come proprietario della web root.
sudo chown www-data:www-data /var/www/prosody -R
Ricarica Nginx per rendere effettive le modifiche.
sudo systemctl reload nginx
Una volta creato e abilitato l'host virtuale, esegui il comando seguente per ottenere e installare il certificato Let's Encrypt con il plug-in Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Dovresti vedere quanto segue, il che significa che il certificato è stato ottenuto correttamente. Puoi anche vedere la directory in cui è archiviato il tuo certificato.
Passaggio 5:installa il certificato TLS in Prosody
Modifica il file di configurazione principale.
sudo nano /etc/prosody/prosody.cfg.lua
Vai al tuo host virtuale Prosody e aggiungi il certificato TLS e il file della chiave.
ssl = { key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; }
In questo modo:
Salva e chiudi il file. Poiché il server Prosody XMPP viene eseguito come prosody
utente, dobbiamo consentire all'utente prosody di leggere il certificato TLS e il file della chiave con i seguenti comandi.
sudo apt install acl sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/
Fase 6:crea account utente
L'account utente per il server Prosody XMPP può essere creato utilizzando il comando seguente. Ti verrà chiesto di inserire una password.
sudo prosodyctl adduser [email protected]
Per cambiare la password, esegui
sudo prosodyctl passwd [email protected]
Passaggio 7:riavvia Prosody
Verifica la sintassi del file di configurazione eseguendo:
sudo prosodyctl check config
Se la sintassi è corretta, riavvia Prosody per rendere effettive le modifiche.
sudo systemctl restart prosody
Fase 8:Configura il client XMPP
Questo tutorial utilizza la messaggistica istantanea Pidgin come client XMPP. L'empatia è un altro client che puoi usare. Possono essere installati su un desktop Ubuntu eseguendo:
sudo apt install pidgin sudo apt install empathy
Al primo avvio, dovrai aggiungere un account in Pidgin. Fai clic su Aggiungi pulsante.
Quindi seleziona XMPP dall'elenco dei protocolli e inserisci il tuo nome utente, dominio e password.
Premi Aggiungi pulsante e sarai loggato.
Configura BOSH
Come spiegato in precedenza, BOSH ti consente di utilizzare XMPP su HTTP, cioè in un browser web. Ad esempio, il software per videoconferenze Jitsi Meet utilizza BOSH per integrare Prosody nelle pagine Web, in modo che i partecipanti possano chattare via SMS mentre si uniscono a una riunione video online.
Se hai abilitato il modulo BOSH, modifica il file di configurazione di Prosody (/etc/prosody/prosody.cfg.lua
) e aggiungi le due righe seguenti alla fine del file di configurazione.
consider_bosh_secure = true; cross_domain_bosh = true; https_ssl = { certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; }
Dove:
- La prima riga impone una connessione HTTPS sicura.
- La seconda riga aggiunge le intestazioni COR alle risposte BOSH per consentire alle richieste di provenire da qualsiasi dominio.
- Il parametro https_ssl specifica il certificato TLS e il file chiave per il servizio BOSH.
Salva e chiudi il file. Quindi riavvia Prosody.
sudo systemctl restart prosody
Se hai abilitato il firewall UFW sul server Ubuntu, devi aprire le porte 5280 e 5281 con il seguente comando.
sudo ufw allow 5280,5281/tcp
L'endpoint BOSH sarà disponibile al seguente indirizzo una volta terminato questo tutorial. porta 5280 è per HTTP in testo normale, porta 5281 per HTTPS.
http://chat.example.com:5280/http-bind
o
https://chat.example.com:5281/http-bind.
Un endpoint BOSH è un URL utilizzato da un client per connettersi al server XMPP tramite HTTP.
Chat room multiutente
Per abilitare una MUC (Chat multiutente), aggiungi la seguente riga nel file di configurazione di Prosody. Sostituisci conference.example.com
con il tuo sottodominio preferito.
Component "conference.example.com" "muc" restrict_room_creation = "admin"
La seconda riga consentirà solo all'amministratore di creare stanze. Per definire l'amministratore per il server XMPP, devi prima creare un account usando sudo prosodyctl adduser
comando come mostrato sopra. Quindi nel file di configurazione, aggiungi l'account in admin {...}
sezione come di seguito.
admins = { "[email protected]", "[email protected]" }
Verifica la sintassi del file di configurazione eseguendo:
sudo prosodyctl check config
Se la sintassi è corretta, riavvia Prosody per rendere effettive le modifiche.
sudo systemctl restart prosody
Risoluzione dei problemi
Il file di registro principale per Prosody è /var/log/prosody/prosody.log
. C'è anche un registro degli errori /var/log/prosody/prosody.err
. Se Prosody non funziona come previsto, il registro degli errori è un buon posto da controllare.
Rinnovo automatico del certificato TLS
Puoi creare un lavoro Cron per rinnovare automaticamente il certificato TLS. Apri il file crontab dell'utente root.
sudo crontab -e
Se utilizzi il server web Apache, aggiungi la seguente riga in fondo al file.
@daily certbot renew --quiet && systemctl reload postfix dovecot apache2
Se stai utilizzando il server web Nginx, aggiungi la seguente riga.
@daily certbot renew --quiet && systemctl reload postfix dovecot nginx
È necessario ricaricare Postfix, Dovecot e il web server per far sì che questi programmi raccolgano il nuovo certificato e la chiave privata.