11 KiB
Title: Configurar un servidor de mensajería instantánea XMPP seguro, para mensajería móvil y fácil de usar Date: 2018-11-17 Tags: xmpp, chat, guide, instant messaging, prosody Slug: configuring-a-modern-xmpp-server Description: Hands-on step-by-step guide that shows how to configure Prosody 0.11 aimed at security, mobile messaging, rich features and ease of use. Lang: es Status: Published
[TOC]
Introducción
Esta es una guía para configurar un servidor de mensajería instantánea basado en XMPP moderno, enfocado a la seguridad, mensajería móvil y fácil de usar. La guía asume que usas 'Debian Stable' en el servidor, que quieres alojar y administrar la mensajería instantánea para tu grupo de amigos y que tienes conocimiento básico de usar la línea de comandos en Linux.
Firewall y DNS
Abre los siguientes puertos en tu firewall para poder comunicarte con el servidor:
:::console
5000 (hacer de proxy para intercambiar archivos grandes entre clientes)
5222 (para comunicación entre cliente y servidor, C2S)
5269 (para comunicación entre servidores, S2S)
5281 (el puerto https por defecto de prosody)
También asegúrate de que tienes un dominio con DNS A-records para los siguientes subdominios
:::console
myserver.org (el dominio principal)
groups.myserver.org (para sala de grupos)
upload.myserver.org (para componente HTTP-Upload)
proxy.myserver.org (para el proxy de transferencia de archivos)
Esta guía usa los dominios escritos arriba, pero puedes ser más creativo :)
Habilitar HTTPS
Primero, conseguimos un certificado HTTPS firmado por Let's Encrypt:
Se necesita para XMPP moderno, certificados auto-firmados no funcionaran.
Instala Certbot y consigue los certificados para tu dominio (reemplaza myserver.org
por el tuyo):
:::console
sudo apt-get update && sudo apt-get install certbot
certbot certonly -d myserver.org
certbot certonly -d groups.myserver.org
certbot certonly -d upload.myserver.org
certbot certonly -d proxy.myserver.org
Si funciona, deberías poder ver algo así:
:::console
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/myserver.org/fullchain.pem. Your
cert will expire on 2019-02-15. To obtain a new or tweaked version
of this certificate in the future, simply run certbot again. To
non-interactively renew *all* of your certificates, run "certbot
renew"
Instalar y configurar Prosody, el servidor XMPP
Instala la version Prosody 0.11 y sus dependencias desde el repositorio oficial de Prosody:
:::console
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 -
sudo apt-get update && sudo apt-get install prosody lua-sec
Instala los plugins más recientes de Prosody:
:::console
apt-get install mercurial
cd /usr/src
hg clone https://hg.prosody.im/prosody-modules/ prosody-modules
Haz una copia de seguridad de la configuración de Prosody por defecto e instala la de homebrewserver.club
:::console
cd /etc/prosody
cp prosody.cfg.lua prosody.cfg.lua.original
wget https://homebrewserver.club/downloads/prosody.0.11.cfg.lua -O prosody.cfg.lua
La configuración de homebrewserver.club
:::console
-- una configuración de prosody enfocado a la seguridad, mensajería móvil y fácil de usar.
-- proporcionada por homebrewserver.club
-- el archivo de la configuración original(prosody.cfg.lua.original) tendrá mas información
plugin_paths = { "/usr/src/prosody-modules" } -- el directorio de los plugin no estándar para mantenerlos al dia con mercurial
modules_enabled = {
"roster"; -- Permite a los usuarios tener una lista de contactos. Recomendado ;)
"saslauth"; -- Autenticación entre clientes y servidores. Recomendado si quieres iniciar sesión.
"tls"; -- Permite conexiones c2s/s2s seguras con TLS
"dialback"; -- Permite s2s dialback
"disco"; -- Descubrir servicios entre servidores y clientes
"private"; -- Almacenamiento XML privado (para guardar las salas a las que te has unido)
"vcard4"; -- Perfiles de usuarios (guardado en PEP)
"vcard_legacy"; -- Convierte entre legacy vCard y PEP Avatar, vcard
"version"; -- Contesta a las peticiones de la versión del servidor
"uptime"; -- Informa sobre cuánto tiempo ha estado funcionando el servidor
"time"; -- Permite conocer la hora en el servidor
"ping"; -- Contesta XMPP pings con pongs
"register"; --Permite registrar una cuenta en tu servidor desde un cliente
"pep"; -- Entre otras cosas, permite a usuarios publicar sus claves OMEMO publicas
"carbons"; -- XEP-0280: Message Carbons, sincroniza mensajes entre dispositivos
"smacks"; -- XEP-0198: Stream Management, mantiene conversaciones incluso cuando la red se cae
"mam"; -- XEP-0313: Message Archive Management, permite descargar el historial de conversasiones del servidor
"csi_simple"; -- XEP-0352: Client State Indication
"admin_adhoc"; -- Permite la administración del servidor desde un cliente XMPP (que soporte comandos ad-hoc)
"blocklist"; -- XEP-0191 bloquear usuarios
"bookmarks"; -- Sincroniza entre clientes diferentes las salas a las que te has unido
--"cloud_notify"; -- Soporta XEP-0357 Push Notifications para tener compatibilidad con ChatSecure/iOS.
-- iOS normalmente aborta la conexión cuando una aplicación funciona en segundo plano y requiere el uso de los servidores de Push de Apple para levantar la conexión y recibir un mensaje. Habilitar este módulo permite a tu servidor comunicarse con los servidores Push de Apple para ayudar a tus usuarios de iOS.
-- Sin embargo, lo dejamos comentado porque es un otro ejemplo de una plataforma cloud integrada verticalmente que choca con las ideas de federación y las redes libres. Descomentarlo tiene riesgo de vigilancia de los meta dados de tus usuarios por Apple.
"server_contact_info"; -- Añade información de contacto en caso de incidencias con el servidor
};
allow_registration = false; -- Permite registrar una cuenta en tu servidor desde un cliente, para más información visita http://prosody.im/doc/creating_accounts
certificates = "/etc/prosody/certs" -- Ruta donde Prosody busca los certificados: https://prosody.im/doc/letsencrypt
https_certificate = "certs/myserver.org.crt"
c2s_require_encryption = true -- Fuerza a los clientes a usar conexiones cifradas
s2s_secure_auth = true -- Fuerza la autenticación de certificados para conexiones entre servidores
pidfile = "/var/run/prosody/prosody.pid"
authentication = "internal_hashed"
-- Historial de conversaciones
-- Si mod_mam esta activo, Prosody guardara una copia de cada mensaje.
-- Se usa para sincronizar conversaciones entre múltiples clientes, incluso
-- si están desconectados. Esta configuración controla cuanto tiempo Prosody
-- guarda los mensajes en el historial antes de eliminarlos.
archive_expires_after = "1w" -- Eliminar el historial de mensajes en una semana
log = { -- descomenta para mayor privacidad
info = "/var/log/prosody/prosody.log"; -- Cambia 'info' por 'debug' para un registro más detallado
error = "/var/log/prosody/prosody.err";
"*syslog";
}
disco_items = { -- allows clients to find the capabilities of your server
{"upload.myserver.org", "file uploads"};
{"groups.myserver.org", "group chats"};
}
VirtualHost "myserver.org"
-- Habilita http_upload para permitir compartir imágenes entre diferentes dispositivos y diferentes clientes
Component "upload.myserver.org" "http_upload"
-- Permite crear salas
Component "groups.myserver.org" "muc"
modules_enabled = { "muc_mam", "vcard_muc" }
-- Inicia un proxy para intercambiar archivos grandes entre clientes
Component "proxy.myserver.org" "proxy65"
Reemplaza el dominio de ejemplo con tu dominio
en el archivo de configuración:
:::console
sed -i 's/myserver.org/tu dominio/g' prosody.cfg.lua
De forma alternativa puedes reemplazarlos a mano. Estan en las lineas 70, 81, 84, 88, 91 de prosody.cfg.lua
Importa los certificados de LetsEncrypt con Prosody:
:::console
prosodyctl --root cert import /etc/letsencrypt/live
Es posible que recibas un resultado similar:
No certificate for host groups.myserver.org found :(
No certificate for host upload.myserver.org found :(
No certificate for host proxy.myserver.org found :(
Imported certificate and key for hosts myserver.org
Pero no te preocupes, el ultimo certificado contiene información de todos los subdominios.
Para acabar
Configura cron
para renovar los certificados LetsEncrypt automáticamente
:::console
sudo crontab -e
Añade al final:
:::console
0 4 0 * 0 /usr/bin/certbot renew --renew-hook "prosodyctl --root cert import /etc/letsencrypt/live" --quiet
Esta configuración comprueba y renueva los certificados cada domingo a las 04:00.
Cuando hayas hecho todo esto es hora de arrancar el servidor:
:::console
/etc/init.d/prosody restart
Se pueden añadir usuarios desde la línea de comandos. Te pedirá una contraseña:
:::console
prosodyctl adduser me@myserver.org
De otra forma puedes cambiar allow_registration = false;
a allow_registration = true;
en la configuración (linea 35) para permitir a los usuarios registrarse en tu servidor desde sus propios clientes.
Ahora puedes intentar conectarte a tu servidor usando un cliente como Gajim o Conversations. Inicia sesión con tu nombre y contraseña.
Si tienes preguntas sobre Prosody, la documentación del proyecto es bastante buena (pero en Ingles). Si eso no es suficiente, pregunta los mismos desarrolladores en la sala XMPP de Prosody
Esta guía es una traducción de la guía del homebrewserver.club.)