Instalar un servidor privado de mensajería instantánea (XMPP) | Programador Web Valencia

Instalar un servidor privado de mensajería instantánea (XMPP)

3 minutos

Chat privado

Existe una alternativa a los servicios de mensajería instantánea como WhatsApp, Telegram, Signal, etc. Un sistema desentralizado, opensource, seguro, donde eres propietario de los datos y muy maduro (existe desde el 2011). Esta tecnología se denomina XMPP.

XMPP es un protocolo de comunicación en tiempo real, que permite la comunicación entre dos o más entidades a través de la red. Es un protocolo abierto, extensible, federado y descentralizado (como Mastodon), lo que significa que cualquier persona puede levantar su propio servicio y comunicarse con otras instancias. Varias empresas de renombre lo utilizaron para lanzar sus aplicaciones, como WhatsApp o Google Talk. Actualmente hay empresas, como Cisco y Facebook Messenger, que continúan apoyandose en este protocolo.

En mi caso tengo la necesidad de interactuar con una mensajería instantánea privada por diferentes motivos. Como por ejemplo hablar con mis servidores de forma segura desde mi smartphone, pidiendo que ejecuten comandos, activen/desactiven tareas, me informen sobre el estado o como medio de alerta ante problemas. Otra es poder brindar un medio de comunicación alternativo al email, no sustentando por una empresa privada de mensajería instantánea. Aunque todas estas razones se vuelven endebles cuando ponemos sobre la mesa la posibilidad de hablar con familiares y amigos de forma privada. Otra cosa es que ellos quieran, pero al menos la opción está ahí.

Tutorial

0. Requerimientos

  • Un servidor con Debian o Ubuntu. Si utilizas otras distribuciones deberás adaptar los comandos. Puedes usar un VPS o un servidor en tu casa.
  • Un dominio que apunte con A a la IP de tu servidor. En los ejemplos utilizaré chat.dominio.com.
  • Un cliente de mensajería instantánea. Puedes utilizar Gajim, Conversations o el clásico Pidgin. Entre otras cosas, lo utilizaremos para comprobar que funciona.

¡No pases a los siguientes pasos hasta que no tengas un dominio y apunte a tu servidor!

1. Instalación

He elegido Prosody, un servidor XMPP escrito en Lua, que es realmente fácil de instalar y configurar.

sudo apt update
sudo apt install prosody prosody-modules

Activamos el servicio.

sudo systemctl enable prosody
sudo systemctl start prosody

2. Abrir puertos

Si tienes un firewall, deberás abrir los puertos 5222 y 5269.

  • 5222: Cliente a servidor. Entre tu cliente de mensajería instantánea y el servidor.
  • 5269: Servidor a servidor. Entre tu servidor y otros servidores. No olvidemos que es un protocolo federado.
sudo ufw allow 5222
sudo ufw allow 5269

3. Configurar Prosody

Ahora toca configurar Prosody. Para ello editamos el archivo /etc/prosody/prosody.cfg.lua.

sudo nano /etc/prosody/prosody.cfg.lua

Modificamos el VirtualHost con el dominio que hemos elegido.

VirtualHost "chat.dominio.com"

Es el momento de habilitar los módulos que necesitamos. Solo debes eliminar el comentario -- de las líneas que quieras activar.

Te recomiendo incluir, ya que no está presente en la configuración, el módulo cloud-notify para poder recibir Push Notifications en los smartphones. Debes agregarlos en la sección modules_enabled.

modules_enabled = {
    ...
	"cloud_notify";
}

Y a continuación modificamos el módulo añadiendo las siguientes líneas.

-- For iOS push notification...
-- mod_cloud_notify settings
push_notification_with_body = false;
push_notification_with_sender = true;

4. Obtener un certificado TLS

Para que la comunicación sea segura, necesitamos un certificado TLS. Puedes obtener uno gratuito de Let’s Encrypt.

sudo apt install certbot
sudo certbot certonly --standalone -d chat.dominio.com

Otra posibilidad es instalar un servidor web como Caddy, que se encargará de obtener y renovar el certificado automáticamente.

sudo apt install caddy

Activas el servicio.

sudo systemctl enable caddy
sudo systemctl start caddy

Y añades la siguiente configuración en /etc/caddy/Caddyfile.

chat.dominio.com {
    reverse proxy localhost:5280
}

Después reinicia el servicio.

sudo systemctl restart caddy

Ahora ya podemos importar el certificado en Prosody.

prosodyctl --root cert import /etc/letsencrypt/live/chat.dominio.com/fullchain.pem

O si usas Caddy.

prosodyctl --root cert import /var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/chat.dominio.com/

Te recomiendo que añadas un cron para que se renueve automáticamente el certificado dentro de Prosody.

sudo crontab -e

Incluye la siguiente línea.

0 0 * * * prosodyctl --root cert import /etc/letsencrypt/live/chat.dominio.com/fullchain.pem

Comprueba que el certificado se ha importado correctamente.

prosodyctl --root cert status

5. Crear un usuario

Ahora toca crear un usuario. Lo llamaremos Mario y su contraseña será ilovepeach.

Para ello ejecutamos el siguiente comando.

prosodyctl --root register Mario chat.dominio.com ilovepeach

6. Comprobar que funciona

Configura tu cliente de mensajería instantánea con los siguientes datos.

  • Usuario: Mario.
  • Contraseña: ilovepeach.
  • Servidor: chat.dominio.com.

En caso de que te pida el nombre de usuario, debe tener la siguiente estructura: mario@chat.dominio.com.

Si todo ha ido bien, deberías poder conectarte. Aunque yo te recomiendo crear otro usuario e identificarte en otro dispositivo para mantener una conversación.

También puedes enviar un mensaje desde el terminal con sendxmpp. Supongamos que queremos lanzar un mensaje a luigi@chat.dominio.com desde el usuario Mario.

echo "Hola desde terminal" | sendxmpp -t -u Mario -p ilovepeach -j chat.dominio.com -t luigi@chat.dominio.com

Y ya hemos terminado. Ahora puedes crear más usuarios y disfrutar de tu servidor de mensajería instantánea. No dudes en activar todos los módulos que necesites.

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...