Sistema de Mensajería Instantánea Corporativa con
Jabber y MySQL.
Rafael Matito
1
Objetivo
Sistema de mensajería instantánea corporativa
basado en Software Libre.
Basado en estándares abiertos.
Libertad de elección de servidor y clientes.
Facilidad de administración de los usuarios del
sistema, de sus grupos y contactos.
Bajo coste.
2
¿Qué necesitamos?
Servidor Jabber
{
Jabberd1
Jabberd2
Sistema Gestor de Bases de Datos (MySQL)
Aplicación de gestión de usuarios del sistema
Equipos clientes (PSI,Gaim,Kopete...)
3
Esquema de funcionamiento
Servidor
Mensajes y
autenticación
Validación
y almacenamiento datos
Mensajes y
autenticación
Cliente
Base de datos
Cliente
4
¿Qué es Jabber?
Jabber es un protocolo libre gestionado por la Jabber
Software Foundation basado en el estándar XML
para mensajería instantánea.
Es una alternativa libre y segura a servicios como
ICQ, AIM, MSN o Yahoo Messenger.
Más conocido como el Linux de la mensajería
instantánea.
5
Características
Protocolo abierto: Con todas las ventajas del
software libre, se puede programar un servidor o un
cliente o ver el código, entre otras cosas.
Estándar: ha sido aprobado bajo el nombre de XMPP por
el Internet Engineering Task Force (IETF). Sus
especificaciones han sido publicadas como RFC 3920 y
RFC 3921.
Descentralizado: Se puede crear un servidor para
Jabber, y se puede interoperar o unirse al resto de la
red Jabber. Similar al email.
Extensible: Se puede ampliar con mejoras sobre el
protocolo original. Las extensiones comunes son
manejadas por la Jabber Software Foundation.
6
Características
Seguro: Cualquier servidor Jabber puede estar aislado del exterior
(intranet). Se permite SSL para comunicaciones servidor-cliente y
algunos clientes aceptan GPG como encriptación de las
comunicaciones usando cifrado asimétrico.
Multiredes: Un transporte o pasarela permite comunicarse con
otros protocolos usados por clientes como MSN Messenger, ICQ,
AOL o Yahoo!.
Flexible: los usos de Jabber más allá de la MI incluyen
monitorización de red, sindicación de contenido, herramientas
de colaboración, compartición de archivos, juegos, supervisión
de sistemas remotos...
Diverso: una amplia gama de compañías y de proyectos de
software libre utilizan los protocolos Jabber para construir y
para desplegar sus productos y y servicios en tiempo real.
Libertad de elección de proveedor.
7
Ejemplo de comunicación
Servidor Jabber
Servidor Jabber
cliente Jabber
cliente Jabber
Pasarela
Red MSN
Cliente MSN
cliente Jabber
Protocolo Jabber
Protocolo MSN
8
Servidores Jabber
9
Implementaciones
Implementación con Jabberd1
Más probado, más tiempo de desarrollo y más estable.
Existen paquetes para la mayoría de distribuciones
No utiliza MySQL de forma nativa.
Implementación con Jabberd2
Tiene más características que Jabberd1
Versión menos probada y por lo tanto menos estable
Es más difícil encontrar paquetes para la mayoría de distribuciones
Utiliza MySQL de forma nativa para autenticación y almacenamiento
de datos
10
Implementación con Jabberd1
Jabberd1 no tiene almacenamiento
de datos ni autenticación contra
bases de datos de forma nativa. Se
necesita descargar
la extensión
xdb_sql.
Para más información:
http://libertonia.escomposlinux.org/story/2004/9/28/10813/1365
11
Implementación con Jabberd1
1. Instalar GNU Pth
2. Descargar Jabberd1 en /usr/local y compilar
3. Probamos el servidor
[root@server:/usr/local/jabberd-1.4.3]# ./jabberd/jabberd -h
servidor.dominio
4. Descargamos xdb_sql dentro del directorio donde
tenemos Jabberd1
5. Instalamos las cabeceras y ficheros de desarrollo de
MySQL (mysql-devel)
12
Implementación con Jabberd1
6. Modificamos el fichero Makefile de xdb_sql
# Uncomment the file that corresponds to your DB
xdb_sql_OBJECTS= \
xdb_sql_mysql.o \
xdb_sql.o \
xdb_sql_auth0k.o \
xdb_sql_auth.o \
xdb_sql_offline.o \
xdb_sql_register.o \
xdb_sql_config.o \
xdb_sql_querydef.o \
xdb_sql_roster.o \
xdb_sql_last.o \
xdb_sql_backend.o \
xdb_sql_vcard.o \
xdb_sql_filter.o \
xdb_sql_generic.o \
# xdb_sql_pgsql.o
# xdb_sql_odbc.o
all: xdb_sql.so
13
Implementación con Jabberd1
7. Compilamos xdb_sql
8. Creamos la base de datos
[root@server:/usr/local/jabber-1.4.3/xdb_sql]# mysql -u root -p
< sample_dabase.sql
9. Editamos el fichero xdb_sql.xml (sección
connection)
<!-- Configure information about the SQL connection -->
<connection>
<host>servidor.dominio</host>
<db>jabber</db>
<user>jabber</user>
<pass>tuclave</pass>
</connection>
14
Implementación con Jabberd1
10. Editamos el fichero jabber.xml (sección xdb)
<xdb id="xdb">
<host/>
<ns>jabber:iq:roster</ns>
<ns>jabber:x:offline</ns>
<ns>jabber:iq:filter</ns>
<ns>jabber:iq:last</ns>
<ns>jabber:iq:auth</ns>
<ns>jabber:iq:auth:0k</ns>
<ns>jabber:iq:register</ns>
<ns>vcard-temp</ns>
<load>
<xdb_sql>/usr/local/jabber-1.4.3/xdb_sql/xdb_sql.so</xdb_sql>
</load>
<jabberd:include>/usr/local/jabber-
1.4.3/xdb_sql/xdb_sql.xml</jabberd:include>
<load>
<xdb_file>./xdb_file/xdb_file.so</xdb_file>
</load>
<xdb_file xmlns="jabber:config:xdb_file">
<spool><jabberd:cmdline flag= s >./spool</jabberd:cmdline></spool>
</xdb_file>
</xdb>
15
Implementación con Jabberd2
De ahora en adelante se asumirá que se
ha seguido esta implementación para la
configuración del servidor, emisión de
mensajes del sistema...
16
Requisitos de Jabberd2
OpenSSL (versión 0.96 o superior)
Libidn (versión 0.3 o superior)
BD para almacenar datos
MySQL
Berkeley DB
Oracle
PostgreSQL
Sistema para autenticar
MySQL
Berkeley DB
OpenLDAP
Oracle
PostgreSQL
PAM
17
Instalar Jabberd2
1. Descargamos el código fuente
2. Configuramos
./configure −−enable−mysql −−enable−ssl
−−enable−idn
3. Compilamos e instalamos
Los ficheros de configuración estarán en
/usr/local/etc/jabberd
18
Configuración del servidor
1. Establecer el hostname en sm.xml y en c2s.xml
sm.xml
<!−− Session manager configuration −−>
<sm>
<id>servidor.dominio</id>
c2s.xml
<!−− Local network configuration −−>
<local>
<id>servidor.dominio</id>
19
Configuración del servidor
2. Crear la base de datos jabberd2 y establecer la
configuración del usuario
#mysql -u root -p < tools/db-setup.mysql
3. Configurar sm.xml para usar MySQL como sistema de
almacenamiento.
<!−− Storage database configuration −−>
<storage>
<!−− By default, we use the MySQL driver for all
storage −−>
<driver>mysql</driver>
20
Configuración del servidor
3. Configurar sm.xml para usar MySQL como sistema de
almacenamiento.
<!−− MySQL driver configuration −−>
<mysql>
<!−− Database server host and port −−>
<host>localhost</host>
<port>3306</port>
<!−− Database name −−>
<dbname>jabberd2</dbname>
<!−− Database username and password −−>
<user>jabberd2</user>
<pass>secret</pass>
<transactions/>
</mysql>
21
Configuración del servidor
4. Configurar c2s.xml para usar MySQL como sistema de
autenticación
<!−− Authentication/registration database
configuration −−>
<authreg>
<!−− Backend module to use −−>
<module>mysql</module>
22
Configuración del servidor
4. Configurar c2s.xml para usar MySQL como sistema de
autenticación
<!−− MySQL module configuration −−>
<mysql>
<!−− Database server host and port −−>
<host>localhost</host>
<port>3306</port>
<!−− Database name −−>
<dbname>jabberd2</dbname>
<!−− Database username and password −−>
<user>jabberd2</user>
<pass>secret</pass>
</mysql>
23
Configuración del servidor
5. Probar el servidor
/usr/local/bin/jabberd
Existe un script llamado jabberd.rc en el directorio tools
que nos permitirá arrancar y parar el servidor
automáticamente
24
Otras tareas de configuración
Configurar Jabberd2 para conexiones SSL
Crear un usuario administrativo
Deshabilitar el registro público de cuentas
Habilitar que los usuarios puedan cambiar las
claves
25
Base de datos
authreg: almacena los usuarios registrados
queue: almacena los mensajes aún no entregados
roster-groups: almacena los grupos
roster-items: almacena los contactos
vcard: almacena la información personal de los
usuarios
26
Gestión de usuarios y contactos
usuarios
jabberd2
Scripts de
sincronización
Aplicación de gestión
de usuarios
Servidor Jabberd2
27
Ejemplo de script
28
Gestión de usuarios y contactos
jabberd2
Aplicación sin desarrollar
- Gestión de los usuarios
- Gestión de los contactos
- Gestión de los grupos
Servidor Jabberd2
29
Equipos clientes
Existen muchos clientes de Jabber
Fácil e intuitivo
Multiplataforma
Multiprotocolo
Otras características: grupos de conversación,
envío de mensajes a grupos, grupos anidados...
30
Equipos clientes
31
Emisión de mensajes automáticos
Insertando registros en la tabla queue.
Utilizando jabberd_alert.pl
Programando un script en php que haga uso de la
clase “class.jabber.php” http://cjphp.netflint.net
32
Insertar registros en la tabla queue
La tabla queue mantiene una lista de todos los
mensajes que aún no han sido entregados a sus
destinatarios.
Es una tabla que usa internamente el servidor
jabberd2, no se recomienda su alteración desde el
exterior.
Si el destinatario está conectado en el momento de la
emisión del mensaje no lo recibirá hasta que
desconecte y vuelva a conectar.
Es muy sencillo realizar un script que inserte registros
en esta tabla con el formato de los mensajes.
33
Utilizando jabberd_alert.pl
./jabber_alert.pl −e
[email protected] −n
[email protected] −w clave
e = jid del receptor
n = jid del emisor
w = clave del usuario emisor
34
Utilizando la clase class.jabber.php
35
Un caso de éxito, Provivienda
Provivienda tiene sus empleados en muchos centros
de trabajo.
Con el fin de ahorrar costes en teléfono y agilizar las
comunicaciones
Comentarios de: Sistema de Mensajería Instantánea Corporativa con Jabber y MySQL (0)
No hay comentarios