XMPP es un protocolo de mensajería instantánea libre que permite comunicaciones entre una o más personas (salas).
Lo que vamos a explicar a continuación es la instalación del servicio Prosody bajo Apache Proxy. De esta forma, tendremos acceso web y XMPP.
Por un lado tendremos a Apache escuchando por el puerto 80 y 443 e internamente un proxy inverso que apuntará al puerto 5280 para que funcione XMPP bajo el mismo dominio.
Este tutorial lo vamos hacer en Debian 9 y en todo el tutorial vamos a definir como domain.tls para referirnos a nuestro dominio.
Para tener un tutorial más completo, vamos a partir de la base de que no tenemos ningún servicio funcionando y que se tiene que instalar y configurar absolutamente todo.
Abrir puertos Firewall
Si estamos usando algún VPS de estos modernos que tanto se llevan ahora, tendremos que habilitar el acceso por unos puertos para que Prosody funcione correctamente.
Los puertos que hay que habilitar son los siguientes:
- 5222
- 5269
- 5280
- 5281
Una vez abiertos estos puertos en el servidor podemos continuar con el tutorial.
Instalación y configuración Apache
Lo que vamos hacer es instalar y configurar Apache, para ello configuraremos un VirtualHost para nuestra web/blog/tienda/loquesea y luego configuraremos el Proxy Inverso en Apache. Finalmente acabaremos configurando un certificado SSL con Let’s Encrypt.
Instalación y configuración de Apache
Bueno, esto es algo muy fácil, así que vamos a instalar Apache:
apt install apache2
Una vez instalado, procedemos a crear el fichero de configuración para nuestro dominio:
nano /etc/apache2/sites-available/domain.tls.conf
El contenido de este fichero debería de ser algo similar a esto:
<VirtualHost *:80>
ServerName domain.tls
ServerAlias domain.tls
DocumentRoot /var/www/html/vhosts/domain.tls/www
ErrorLog /var/www/html/vhosts/domain.tls/logs/error.log
LogLevel warn
CustomLog /var/www/html/vhosts/domain.tls/logs/access.log combined
ProxyPass /xmpp/ http://domain.tls:5280/xmpp/
ProxyPassReverse /xmpp/ http://domain.tls:5280/xmpp/
</VirtualHost>
Si vuestra web es un CMS o alguna web en PHP seguramente tengáis que configurar algún parámetro Directory, pero eso ya es elección vuestra.
Creamos los directorios necesarios y les aplicamos los permisos correctos:
mkdir -p /var/www/html/vhosts/domain.tls/{www,logs}
chown www-data.www-data -R /var/www/html/vhosts/domain.tls
Ahora tenemos que habilitar también el módulo para usar Apache con Proxy:
a2enmod proxy
Finalmente, habilitamos la web y reiniciamos Apache:
cd /etc/apache2/sites-available
a2ensite domain.tls.conf
systemctl restart apache2
Configuración SSL con Let’s Encrypt
Instalamos los siguientes paquetes para usar Certbot:
apt-get install certbot python-certbot-apache -t stretch-backports
Y creamos el certificado con:
certbot
En este momento tendremos que configurar Cerbot y seleccionar nuestro dominio y se generará el certificado.
Instalación Prosody
Lo siguiente sería instalar Prosody y configurarlo correctamente para que funcione. Primero añadimos el repositorio para tener una versión actualizada:
echo deb http://packages.prosody.im/debian $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list
wget https://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add
Y ahora instalamos el paquete correspondiente:
apt update && apt upgrade
apt install prosody
Instalación de Plugins
Es interesante actualizar algunos plugins que vienen instalados por defecto así como instalar algunos nuevos, para ello haremos lo siguiente:
cd /usr/lib/prosody/
hg clone https://hg.prosody.im/prosody-modules/ prosody-modules
Si no os funciona el comando hg
, tendréis que instalar el paquete mercurial
:
apt install mercurial
Y para actualizar:
cd /usr/lib/prosody/prosody-modules/
hg pull --update
Configuración Prosody
Una vez lo tenemos todo configurado, lo que vamos hacer es crear un fichero nuevo de configuración. El que hay por defecto está lleno de comentarios con documentación muy útil y muy interesante, pero para que se pueda leer mejor voy a dejar mi configuración sin comentarios:
cp /etc/prosody/prosody.cfg.lua /etc/prosody/prosody.cfg.lua.ORI
Y aquí el fichero de configuración:
admins = {"admin@domain.tls"}
plugin_paths = {"/usr/lib/prosody/prosody-modules" }
consider_bosh_secure = true
cross_domain_bosh = true
modules_enabled = {
-- Generally required
"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
"dialback"; -- s2s dialback support
"disco"; -- Service discovery
-- Not essential, but recommended
"carbons"; -- Keep multiple clients in sync
"pep"; -- Enables users to publish the1ir mood, activity, playing music and more
"omemo_all_access"; -- xep-0060 for enabling omemo access to non subscribers
"private"; -- Private XML storage (for room bookmarks, etc.)
"blocklist"; -- Allow users to block communications with other users
"vcard"; -- Allow users to set vCards
-- Nice to have
"version"; -- Replies to server version requests
"uptime"; -- Report how long server has been running
"time"; -- Let others know the time here on this server
"ping"; -- Replies to XMPP pings with pongs
"register"; -- Allow users to register on this server using a client and change passwords
"mam"; -- Store messages in an archive and allow users to access it
--"mam_muc"; -- store group chat messages
-- Admin interfaces
"admin_adhoc"; -- Allows administration via an XMPP client that supports ad-hoc commands
--"admin_telnet"; -- Opens telnet console interface on localhost port 5582
-- HTTP modules
"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
"websocket"; -- XMPP over WebSockets
"http_files"; -- Serve static files from a directory over HTTP
"http_upload"; -- module to enable file upload in group chat
-- Other specific functionality
"groups"; -- Shared roster support
"proxy65"; -- Enables a file transfer proxy service which clients behind NAT can use
"smacks";
"csi";
"cloud_notify";
"conversejs";
"s2s";
"c2s";
}
modules_disabled = {
-- "offline"; -- Store offline messages
-- "c2s"; -- Handle client connections
-- "s2s"; -- Handle server-to-server connections
-- "posix"; -- POSIX functionality, sends server to background, enables syslog, etc.
}
allow_registration = false
c2s_require_encryption = false
s2s_require_encryption = true
s2s_secure_auth = true
s2s_secure_domains = { "domain.tls", "movim.eu" }
pidfile = "/var/run/prosody/prosody.pid"
authentication = "internal_hashed"
archive_expires_after = "4w" -- Remove archived messages after 1 week
log = {
info = "/var/log/prosody/prosody.log"; -- Change 'info' to 'debug' for verbose logging
error = "/var/log/prosody/prosody.err";
-- "*syslog"; -- Uncomment this for logging to syslog
-- "*console"; -- Log to the console, useful for debugging with daemonize=false
}
certificates = "certs"
VirtualHost "domain.tls"
certificate = "/etc/prosody/certs/domain.tls.crt";
Component "conference.domain.tls" "muc"
restrict_room_creation = "local"
Tenemos que tener especial atención a los siguientes parámetros (y modificar el valor por nuestro dominio):
admins = {"admin@domain.tls"} # Pondremos el usuario admin
...
s2s_secure_domains = { "domain.tls", "movim.eu" } # Añadimos nuestro dominio y otros dominios de confianza
...
VirtualHost "domain.tls" # Añadimos nuestro dominio
certificate = "/etc/prosody/certs/domain.tls.crt"; # Añadimos el certificado con nuestro dominio
...
Component "conference.domain.tls" "muc" # Hay que crear este registro en el DNS y cambiar el dominio
restrict_room_creation = "local"
Una vez hemos creado la configuración, procedemos a reiniciar el servicio y a habilitarlo en en arranque:
systemctl restart prosody
systemctl enable prosody
Importar certificado SSL
Podemos activar el certificado de la siguiente forma:
prosodyctl --root cert import domain.tls /etc/letsencrypt/live/
Gestión de usuarios en Prosody
Existe un comando que permite gestionar cuentas de correo por líneas de comandos.
Para crear usuarios deberemos de hacer lo siguiente (este comando se tiene que hacer con el usuario admin que hemos configurado).
prosodyctl adduser admin@domain.tls
Cambiar contraseña de un usuario:
prosodyctl passwd admin@domain.tls
Eliminar un usuario:
prosodyctl deluser admin@domain.tls
Consultar configuración de Prosody:
prosodyctl check
Fuente: https://mgw.dumatics.com/prosody-behind-apache-on-debian-stretch/
Comentarios