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]
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 |
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
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
...
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
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:

Comentarios