GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo configurar el servidor Prosody XMPP en Ubuntu 20.04

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.


Ubuntu
  1. Cómo configurar e instalar Squid Proxy Server en Ubuntu 18.04

  2. Cómo instalar Redis en Ubuntu 20.04/18.04

  3. Cómo instalar MySQL en Ubuntu 18.04

  4. Cómo configurar un servidor OpenVPN en Ubuntu 18.04

  5. Cómo instalar Zimbra 8.6 en el servidor Ubuntu 14.04

Cómo instalar el servidor Zabbix en Ubuntu 20.04

Cómo instalar Ubuntu Server 18.04 LTS

Cómo instalar el servidor Ubuntu 20.04 LTS

Cómo instalar Cockpit en Ubuntu 20.04

Cómo instalar el servidor VNC en Ubuntu 20.04

Cómo configurar el servidor Prosody XMPP en Ubuntu 18.04