Strumenti Utente

Strumenti Sito


xmppit:guide:installazione-server-prosody

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
xmppit:guide:installazione-server-prosody [2024/03/03 20:07] roughnecksxmppit:guide:installazione-server-prosody [2024/06/16 17:02] (versione attuale) – del roughnecks
Linea 1: Linea 1:
-====== Guida Installazione Server Prosody ====== 
- 
-Prosody è uno dei server XMPP più famosi in circolazione, costantemente aggiornato dagli sviluppatori. 
-Questa guida vi aiuterà nell'installazione su di un server Debian Stable (12.5 al momento della stesura). 
- 
-===== Installazione Pacchetti ===== 
- 
-Cominciamo con l'aggiungere il repository dei pacchetti "backports" alla nostra stable. I backports offrono alcuni software aggiornati, compatibili con le versioni stabili del sistema operativo. 
- 
-    nano /etc/apt/sources.list 
-     
-Aggiungete una riga in fondo come questa: 
- 
-    deb http://deb.debian.org/debian bookworm-backports main 
-     
-Salvate, aggiornate la lista pacchetti con 'apt update' ed installate prosody e un set di moduli: 
- 
-    apt install prosody prosody-modules 
-     
-===== Configurazione ===== 
- 
-Questo è il file di configurazione che viene fornito dal pacchetto appena installato e che si trova in '/etc/prosody/prosody.cfg.lua' 
- 
-<code lua> 
--- Prosody Example Configuration File 
--- 
--- Information on configuring Prosody can be found on our 
--- website at https://prosody.im/doc/configure 
--- 
--- Tip: You can check that the syntax of this file is correct 
--- when you have finished by running this command: 
---     prosodyctl check config 
--- If there are any errors, it will let you know what and where 
--- they are, otherwise it will keep quiet. 
--- 
--- The only thing left to do is rename this file to remove the .dist ending, and fill in the 
--- blanks. Good luck, and happy Jabbering! 
- 
- 
----------- Server-wide settings ---------- 
--- Settings in this section apply to the whole server and are the default settings 
--- for any virtual hosts  
- 
--- This is a (by default, empty) list of accounts that are admins 
--- for the server. Note that you must create the accounts separately 
--- (see https://prosody.im/doc/creating_accounts for info) 
--- Example: admins = { "user1@example.com", "user2@example.net" } 
-admins = { } 
- 
--- This option allows you to specify additional locations where Prosody 
--- will search first for modules. For additional modules you can install, see 
--- the community module repository at https://modules.prosody.im/ 
--- For a local administrator it's common to place local modifications 
--- under /usr/local/ hierarchy: 
-plugin_paths = { "/usr/local/lib/prosody/modules" } 
- 
--- This is the list of modules Prosody will load on startup. 
--- Documentation for bundled modules can be found at: https://prosody.im/doc/modules 
-modules_enabled = { 
- 
- -- Generally required 
- "disco"; -- Service discovery 
- "roster"; -- Allow users to have a roster. Recommended ;) 
- "saslauth"; -- Authentication for clients and servers. Recommended if you want to log in. 
- "tls"; -- Add support for secure TLS on c2s/s2s connections 
- 
- -- Not essential, but recommended 
- "blocklist"; -- Allow users to block communications with other users 
- "bookmarks"; -- Synchronise the list of open rooms between clients 
- "carbons"; -- Keep multiple online clients in sync 
- "dialback"; -- Support for verifying remote servers using DNS 
- "limits"; -- Enable bandwidth limiting for XMPP connections 
- "pep"; -- Allow users to store public and private data in their account 
- "private"; -- Legacy account storage mechanism (XEP-0049) 
- "smacks"; -- Stream management and resumption (XEP-0198) 
- "vcard4"; -- User profiles (stored in PEP) 
- "vcard_legacy"; -- Conversion between legacy vCard and PEP Avatar, vcard 
- 
- -- Nice to have 
- "csi_simple"; -- Simple but effective traffic optimizations for mobile devices 
- "invites"; -- Create and manage invites 
- "invites_adhoc"; -- Allow admins/users to create invitations via their client 
- "invites_register"; -- Allows invited users to create accounts 
- "ping"; -- Replies to XMPP pings with pongs 
- "register"; -- Allow users to register on this server using a client and change passwords 
- "time"; -- Let others know the time here on this server 
- "uptime"; -- Report how long server has been running 
- "version"; -- Replies to server version requests 
- --"mam"; -- Store recent messages to allow multi-device synchronization 
- --"turn_external"; -- Provide external STUN/TURN service for e.g. audio/video calls 
- 
- -- Admin interfaces 
- "admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands 
- "admin_shell"; -- Allow secure administration via 'prosodyctl shell' 
- 
- -- HTTP modules 
- --"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP" 
- --"http_openmetrics"; -- for exposing metrics to stats collectors 
- --"websocket"; -- XMPP over WebSockets 
- 
- -- Other specific functionality 
- "posix"; -- POSIX functionality, sends server to background, enables syslog, etc. 
- --"announce"; -- Send announcement to all online users 
- --"groups"; -- Shared roster support 
- --"legacyauth"; -- Legacy authentication. Only used by some old clients and bots. 
- --"mimicking"; -- Prevent address spoofing 
- --"motd"; -- Send a message to users when they log in 
- --"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use 
- --"s2s_bidi"; -- Bi-directional server-to-server (XEP-0288) 
- --"server_contact_info"; -- Publish contact information for this service 
- --"tombstones"; -- Prevent registration of deleted accounts 
- --"watchregistrations"; -- Alert admins of registrations 
- --"welcome"; -- Welcome users who register accounts 
-} 
- 
--- These modules are auto-loaded, but should you want 
--- to disable them then uncomment them here: 
-modules_disabled = { 
- -- "offline"; -- Store offline messages 
- -- "c2s"; -- Handle client connections 
- -- "s2s"; -- Handle server-to-server connections 
-} 
- 
--- Debian: 
---   Please, don't change this option since /run/prosody/ 
---   is one of the few directories Prosody is allowed to write to 
--- 
-pidfile = "/run/prosody/prosody.pid"; 
- 
--- Server-to-server authentication 
--- Require valid certificates for server-to-server connections? 
--- If false, other methods such as dialback (DNS) may be used instead. 
- 
-s2s_secure_auth = true 
- 
--- Some servers have invalid or self-signed certificates. You can list 
--- remote domains here that will not be required to authenticate using 
--- certificates. They will be authenticated using other methods instead, 
--- even when s2s_secure_auth is enabled. 
- 
---s2s_insecure_domains = { "insecure.example" } 
- 
--- Even if you disable s2s_secure_auth, you can still require valid 
--- certificates for some domains by specifying a list here. 
- 
---s2s_secure_domains = { "jabber.org" } 
- 
- 
--- Rate limits 
--- Enable rate limits for incoming client and server connections. These help 
--- protect from excessive resource consumption and denial-of-service attacks. 
- 
-limits = { 
- c2s = { 
- rate = "10kb/s"; 
- }; 
- s2sin = { 
- rate = "30kb/s"; 
- }; 
-} 
- 
--- Authentication 
--- Select the authentication backend to use. The 'internal' providers 
--- use Prosody's configured data storage to store the authentication data. 
--- For more information see https://prosody.im/doc/authentication 
- 
-authentication = "internal_hashed" 
- 
--- Many authentication providers, including the default one, allow you to 
--- create user accounts via Prosody's admin interfaces. For details, see the 
--- documentation at https://prosody.im/doc/creating_accounts 
- 
- 
--- Storage 
--- Select the storage backend to use. By default Prosody uses flat files 
--- in its configured data directory, but it also supports more backends 
--- through modules. An "sql" backend is included by default, but requires 
--- additional dependencies. See https://prosody.im/doc/storage for more info. 
- 
---storage = "sql" -- Default is "internal" (Debian: "sql" requires one of the 
--- lua-dbi-sqlite3, lua-dbi-mysql or lua-dbi-postgresql packages to work) 
- 
--- For the "sql" backend, you can uncomment *one* of the below to configure: 
---sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename. 
---sql = { driver = "MySQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" } 
---sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" } 
- 
- 
--- Archiving configuration 
--- If mod_mam is enabled, Prosody will store a copy of every message. This 
--- is used to synchronize conversations between multiple clients, even if 
--- they are offline. This setting controls how long Prosody will keep 
--- messages in the archive before removing them. 
- 
-archive_expires_after = "1w" -- Remove archived messages after 1 week 
- 
--- You can also configure messages to be stored in-memory only. For more 
--- archiving options, see https://prosody.im/doc/modules/mod_mam 
- 
- 
--- Audio/video call relay (STUN/TURN) 
--- To ensure clients connected to the server can establish connections for 
--- low-latency media streaming (such as audio and video calls), it is 
--- recommended to run a STUN/TURN server for clients to use. If you do this, 
--- specify the details here so clients can discover it. 
--- Find more information at https://prosody.im/doc/turn 
- 
--- Specify the address of the TURN service (you may use the same domain as XMPP) 
---turn_external_host = "turn.example.com" 
- 
--- This secret must be set to the same value in both Prosody and the TURN server 
---turn_external_secret = "your-secret-turn-access-token" 
- 
- 
--- Logging configuration 
--- For advanced logging see https://prosody.im/doc/logging 
--- 
--- Debian: 
---  Logs info and higher to /var/log 
---  Logs errors to syslog also 
-log = { 
- -- Log files (change 'info' to 'debug' for debug logs): 
- info = "/var/log/prosody/prosody.log"; 
- error = "/var/log/prosody/prosody.err"; 
- -- Syslog: 
- { levels = { "error" }; to = "syslog";  }; 
-} 
- 
- 
--- Uncomment to enable statistics 
--- For more info see https://prosody.im/doc/statistics 
--- statistics = "internal" 
- 
- 
--- Certificates 
--- Every virtual host and component needs a certificate so that clients and 
--- servers can securely verify its identity. Prosody will automatically load 
--- certificates/keys from the directory specified here. 
--- For more information, including how to use 'prosodyctl' to auto-import certificates 
--- (from e.g. Let's Encrypt) see https://prosody.im/doc/certificates 
- 
--- Location of directory to find certificates in (relative to main config file): 
-certificates = "certs" 
- 
------------ Virtual hosts ----------- 
--- You need to add a VirtualHost entry for each domain you wish Prosody to serve. 
--- Settings under each VirtualHost entry apply *only* to that host. 
--- It's customary to maintain VirtualHost entries in separate config files 
--- under /etc/prosody/conf.d/ directory. Examples of such config files can 
--- be found in /etc/prosody/conf.avail/ directory. 
- 
------- Additional config files ------ 
--- For organizational purposes you may prefer to add VirtualHost and 
--- Component definitions in their own config files. This line includes 
--- all config files in /etc/prosody/conf.d/ 
- 
-VirtualHost "localhost" 
--- Prosody requires at least one enabled VirtualHost to function. You can 
--- safely remove or disable 'localhost' once you have added another. 
- 
- 
---VirtualHost "example.com" 
- 
------- Components ------ 
--- You can specify components to add hosts that provide special services, 
--- like multi-user conferences, and transports. 
--- For more information on components, see https://prosody.im/doc/components 
- 
----Set up a MUC (multi-user chat) room server on conference.example.com: 
---Component "conference.example.com" "muc" 
---- Store MUC messages in an archive and allow users to access it 
---modules_enabled = { "muc_mam" } 
- 
----Set up a file sharing component 
---Component "share.example.com" "http_file_share" 
- 
----Set up an external component (default component port is 5347) 
--- 
--- External components allow adding various services, such as gateways/ 
--- bridges to non-XMPP networks and services. For more info 
--- see: https://prosody.im/doc/components#adding_an_external_component 
--- 
---Component "gateway.example.com" 
--- component_secret = "password" 
- 
-Include "conf.d/*.cfg.lua" 
- 
----------- End of the Prosody Configuration file ---------- 
--- You usually **DO NOT** want to add settings here at the end, as they would 
--- only apply to the last defined VirtualHost or Component. 
--- 
--- Settings for the global section should go higher up, before the first 
--- VirtualHost or Component line, while settings intended for specific hosts 
--- should go under the corresponding VirtualHost or Component line. 
--- 
--- For more information see https://prosody.im/doc/configure 
- 
-</code> 
- 
- 
-La configurazione ha una sezione "globale" più dei "virtualhost" e "componenti" che vanno configurati separatamente. 
- 
-Ogni riga che inizia con due trattini "--" è un commento e non verrà preso in cosiderazione dal software. 
- 
-L'ultima riga serve per caricare altre configurazioni, come nel caso si voglia installare anche una istanza Jitsi Meet (che non è argomento di questa guida). 
- 
-La configurazione di base è un'ottimo punto di partenza, ma bisogna fare delle modifiche. 
- 
-Cominciamo col sistemare il nostro 'virtualhost', ovvero il dominio sul quale abbiamo intenzione di far girare il server XMPP. 
- 
-Sostituite il valore "localhost" nella riga "virtualhost" col vostro dominio, come ad esempio: 
- 
-    virtualhost "domain.tld" 
-     
-Sotto questa riga andiamo a caricare alcuni moduli utili (a mio giudizio): alcuni di questi dovranno essere installati dal repository della comunità di prosody, poiché non inclusi nei pacchetti debian, o comunque più aggiornati - più avanti vedremo come fare. 
- 
-<code lua> 
-modules_enabled = { 
-                "invites"; -- Create and manage invites 
-                "invites_adhoc"; -- Allow admins/users to create invitations via their client 
-                "invites_page"; -- Landing page to register 
-                "invites_register"; -- Allows invited users to create accounts 
-                "invites_register_web"; 
-                "register_apps"; 
-                "http_libjs"; -- The default HTML templates for the web-based modules depend on some CSS and Javascript libraries. 
-} 
-</code>  
- 
-Poco più sotto aggiungiamo la configurazione del modulo "invites": 
- 
-<code lua>  
-    invites_page = "https://domain.tld:5281/invite?{invite.token}" 
-    http_paths = { 
-        invites_page = "/invite"; 
-        invites_register_web = "/register"; 
-    } 
-</code>  
- 
-Tutti questi moduli che sto consigliano di installare permettono di rendere l'instanza XMPP aperta alle registrazioni solamente su invito; lasciare la registrazione aperta al pubblico è infatti da considerarsi una mossa azzardata, per via dello spam - nessuno vi vieta di farlo, ma se non sarete accorti e verrete presi di mira da qualche botnet, ricordatevi che tutte le altre istanze XMPP a cui siete federati (connessi) vorranno bloccare la vostra per ovvi motivi. 
- 
-Tornando alla configurazione, aggiungete ora nella sezione globale (prima del virtualhost) le seguenti righe: 
- 
-<code lua> 
-allow_registration = true 
-registration_invite_only = true 
-invite_expiry = 86400 * 7 
-</code>  
- 
-Questo rende l'istanza effettivamente aperta ai soli utenti invitati (l'invito scadrà dopo 7 giorni se non utilizzato ed è valido per una sola registrazione, un solo account). 
- 
-Ansiamo ora ad aggiungere il primo componente fondamentale: "muc" 
-Ovvero Multi User Chat, quello che vi permette di creare conversazioni di gruppo (stanze, gruppi, conversazioni, etc.. come preferite chiamarle) 
- 
-Sotto Alla configurazione del virtualhost aggiungete: 
- 
-    Component "chat.domain.tld" "muc" 
- 
-"chat" è un sottodominio di esempio del "domain.tld" e va configurato come tale nel pannello DNS del vostro registrar (il provider che vi fornisce il nome a dominio) 
- 
-Ovviamente sostituite pure "chat" con qualsiasi altro nome che più vi aggrada. 
- 
-Come abbiamo fatto per il virtualhost, anche il componente ha i suoi moduli, tra i quali consiglio: 
- 
-<code lua> 
-modules_enabled = { 
-"muc_mam", 
-"vcard_muc", 
-"muc_limits", 
-"pastebin", 
-"muc_moderation", 
-"muc_rtbl", 
-} 
-</code> 
- 
-Spiegare cosa facciano questi moduli sarebbe troppo dispendioso, per cui vi rimando subito alle pagine della community, dove potete trovare tutti i moduli con la spiegazione sul loro funzionamento e configurazione: 
- 
-https://modules.prosody.im/ 
- 
-Sotto ai moduli caricati inseriamo alcune configurazioni: 
- 
-<code lua> 
-name = "My Cool Chatrooms" 
-restrict_room_creation = "local" 
-muc_rtbl_jid = "xmppbl.org" 
-muc_rtbl_node = "muc_bans_sha256" 
-muc_max_nick_length = 20 
-pastebin_trigger = "!paste" 
-pastebin_threshold = 1000 
-pastebin_line_threshold = 20 
-pastebin_expire_after = 72 
-</code>  
- 
- 
-Bene, la configurazione è per adesso terminata, l'unica cosa che vi rimane di fare è aggiungere l'utente admin nella prima riga che recita: 
- 
-    admins = { } 
-     
-Sostitutela con: 
- 
-   admins = { "admin@domain.tld" } 
-    
-L'utente andrà creato ovviamente. 
- 
-Prima di avviare prosody dovrete installare i moduli che non sono già presenti nel sistema (ovvero nel pacco "prosody-modules" che abbiamo installato in precendenza) 
- 
-Per verificare la lista dei moduli attualmente disponibili, recatevi alla directory indicata nella seconda riga di configurazione e sfogliatene il contenuto: 
- 
-    plugin_paths = { "/usr/local/lib/prosody/modules/" } 
-     
-Qualora un modulo di quelli consigliati non sia già presente, installatelo col comando che trovate in ogni pagina dei moduli sulla community, ad esempio in https://modules.prosody.im/mod_muc_rtbl.html dove in fondo viene riportato: 
- 
-    sudo prosodyctl install --server=https://modules.prosody.im/rocks/ mod_muc_rtbl 
- 
-Usate "sudo" o l'account root a vostra discrezione. 
- 
- 
-===== DNS ===== 
- 
- 
-E' giunto il momento di configurare i nomi di dominio che abbiamo utilzzato finora: 'domain.tld' e 'chat.domain.tld' 
-Utilizzate "certbot" per ottenere i certificati per entrambi 
- 
- 
-    apt install certbot 
- 
-Adesso generiamo i certificati, uno alla volta. Se avete un webserver attivo, dovrete fermarlo temporaneamente prima di procedere: 
- 
-    systemctl stop nginx 
-     
-    certbot certonly --standalone -d domain.tld --dry-run 
-     
-L'opzione "--dry-run" serve solo a simulare la generazione del certificato.. Se non restituisce errori, potete togliere l'opzione e ripetere il comando. 
- 
-Proseguite poi col sottodominio 
- 
-    certbot certonly --standalone -d chat.domain.tld --dry-run 
-     
-Riavviare ngix (o Apache/Caddy) 
- 
-Una volta generati i certificati, possiamo importarli in Prosody: 
-     
-    prosodyctl --root cert import /etc/letsencrypt/live 
-     
-Quando avete completato, riavviate prosody: 
- 
-    systemctl restart prosody 
-     
-E controllate la configurazione: 
- 
-    prosodyctl check config 
-    prosodyctl check dns 
-    prosodyctl check certs 
-     
-Se non ci sono errori potete creare il vostro account admin e loggarvi sul server: 
- 
-    prosodyctl adduser admin@domain.tld 
- 
-Per generare un invito usate come sempre il comando "prosodyctl", in questo modo: 
- 
-    prosodyctl mod_invites generate domain.tld 
-     
-Verrà restituito un indirizzo web da comunicare alla persona che si vuole invitare 
- 
-Guida scritta da Simone https://woodpeckersnest.space/      
  
xmppit/guide/installazione-server-prosody.1709492840.txt.gz · Ultima modifica: da roughnecks