Prosody es un servidor XMPP gratuito de código abierto escrito en Lua. Es rápido y ligero. XMPP es un gran protocolo para la mensajería instantánea. Este tutorial le mostrará cómo instalar y configurar el servidor Prosody XMPP en Ubuntu 20.04. Una vez que hayas terminado este tutorial, tendrás tu propio servidor de chat.
Paso 1:Instale Prosody en Ubuntu 20.04
Prosody está incluido en el repositorio predeterminado de Ubuntu. El equipo de Prosody también mantiene un repositorio de paquetes. Si desea obtener la última versión, debe agregar el repositorio de Prosody con el siguiente comando.
echo 'deb https://packages.prosody.im/debian focal main' | sudo tee /etc/apt/sources.list.d/prosody.list
Luego ejecute el siguiente comando para descargar e importar la clave pública de Prosody, que permite al administrador de paquetes APT verificar la integridad de los paquetes descargados de este repositorio.
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add -
A continuación, actualice el índice de paquetes locales e instale la última versión de Prosody.
sudo apt update sudo apt install prosody
Una vez instalado, Prosody se iniciará automáticamente. Puede comprobar su estado con:
systemctl status prosody
Salida:
● 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.
Si no se está ejecutando, puede iniciarlo con
sudo systemctl start prosody
Para habilitar el inicio automático en el momento del arranque del sistema, ejecute
sudo systemctl enable prosody
Paso 2:Apertura de puertos en el cortafuegos
Por defecto escucha en el puerto TCP 5269 y 5222 de la dirección IP pública, como se puede ver con el siguiente comando. (Si su Ubuntu no tiene el comando netstat, puede instalarlo con sudo apt install net-tools
.)
sudo netstat -lnptu | grep lua
- El puerto 5222 se utiliza para la conexión de cliente a servidor.
- El puerto 5269 se utiliza para la conexión de servidor a servidor.
Si ha habilitado el firewall UFW en Ubuntu, debe abrir los puertos anteriores con el siguiente comando.
sudo ufw allow 5222,5269/tcp
Paso 3:configurar el servidor XMPP de Prosody
Edite el archivo de configuración principal con un editor de texto de línea de comandos como Nano.
sudo nano /etc/prosody/prosody.cfg.lua
En module_enabled {...}
sección, puede descomentar una línea para habilitar un módulo específico, o comentar una línea para deshabilitar un módulo específico. Cada módulo tiene una descripción que le dice lo que hace. Probablemente desee habilitar el módulo BOSH, que significa B flujos idireccionales O versión S H síncrono TTP. Permite la comunicación XMPP sobre HTTP.
A continuación, desplácese hacia abajo en el archivo de configuración. Si desea permitir el registro de cuentas desde el cliente XMPP, configure allow_registration
a la verdad Tenga en cuenta que debe saber cómo prevenir el abuso antes de hacer esto. Si es nuevo en XMPP, probablemente no desee permitir que los clientes de XMPP registren cuentas por sí mismos.
allow_registration = true;
Prosody solo permite la comunicación encriptada, indicada por las siguientes dos líneas.
c2s_require_encryption = true s2s_require_encryption = true
Sin embargo, necesitamos crear un host virtual e instalar un certificado TLS para que las conexiones se puedan cifrar. De forma predeterminada, solo hay un host virtual en Prosody:localhost, como se indica en la siguiente línea.
VirtualHost "localhost"
Ahora creamos otro host virtual como chat.example.com
. Agregue la siguiente línea en este archivo.
VirtualHost "chat.example.com"
Guarde y cierre el archivo. Luego, debemos obtener e instalar un certificado TLS de confianza de Let's Encrypt.
Paso 4:obtenga un certificado TLS de confianza de Let's Encrypt
Ejecute el siguiente comando para instalar el cliente Let's Encrypt (certbot) en el servidor Ubuntu.
sudo apt install certbot
Si aún no tiene un servidor web en ejecución, le recomiendo que instale uno (Apache o Nginx), porque es más fácil obtener e instalar un certificado TLS con un servidor web que usar otros métodos.
Si usa el servidor web Apache, debe instalar el complemento Apache. (El siguiente comando instalará el servidor web Apache si aún no está instalado en su sistema).
sudo apt install python3-certbot-apache
Si usa el servidor web Nginx, instale el complemento Nginx. (El siguiente comando instalará el servidor web Nginx si aún no está instalado en su sistema).
sudo apt install python3-certbot-nginx
Obtención del certificado TLS con el servidor web Apache
Debe tener un servidor virtual Apache para chat.example.com
antes de obtener el certificado TLS de Let's Encrypt. Cree el archivo de host virtual:
sudo nano /etc/apache2/sites-available/prosody.conf
Luego pegue el siguiente texto en el archivo. Reemplace chat.example.com
con su verdadero nombre de dominio. No olvide establecer un registro DNS A para ello.
<VirtualHost *:80> ServerName chat.example.com DocumentRoot /var/www/prosody </VirtualHost>
Guarde y cierre el archivo. Luego cree el directorio webroot.
sudo mkdir /var/www/prosody
Establecer www-data
(usuario de Apache) como propietario de la webroot.
sudo chown www-data:www-data /var/www/prosody -R
Habilite este servidor virtual.
sudo a2ensite prosody.conf
Vuelva a cargar Apache para que los cambios surtan efecto.
sudo systemctl reload apache2
Una vez que se haya creado y habilitado el host virtual, ejecute el siguiente comando para obtener e instalar el certificado TLS de Let's Encrypt.
sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Sustituya el texto rojo con sus datos reales. Debería ver lo siguiente, lo que significa que el certificado se obtuvo con éxito. También puede ver el directorio en el que se almacena su certificado.
Obtención del certificado TLS con el servidor web Nginx
Debe tener un host virtual Nginx para chat.example.com
antes de obtener el certificado TLS de Let's Encrypt. Cree el archivo de host virtual:
sudo nano /etc/nginx/conf.d/prosody.conf
A continuación, pegue el siguiente texto en el archivo. Reemplace chat.example.com
con su verdadero nombre de dominio. No olvide establecer un registro DNS A para ello.
server { listen 80; listen [::]:80; server_name chat.example.com; root /var/www/prosody/; location ~ /.well-known/acme-challenge { allow all; } }
Guarde y cierre el archivo. Luego cree el directorio raíz web.
sudo mkdir /var/www/prosody/
Establecer www-data
(usuario de Nginx) como propietario de la raíz web.
sudo chown www-data:www-data /var/www/prosody -R
Vuelva a cargar Nginx para que los cambios surtan efecto.
sudo systemctl reload nginx
Una vez que se crea y habilita el host virtual, ejecute el siguiente comando para obtener e instalar el certificado Let's Encrypt con el complemento Nginx.
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d chat.example.com
Debería ver lo siguiente, lo que significa que el certificado se obtuvo con éxito. También puede ver el directorio en el que se almacena su certificado.
Paso 5:Instale el certificado TLS en Prosody
Edite el archivo de configuración principal.
sudo nano /etc/prosody/prosody.cfg.lua
Vaya a su servidor virtual Prosody y agregue el certificado TLS y el archivo de clave.
ssl = { key = "/etc/letsencrypt/live/chat.example.com/privkey.pem"; certificate = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"; }
Así:
Guarde y cierre el archivo. Dado que el servidor Prosody XMPP se ejecuta como prosody
usuario, debemos permitir que el usuario prosody lea el certificado TLS y el archivo de clave con los siguientes comandos.
sudo apt install acl sudo setfacl -R -m u:prosody:rx /etc/letsencrypt/
Paso 6:crear cuentas de usuario
La cuenta de usuario para el servidor Prosody XMPP se puede crear con el siguiente comando. Se le pedirá que ingrese una contraseña.
sudo prosodyctl adduser [email protected]
Para cambiar la contraseña, ejecute
sudo prosodyctl passwd [email protected]
Paso 7:reiniciar Prosody
Compruebe la sintaxis del archivo de configuración ejecutando:
sudo prosodyctl check config
Si la sintaxis es correcta, reinicie Prosody para que los cambios surtan efecto.
sudo systemctl restart prosody
Paso 8:configurar el cliente XMPP
Este tutorial utiliza la mensajería instantánea Pidgin como cliente XMPP. La empatía es otro cliente que puedes usar. Se pueden instalar en un escritorio Ubuntu ejecutando:
sudo apt install pidgin sudo apt install empathy
Tras el primer lanzamiento, deberá agregar una cuenta en Pidgin. Haz clic en Agregar botón.
Luego seleccione XMPP de la lista de protocolos e ingrese su nombre de usuario, dominio y contraseña.
Presiona Agregar y se iniciará sesión.
Configurar BOSH
Como explicamos anteriormente, BOSH le permite usar XMPP sobre HTTP, es decir, en un navegador web. Por ejemplo, el software de videoconferencia Jitsi Meet usa BOSH para integrar Prosody en las páginas web, de modo que los asistentes puedan enviar mensajes de texto mientras se unen a una videoconferencia en línea.
Si habilitó el módulo BOSH, edite el archivo de configuración de Prosody (/etc/prosody/prosody.cfg.lua
) y agregue las siguientes dos líneas al final del archivo de configuración.
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"; }
donde:
- La primera línea impone una conexión HTTPS segura.
- La segunda línea agrega encabezados COR a las respuestas BOSH para permitir que las solicitudes provengan de cualquier dominio.
- El parámetro https_ssl especifica el certificado TLS y el archivo de clave para el servicio BOSH.
Guarde y cierre el archivo. Luego reinicie Prosody.
sudo systemctl restart prosody
Si ha habilitado el firewall UFW en el servidor Ubuntu, debe abrir los puertos 5280 y 5281 con el siguiente comando.
sudo ufw allow 5280,5281/tcp
El extremo de BOSH estará disponible en la siguiente dirección una vez que termine este tutorial. puerto 5280 es para texto sin formato HTTP, puerto 5281 para HTTPS.
http://chat.example.com:5280/http-bind
o
https://chat.example.com:5281/http-bind.
Un punto final BOSH es una URL que utiliza un cliente para conectarse al servidor XMPP a través de HTTP.
Sala de chat multiusuario
Para habilitar un MUC (Multi-User Chat), agregue la siguiente línea en el archivo de configuración de Prosody. Reemplace conference.example.com
con su subdominio preferido.
Component "conference.example.com" "muc" restrict_room_creation = "admin"
La segunda línea permitirá que solo el administrador cree salas. Para definir el administrador del servidor XMPP, primero debe crear una cuenta con sudo prosodyctl adduser
comando como se muestra arriba. Luego, en el archivo de configuración, agregue la cuenta en admin {...}
sección como a continuación.
admins = { "[email protected]", "[email protected]" }
Compruebe la sintaxis del archivo de configuración ejecutando:
sudo prosodyctl check config
Si la sintaxis es correcta, reinicie Prosody para que los cambios surtan efecto.
sudo systemctl restart prosody
Resolución de problemas
El archivo de registro principal de Prosody es /var/log/prosody/prosody.log
. También hay un registro de errores /var/log/prosody/prosody.err
. Si Prosody no funciona como esperaba, el registro de errores es un buen lugar para verificar.
Certificado TLS de renovación automática
Puede crear un trabajo Cron para renovar automáticamente el certificado TLS. Abra el archivo crontab del usuario root.
sudo crontab -e
Si usa el servidor web Apache, agregue la siguiente línea al final del archivo.
@daily certbot renew --quiet && systemctl reload postfix dovecot apache2
Si está utilizando el servidor web Nginx, agregue la siguiente línea.
@daily certbot renew --quiet && systemctl reload postfix dovecot nginx
Es necesario volver a cargar Postfix, Dovecot y el servidor web para que estos programas recojan el nuevo certificado y la clave privada.