Ejabberd es un servidor de mensajería XMPP que está diseñado para ser potente, escalable y confiable. Es capaz de albergar a más de 2 millones de usuarios en un solo nodo, así como de operar en grupos de servidores.

Los desarrolladores de Ejabberd crearon su aplicación para que sea extremadamente modular, de modo que la funcionalidad se pueda adaptar con precisión para cumplir con sus requisitos. Esto garantiza que su servidor no ejecute ningún código que no necesite para hacer que su instancia de ejabberd sea más segura y eficiente.

En este tutorial, aprenderemos a instalar y configurar un servidor ejabberd en Ubuntu 22.04 que utilizará certificados de Let's Encrypt para proteger sus datos.

Requisitos para la instalación

Son pocos, pero necesarios para poder realizar esta instalación:

  • Un servidor de Ubuntu 22.04
  • Acceso a root
  • Un dominio apuntando al servidor y con los siguientes subdominios configurados: pubsub.[tu_Dominio], proxy.[tu_Dominio], muc.[tu_Dominio] y upload.[Tu_Dominio]
  • Tener configurado un hostname con el dominio que utilizaremos:
hostnamectl set-hostname [tu_dominio]
🐱
Este paso es importante, ya que cuando instalemos eJabberd el paquete se reconfigurará utilizando el host y evitaremos mucha configuración.

Configuración del Firewall

Dependiendo si estamos usando ufw u otro Firewall integrado en nuestro proveedor cloud de confianza, deberemos de habilitar los siguientes puertos para que eJabberd funcione correctamente:

Puerto Descripción
5222 Puerto estándar para conexiones de cliente Jabber/XMPP, simple o STARTTLS.
5223 Puerto estándar para conexiones de clientes Jabber utilizando el antiguo método SSL.
5269 Puerto estándar para conexiones de servidor Jabber/XMPP.
4369 EPMD (Más info epmd) escucha las solicitudes de nombre de nodo de Erlang.
5280 Puerto estándar utilizado para la interfaz web de eJabberd
5443 Puerto estándar cifrado utilizado para la interfaz web de eJabberd
📢
Todos los puertos son TCP.

Activar IPv4

También tendremos que activar el reenvío por IPv4, para ello deberemos de modificar /etc/sysctl.conf y descomentar la siguiente línea:

net.ipv4.ip_forward=1

Y aplicamos cambios con:

sysctl -p

Instalación de eJabberd

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
dpkg -i ejabberd*.deb
🚨
Se puede instalar eJabberd desde repositorios de Ubuntu, pero parece que tiene un bug y no se puede levantar correctamente el servicio, por lo que recomiendo instalar el paquete manualmente.

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

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 /opt/ejabberd/conf/ejabberd.yml y añadiremos o modificaremos lo siguiente.

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

  ...
  mod_muc:
    host: muc.[tu_dominio]
    access:
      - allow
  ...
📢
Por defecto, el host de mod_muc es conference.[tu_dominio], pero en este caso lo hemos cambiado por muc.[tu_dominio]. Si no quieres modificar este host, ten en cuenta el subdominio conference.[tu_dominio].

Finalmente, habilitamos el acceso para nuestro usuario modificando el apartado de acl:

acl:
  admin:
     user:
       - "admin"

Configuración de SSL

Por supuesto también tendremos que configurar el certificado con Let's Encrypt, para ello necesitaremos instalar el siguiente paquete:

apt install certbot python3-certbot-nginx

Editamos el fichero de configuración de eJabberd y en el apartado de certfiles añadimos lo siguiente:

certfiles:
  - /etc/letsencrypt/live/[tu_dominio]/fullchain.pem
  - /etc/letsencrypt/live/[tu_dominio]/privkey.pem

Para generar los certificados se tiene que hacer utilizando -entre muchas otras opciones- un proxy, para eso configuraremos el siguiente fichero /etc/nginx/sites-enabled/ejabberd.conf con el siguiente contenido:

server {
    listen 80;
    server_name [tu_dominio] pubsub.[tu_dominio] muc.[tu_dominio] proxy.[tu_dominio] upload.[tu_dominio];

    location / {
        proxy_pass          http://localhost:5280;
        proxy_set_header    Host    $host;
        proxy_set_header    X-Forwarded-For $remote_addr;
        proxy_set_header    X-Real-IP   $remote_addr;
        proxy_pass_header   server;
    }
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log notice;
}

Recargamos el servicio de Nginx:

systemctl reload nginx

Y generamos el certificado con:

certbot

En un punto, nos dirá que certificados queremos generar, le indicaremos que todos:

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: [tu_dominio]
2: muc.[tu_dominio]
3: proxy.[tu_dominio]
4: pubsub.[tu_dominio]
5: upload.[tu_dominio]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 2 3 4 5

Tras crear el certificado, iniciaremos de nuevo eJabberd:

systemctl start ejabberd

Comprobar configuración

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

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 admin 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]

# Por ejemplo:
ejabberdctl register t3rr0rz0n3 voidnull.es supermegapasswordseguro
📢
Si en el apartado de acl has creado un usuario llamado admin, deberás de crear un usuario admin@[tu_dominio] para poder acceder luego a la interfaz web.

Acceder a la interfaz web

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

Configurar cuenta de XMPP en un cliente

Podemos utilizar el cliente que más nos guste, hay una lista muy larga dependiendo sistemas operativos y versiones, en este caso usaremos Dino, que es un cliente XMPP escrito en GTK que es muy bonito.

Luego nos pedirá la contraseña y podremos iniciar conversaciones con nuestros amigos y amigas simplemente añadiendo el JID:

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación