Page cover

Ejabberd - XMPP

Se trata de un servidor de mensajería instantánea de código abierto. Válido para plataformas Unix BSD, GNU/Linux o Microsoft Windows entre otras. Para la comunicación instantánea se utiliza XMPP.

Alexey Shchepin fundó el proyecto en 2002 y continúa manteniéndolo. El nombre « ejabberd » significa « Erlang Jabber Daemon ». Se escribe en letras minúsculas solamente, que es uso común en el mundo de Unix. El objetivo del proyecto ejabberd es la creación de un servidor XMPP estable y con variedad de posibilidades.

La documentación y casos de uso la puedes encontrar aquí: https://docs.ejabberd.im/use-cases/

Vamos a ver como funciona:

Instala el software

Lo primero, como siempre, será actualizar los paquetes de nuestro sistema:

apt update
apt upgrade

Tras tener los paquetes actualizados, procedemos a instalar eJabberd. Para eso nos descargaremos el paquete directamente desde el repositorio oficial de eJabberd:

wget https://github.com/processone/ejabberd/releases/download/23.01/ejabberd_23.01-1_amd64.deb
sudo dpkg -i ejabberd*.deb

Una vez se hayan instalado todos los paquetes, procedemos a parar el servicio.

sudo systemctl stop ejabberd

Configuración de eJabberd

A continuación configuraremos el servicio de eJabber, como hemos configurado anteriormente el hostname del servidor, tendremos configuración ya con nuestro dominio. Para eso editaremos el fichero de configuración:

sudo nano /opt/ejabberd/conf/ejabberd.yml 

Ahora añadiremos o modificaremos:

  1. Añadimos el dominio del servidor al host

....
hosts:
    - alexdns.local
....
  1. Buscamos el apartado trusted_network y lo ponemos en all

  2. Ahora le vamos a dar permisos de administrador al usuario admin que hemos creado:

....
acl:
  admin:
     user:
       - "admin"
  local:
    user_regexp: ""
  loopback:
    ip:
      - 127.0.0.0/8
      - ::1/128
....

El acceso web viene habilitado por defecto por las siguientes líneas, no hace falta que cambies nada:

La interfaz web usa el protocolo HTTP a través del puerto 5280

Vamos hasta el apartado de mod_muc para añadir un host personalizado:

  ...
  mod_muc:
    host: muc.alexdns.local
    access:
      - allow
  ...

Comprobar configuración

Con eJabberd hay una forma para comprobar que la configuración que tenemos es correcta, para ello ejecutaremos este comando:

sudo ejabberdctl live

La salida de este comando es el siguiente:

--------------------------------------------------------------------

IMPORTANT: ejabberd is going to start in LIVE (interactive) mode.
All log messages will be shown in the command shell.
You can interact with the ejabberd node if you know how to use it.
Please be extremely cautious with your actions,
and exit immediately if you are not completely sure.

To exit this LIVE mode and stop ejabberd, press:
  q().  and press the Enter key

--------------------------------------------------------------------
To bypass permanently this warning, add to ejabberdctl.cfg the line:
  EJABBERD_BYPASS_WARNINGS=true
Press return to continue

Si pulsamos enter para continuar, nos mostrará el log del inicio del servicio y podremos acceder al panel de admin.

2023-01-17 16:36:38.340359+00:00 [info] ejabberd 21.12-1 is started in the node ejabberd@localhost in 1.66s
2023-01-17 16:36:38.340743+00:00 [info] Start accepting UDP connections at [::]:3478 for ejabberd_stun
2023-01-17 16:36:38.341079+00:00 [info] Start accepting TCP connections at [::]:5222 for ejabberd_c2s
2023-01-17 16:36:38.341195+00:00 [info] Start accepting TLS connections at [::]:5223 for ejabberd_c2s
2023-01-17 16:36:38.341260+00:00 [info] Start accepting TCP connections at [::]:5269 for ejabberd_s2s_in
2023-01-17 16:36:38.341925+00:00 [info] Start accepting TLS connections at [::]:5443 for ejabberd_http
2023-01-17 16:36:38.342025+00:00 [info] Start accepting TLS connections at [::]:5280 for ejabberd_http
2023-01-17 16:36:38.342289+00:00 [info] Start accepting TCP connections at [::]:1883 for mod_mqtt

Registrar usuarios en ejabberd

Ahora que tenemos todo funcionando, podemos crear un usuario para comprobar que funciona en un cliente de XMPP:

# Con esta estructura
ejabberdctl register [USUARIO] [DOMINIO] [CONTRASEÑA]

Debemos crear primero de todo el usuario admin:

sudo ejabberdctl register admin alexdns.local 1234

Para comprobar que usuarios hay creados podemos usar el comando:

sudo ejabberdctl registered-users alexdns.local

Acceso a panel de administración

Ahora podemos acceder al acceso web desde http://[tu_ip]:5280/admin y nos cargará lo siguiente tras iniciar sesión con el usuario admin@[tu_dominio]:

Recuerda poner el dominio correcto
Panel de administración de ejabberd

Lo que deberíamos hacer ahora es crear dos usuarios normales para probar la conexión. Para ello accede a Dominios virtuales>localhost>usuarios:

Usuarios creados

Configurar cuenta de XMPP en un cliente con Pidgin

Podemos utilizar el cliente que más nos guste, hay una lista muy larga dependiendo sistemas operativos y versiones como Dino pero en este caso usaremos Pidgin, que también es un cliente XMPP bastante sencillo y agradable.

Utilizaremos DOS máquinas virtuales cada una con una cuenta diferente y configuraremos:

  • Nombre: (el que hayas creado en el admin)

  • Dominio: alexdns.local

  • Recurso: (opcional, es para identificar dispositivos)

  • Contraseña: ****

Debes pasar a opciones avanzadas y configurar "Conectar con el servidor" y poner la IP correcta:

Ventana de configuración de cuenta de usuario

Te pedira aceptar el certificado SSL y podremos iniciar conversaciones con nuestros amigos y amigas simplemente añadiendo el usuario en una MV y otra sesión con otro usuario en otra MV:

Los usuarios se comunican entre si

Crear sala de chat

Una vez hayas llegado hasta aquí es posible que te interese crear salas de chat para tus usuarios, vamos a ver como.

En nuestro caso, si has seguido la guía anterior deberias tener configurado como sala MUC (Multi-User Chat), muc.alexdns.local por lo que ahora toca ir a pidgin:

  1. Abre Pidgin y ve a Amigos > Unirse a un chat.

  2. En la ventana emergente:

    • Cuenta: Tu cuenta XMPP ya conectada.

    • Sala: El nombre que quieres para la sala (ej. cafeteria).

    • Servidor: Usualmente muc.alexdns.local

    • Alias: (Opcional) Nombre para mostrar la sala en tu lista.

    • Contraseña: (Opcional) si quieres restringir el acceso.

  3. Haz clic en Unirse.

    Si la sala no existía antes, se creará automáticamente (esto depende de los permisos en mod_muc).

Una vez dentro de la sala puedes:

  • Hacer la sala persistente.

  • Establecer quién puede entrar.

  • Poner contraseña.

  • Hacerla pública o privada.

Webgrafía

Última actualización