Openfire (antes llamado Wildfire y Jive Messenger) es un servidor de mensajería instantánea y chat que trabaja con el protocolo XMPP (Jabber) y está desarrollado en Java. Estás características convierten a la utilidad en totalmente segura y con el respaldo de una gran comunidad. De esta manera tendrás tu propio servidor de mensajería y gracias a su administrador podrás compartir archivos, enviar mensajes offline, crear grupos, mensajes broadcast, etcétera. Openfire es desarrollada por Jive Software y una comunidad llamada ‘IgniteRealtime.org’, y está disponible bajo Licencia Apache.
Características Openfire
- Control de administración basada en Web
- Protocolo de seguridad SSL / TLS
- Conectividad con soporte a autentificación mediante LDAP
- Amigable
- Plataforma Independiente
Para este manual usamos como plataforma para el Servidor VPS a Clouding.io, que es una plataforma de Infraestructura como Servicio (IaaS, por sus siglas en inglés) que tiene como objetivo ofrecerle el mejor servicio de IaaS, con una atención al cliente excepcional y un coste comedido. Dicha plataforma te la la opción de probarla dándote ¡5€ de saldo GRATIS al registrarte!, también he probado su soporte técnico y es bastante rápido y preciso.
Bueno una vez que te registres en la plataforma y valide tus cuentas pasamos a crear el servidor.
Requerimientos
- Crear un servidor usando una imagen ubuntu 18.04 en su panel como se muestra en la imagen a continuación
- CPU vCores 0.5 si es para servidores de menos de 100 usuarios
- RAM 1 GB
- Disco Duro 5GB
Una vez creado el servidor Clouding.io nos envía vía correo los datos de acceso como el correo que les muestro en la siguiente imagen
Una vez teniendo el IP real de dicho servidor pasamos a crear el registro DNS de nuestro servidor, en caso de usar Cloudflare recuerden no ocultar la ip del mismo, para eso deben deshabilitar el Proxy en dicho registro como mostramos en la foto
Ya una vez creado el registro DNS y tener las claves de acceso al servidor pasamos al otro punto de esta instalación, pero siempre recordar cambiar el password del servidor del que te envían por defecto como medida de seguridad.
root@jabber:~# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Descargando Openfire
Una vez creado el servidor accedemos via ssh al server y procedimos a descargar openfire de la siguiente URL aqui (la versión cuando hago el manual es 4.5.2) pero para el manual voy a usar x.y.z porque puede servir para cualquier versión, hay varias opciones de descarga Windows, linux y mac, dentro de las opciones de linux tenemos rpm con jre o no incluido, un deb sin jre y un tar.gz para cualquiera de las variantes de GNU\Linux; hasta hace un tiempo usaba esta ultima porque el deb daba problemas en Ubuntu pero ya eso esta resuelto así que usaremos la variante mas como da es decir archivo deb.
Les dio la pagina de descarga porque puede que la versión que en este momento no coincida con la de la creación del manual y trato que sea lo mas genérico posible siempre puedes usar curl o wget para descargar la versión desde el mismo server.
Ejemplo
wget https://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_x.y.z_all.deb -O openfire_x.y.z_all.deb
wget https://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4.5.2_all.deb -O openfire_4.5.2_all.deb
Instalando MariaDb para guardar los datos de Openfire
Para guardar los Datos de Openfire puedes usar la BD interna de pero en caso de re-instalación pierdes todos los datos de los usuarios contactos conversaciones etc, también como buena practica puedes montar esa base datos en otro servidor externo que tengas optimizado para mysql, en este caso vamos a usar el mismo Servidor donde estoy instalando Openfire.
apt install mariadb-server
Una vez instalada mariaDB vamos a hacer algunos cambios en la configuración del servicio usando:
mysql_secure_installation
Estas son las opciones que uso
- Enter current password for root (enter for none): Oprima Enter
- Set root password? [Y/n]: Y
- New password: Ponemos la contraseña que queramos
- Re-enter new password: Repetimos la contraseña
- Remove anonymous users? [Y/n]: Y
- Disallow root login remotely? [Y/n]: Y
- Remove test database and access to it? [Y/n]: Y
- Reload privilege tables now? [Y/n]: Y
Ahora ya podemos acceder como root para crear la BD para Openfire:
sudo mysql -u root
Una vez dentro creamos el usuario y la BD para openfire:
CREATE DATABASE openfire CHARACTER SET='utf8'; CREATE USER 'openfire'@'localhost' IDENTIFIED BY 'password para usuario openfire'; GRANT ALL PRIVILEGES ON openfire.* TO 'openfire'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; quit
Como les comentaba antes la siguiente configuración la aplico en Ubuntu LTS pero es valida también para Debian, openfire necesita jre, yo uso openjdk ya que de los repositorios de Ubuntu eliminaron las versiones sun-java* por problemas de compatibilidad además apostaron por la versión libre pero si tienen algún problema con eso pueden buscarla e instalarla; la versión en la fecha de creación del manual es la openjdk-11-jre, pero da problemas. si quieren puede probar…
sudo apt install openjdk-8-jre
Una vez instalada la versión de jre o en cualquier momento que lo necesitemos podemos verificar la versión de java que tenemos
java -version
Esto nos debe devolver algo como esto
root@jabber:~# java -version
openjdk version "1.8.0_252"
OpenJDK Runtime Environment (build 1.8.0_252-8u252-b09-1~18.04-b09)
OpenJDK 64-Bit Server VM (build 25.252-b09, mixed mode)
Instalación
Para GNU\Linux hay 4 variantes, una para RedHat con jre incluida una para distribuciones basadas en Debian y un tar.gz para todas las variantes Unix esta última lleva un poco más de trabajo al instalar y les explico a continuación.
Para la instalación del .deb usamos el comando para instalaciones manuales en Debian/Ubuntu distros
dpkg -I openfire_4.5.2_all.deb
dpkg -I openfire_x.y.z_all.deb
Instalando desde el paquete comprimido
Para la instalación con el comprimido seguimos los siguientes pasos descomprimir el tar.gz del Openfire que descargamos y en el proceso lo movemos a /opt
tar -C /opt/ -xvzf openfire_x_y_z.tar.gz
Crea el vínculo simbólico del Openfire en init.d para que lo puedas ejecutar como un demonio
ln -s /opt/openfire/bin/openfire /etc/init.d/
Cambiamos los permisos de ejecución para poder usar los comandos para iniciar reiniciar y detener el demonio
sudo chmod +x /etc/init.d/openfire
Por cualquiera de las 2 variantes que usemos en necesario poner Openfire como servicio por defecto para hacerlo usamos
update-rc.d openfire defaults
Reglas en el Firewall
La plataforma de Clouding.io como tal bien con un grupo de reglas ya predefinidas genéricas, que personalizaremos a nuestra necesidad para que Openfire pueda funcionar
- Puerto 9090: para la interfaz web.
- Puerto 9091: par la interfaz web por SSL.
- Puerto 5222: Puerto principal usado para la comunicacion client/server de Openfire.
- puerto 7777: usado para la transferencia de archivos.
- Port 7070: used for unsecured Http client connections.
- Port 7443: used for secure Http client connections.
- Port 3478, 3479: used by the STUN Service for entities behind a NAT.
Para crear las reglas pasamos a Servidores >> Mis Firewalls y damos en el Boton + para crear el Nuevo perfil de firewall, ahi seleccionamos copiar las reglas que vienen por default, establecemos un nombre y una descripción.
Eliminamos las reglas que no nos interesen y creamos las antes mencionadas
Una vez creadas las reglas vamos a Servidores >> damos sobre nuestro servidor >> Red >> Firewalls Vinculados
>> y le damos al + donde vincularemos las reglas antes creadas a nuestro servidor, una vez agregadas dichas reglas desvinculamos las que vienen por defecto.
Configuración del Servidor para su puesta en marcha
Ya tenemos instalado Openfire y todas las dependencias necesarias ahora comencemos con la configuración básica de nuestro servidor para eso vamos a acceder a la consola de administración del Openfire y terminar la instalación de nuestro servidor, con el navegador de nuestra preferencia usando http://IPdelServidor:9090
Las primeras pantallas no necesitan de mucha explicación, la primera es en la que selecciona el idioma por defecto:
Usa el del navegador(lo propone por defecto), pero en nuestro caso seleccionamos Español(es), o a su gusto:
En el siguiente paso tenemos la configuración del servidor donde definimos el dominio del servidor y los puertos para la consola de administración mediante http y https.
El dominio de prueba que he puesto hace que los usuarios coincidan con [email protected], lo hago para diferenciar servicios en mi red pero pueden quitarle «jabber.» y coincide con su dominio, en nuestro caso [email protected].
Configuración de la fuente da datos
La próxima vista es donde se configura la fuente de datos es decir donde hacemos la elección del tipo de BD que vamos a utilizar para guardar la información de nuestros usuarios, yo uso conexión estándar, por qué? bueno en caso de reinstalación o actualización del servicio tendremos guardados todos los datos de nuestros usuarios(contactos, avatar, datos generales) en una BD externa.
Voy a usar mysql pero puedes seleccionar cualquiera de las opciones según las necesidades y los gustos, la configuración queda como se ve a continuación:
La configuración es básica solamente tenemos que cambiar las opciones [hostname] y [database-name] por el nombre o dirección IP del servidor de datos y el nombre de la BD que vamos a usar (en una futura instalación mantenemos los datos y todas las configuraciones de los usuarios se mantendrán). En resumen lo que debemos cambiar es mysqlserver:puerto/Basededatos, usuario y contraseña para la conexión a la BD.
Seteos de Perfil
En el siguiente paso definimos el sistema de usuarios y grupos en nuestro servidor.
En mi caso usa la opción Por defecto, en caso de usar LDAP que esta opción es muy cómoda pues la integración te permite tener los usuarios automáticamente que los crees en el Active Directory.
Por ultimo definimos el usuario que será administrador del servidor de Openfire.
Definido dicho usuario hemos terminado la instalación de nuestro servidor con su configuración inicial y esta listo para usarse.
Acceso a la administración
Una vez terminada la instalación podemos acceder a el panel de administración por la dirección http://IPdelServidor:9090
recuerden que el usuario debe ser el que definieron anteriormente en este caso admin
Una vez iniciado la sección ya tenemos acceso al sistema donde podremos administrar todas las opciones de nuestro servidor jabber.
Instalación de WebChat Inverse para Openfire
Inverse es un cliente XMPP/Jabber via web, que puede usarlo como una aplicación de webchat o puede integrarlo en su propio sitio web, el mismo tiene integraciones a los principales CMS.Es 100% JavaScript, HTML y CSS del lado del cliente y el único backend requerido es un servidor XMPP moderno, en este caso el Openfire que acabamos de instalar.
Para instalar este plugins lo primero que debemos hacer es entrar a la administración de nuestro Openfire ir a Plugins >> Plugins Disponibles y en el mismo buscar inVerse y darle en el botón +
Una vez instalado el plugins pasamos a configurar el idioma del mismo en la propia administración de Openfire en Web Client >> Inverse >> Settings
En dicha configuración usted podrá especificar el idioma que tendrá dicho sistema y a la vez si desea bloquear que dicho inverse solo funcione para su dominio marcando el Locked Domain. Como notaran la URL para acceder al mismo no es amigable o fácil de recordar http://jabber.syscu.net:7070/inverse/ entonces emplearemos una configuración básica de nginx para que puedan conectarse usando los puertos clásicos de navegación 80 o 443.
Instalación de Nginx como proxy Inverso para el Inverse
Instalamos el Nginx para hacer que la URL a la hora de compartir o acceder a dicho sistema sea amiguable para el usuario y no tenga la necesidad de poner un puerto en la misma.
apt install nginx
Una vez instalado pasamos a configurar el virtualhost que hara dicho trabajo
nano /etc/nginx/sites-enabled/default
server { listen 80 default_server; server_name jabber.syscu.net; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { return 302 http://jabber.syscu.net/inverse; } location /inverse { proxy_pass http://127.0.0.1:7070; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 150; proxy_send_timeout 100; proxy_read_timeout 100; proxy_buffers 4 32k; client_max_body_size 8m; client_body_buffer_size 128k; } location /http-bind { proxy_buffering off; tcp_nodelay on; keepalive_timeout 55; proxy_pass http://localhost:7070; } }
Configurado el virtualhost pasamos a reiniciar el servicio del nginx y a comprobar que podamos acceder a nuestra URL en este caso http://jabber.syscu.net
service nginx restart
Una vez cargada la web se autentificaran con su usuario y podrán acceder a poder chatear vía web sin tener que instalar ninguna aplicación o cliente XMPP
Ya tenemos el Inverse funcionando correctamente, pero no cumplimos con una adecuada seguridad ya que no estamos usando conexiones cifrada para la comunicación, en este caso recomendamos usar un certificado de Let’s Encrypt como lo explicamos en dicho manual y configurar el virtualhost por https.
La configuración del virtual para acceder via https es la siguiente:
server { listen 443 ssl http2 default_server; server_name jabber.syscu.net; include /etc/nginx/ssl.conf; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location / { return 302 https://jabber.syscu.net/inverse; } location /inverse { proxy_pass https://127.0.0.1:7443; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 150; proxy_send_timeout 100; proxy_read_timeout 100; proxy_buffers 4 32k; client_max_body_size 8m; client_body_buffer_size 128k; } location /http-bind { proxy_buffering off; tcp_nodelay on; keepalive_timeout 55; proxy_pass https://localhost:7443; } }
Notece que el unico cambio que existe de uno al otro es el puerto que comentamos anteriormente en las reglas del firewall que usarian los servicios sea 7070 para conexiones no seguras y 7443 para conexiones seguras, pero eso como tal para el usuario no sera problema ya que para ellos simplemente usaran el 80 y 443 es decir http y https.
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
EL tuto 10+ , solo falto que en ves de usar mariadb, usaran postgres
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0
Esta muy bueno el tutorial pero, no puedo conectar la base de datos con el openfire. Me da error y cambie los dabase y el ipserver con la contraseña del usuario creado en la BD.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
tengo el debian 8.6 que repo debería usar para encontrar el jdk-8
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
Excelente tuto amigo! lo unico tengo un inconveniente con inverse…
levanta bien, puedo ingresar, pero cuando chateo no se ve el texto, en el cuadro donde se escribe, puedo escribir, pero cuando lo envio queda la ventana principal del chat en blanco, no lo veo ni yo ni mi interlocutor, si llega el aviso de nuevo mensaje, pero se ve la pantalla del chat vacia, usando pidgin como cliente de escritorio anda muy bien, pero con inverse tengo ese problema.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36
Hola Carlos, estuve por un tiempo testeando esta solución, no obstante con inverse no tuve la mejor experiecia y dejé de seguir el proyecto, algunos errores en sus funciones me desalentaron para usarlo en producción.
Saludos a todos.
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Excelente tuto Armando, muchas gracias por el aporte. Muy descriptivo en tus pasos. Estaba al tanto cuando comentaban sobre esto en el canal de telegram. Lo probare en mi ambiente laboratorio.