Esta guía no es un trabajo de la comunidad elbinario, sino que nos ha llegado por distintos medios (email,xmpp) indicándonos que ha sido un trabajo realizado en el evento XMPP Sprint en Dusseldorf, y después de pedir permiso a las personas que la han realizado para obtenerla y publicarla, hemos decidido replicarla, puesto que nuestra anterior guía de configuración xmpp estaba bastante desactualizada, y consideramos necesario difundir este trabajo de documentación y actualización, cuyo original podrás encontrar aquí
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:
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
myserver.org (el dominio principal) muc.myserver.org (para sala de grupos) dump.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 un servidor XMPP moderno, los certificados auto-firmados no funcionarán.
Instala Certbot:
sudo apt-get update && sudo apt-get install certbot
Si tienes un servidor web funcionando, deberás pararlo antes de ejecutar el comando certbot:
service apache2 stop # En el caso de tener apache service nginx stop # En en caso de tener nginx
Consigue los certificados para tu dominio (reemplaza myserver.org por el tuyo):
certbot certonly -d myserver.org -d muc.myserver.org -d dump.myserver.org -d proxy.myserver.org
Si funciona, deberías poder ver algo así:
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:
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:
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
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
-- 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 conversaciones 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 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"; } VirtualHost "myserver.org" -- Habilita http_upload para permitir compartir imágenes entre diferentes dispositivos y diferentes clientes Component "dump.myserver.org" "http_upload" -- Permite crear salas Component "muc.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:
sed -i 's/myserver.org/tu dominio/g' prosody.cfg.lua
De forma alternativa puedes reemplazarlos a mano. Están en las líneas 39, 75, 81, 85 de prosody.cfg.lua
Importa los certificados de LetsEncrypt con Prosody:
prosodyctl --root cert import /etc/letsencrypt/live
Es posible que recibas un resultado similar:
No certificate for host muc.myserver.org found :( No certificate for host dump.myserver.org found :( No certificate for host proxy.myserver.org found :( Imported certificate and key for hosts myserver.org
Pero no te preocupes, el último certificado contiene información de todos los subdominios.
Para acabar
Configura cron para renovar los certificados LetsEncrypt automáticamente:
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:
/etc/init.d/prosody restart
Se pueden añadir usuarios desde la línea de comandos. Te pedirá una contraseña:
prosodyctl adduser [email protected]
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 usuario y contraseña.
Si tienes preguntas sobre Prosody, la documentación del proyecto es bastante buena (pero en Inglés). Si eso no es suficiente, pregunta a los mismos desarrolladores en la sala XMPP de Prosody
Esta guía es una traducción de la guía del homebrewserver.club.)
coñe! qué casualidad!! :)
https://victorhckinthefreeworld.com/2018/12/26/guia-para-configurar-tu-servidor-xmpp-con-prosody/
Saludos!
Yo también escribí algo similar hace poco—> https://punkmft.punks.computer/prosody-xmpp.html
También asegúrate de que tienes un dominio con DNS A-records para los siguientes subdominios…
No se que hacer en este paso, tengo el servidor y el dominio en sitio distintos y no se como configurar el DNS del dominio (dondominio) para para que me lo dirija al servidor.
¿Alguien me echa una mano?
genial yo recién me entero de todo esto alguien que me pudiera ayudar a empezar, espero que todos tengas un gran día
Buenas ¿ no tienes una version de esta guía guía pero que sea exclusivamente para uso domestico es decir para que un equipo, por ejemplo el mio que se llama en la red «Inukaze», se conecten todos los demás, desde pidgin, creando sus usuarios desde el cliente de mensajería instantánea ?
Algo sin dominio, ni para intercambiar archivos, solo para hablar entre equipos ya que
IPTux no tiene version para Windows pero sinceramente en lo mejor que hay si unicamente vas a usar Liñux / Mac OS X en Intranet. [Puede resultar muy util en centros educativos tecnológicos]
LANMessenger no me detecta a los demás equipos de la intranet
Pidgin + Bonjour en Liñux me detecta al usuario de Windows, pero Pidgin + Bonjour para Windows (en Windows) no me detecta a los que se conectan desde Liñux
SimpleChat me dice «schat2: error while loading shared libraries: /usr/lib/libschat.so.2: file too short» cada vez que intento iniciarlo
ejabberd no inicia en mi distro
Entonces ha sido demasiado complicado intentar conseguir un programa que sea exclusivamente para chatear entre equipos de una red local que tienen Liñux y Windows principalmente.
Hace 15 años era bastante fácil instalar QuickPopup en Windows y LinPopup en Linux para esta finalidad, pero hoy en dia creen que todo el mundo necesita internet incluso para encender el pc localmente ¬¬ (Esto ultimo lo digo porque hace tiempo cuando microsoft anuncio el Xbox One, ibas a tener que estar conectado a internet para poder jugar tus partidas de un solo jugador que no requieren internet, pero si no estabas conectado no te iban a permitir iniciar el modo campaña de un solo jugador, lo cual si lo piensas no tiene el mas mínimo sentido) llevo 7 dias intentando hacer esto. es decir poder enviar mensajes de texto plano entre equipos de una red local
Entre linux es bastante facil con el terminal y talk…
https://en.wikipedia.org/wiki/Talk_(software)