8 Apéndices

8.1 Instalación de Jabberd y configuración básica

Una vez obtenido el tarball con los fuentes de jabberd2 (http://jabberstudio.org/projects/jabberd2/releases/) debemos recoger ciertos datos, presentados en la tabla, siguiente a fin de proceder con la instalación.


Información requerida para la instalación de Jabberd2.

Parámetro

Requerido

Descripción

Su información

Jabberd User and Group

Usuario y grupo que será usado para correr jabberd

Usuario: jabber

Grupo: jabber

Directorio PID

Directorio donde jabberd guarda los archivos PID

/usr/local/var/jabberd/pid

Directorio Log

No1

Directorio para los log de jabberd. Si no es especifica en los archivos de configuración por defecto el log es syslog.

/usr/local/var/jabberd/log

Paquete de Autenticación

Paquete de terceros para usarse en la autenticación de los usuarios

MySQL, PostgreSQL,

Berkeley DB,

OpenLDAP con PAM

Paquete para almacenamiento de Datos

Paquete de terceros para almacenar información de jabberd

MySQL, PostgreSQL o Berkeley DB

Directorio de Datos

Berkeley DB

Directorio para los archivos de Berkeley DB

/usr/local/var/jabberd/db

Usuario y clave para MySQL

MySQL

Usuario y clave MySQL que jabberd usara para conectarse

Usuario: jabberd2

Clave: secreto

Usuario y clave para PostgreSQL

PostgreSQL

Usuario y clave PostgreSQL que jabberd usara para conectarse

Usuario: jabberd2

Clave: secreto

Seteos de Conexión OpenLDAP

OpenLDAP

Seteos de conexión para su servidor OpenLDAP : FQDN del servidor o IP, puerto y versión (v2 o v3)


Usuario y clave OpenLDAP

OpenLDAP

Usuario y clave para conectarse al servidor OpenLDAP. Necesario solamente si el servidor no acepta conexiones anónimas.






Seteos de consulta OpenLDAP

OpenLDAP

ND (Nombre distinguido) Base y atributo ID de usuario usado para construir consultas para el servidor. El ND Base puede ser un el ND raíz del servidor o un NDR (nombre distinguido relativo) bajo el cual se encuentra el ID del usuario


Nombre del Host

Nombre del host donde el servidor jabberd será instalado. Para servidores accesibles desde Internet, este debe ser algo parecido a midominio.com


Ubicación de la Clave SSL

No

Ubicación para el archivo pem OpenSSL, necesario para comunicación encriptada

/usr/local/etc/jabberd/server.pem

Usuario y clave para el Router

No

Usuario y clave para la conexión de componentes con el componente Router de Jabberd

Usuario: jabberd2

Calve: secret


Una vez recabados estos datos, se está en condiciones de comenzar el proceso de instalación del servidor Jabberd.

8.1.1 Instalación de Jabberd2

8.1.1.1 Creación del usuario y del grupo Jabber

Para comenzar, se deberá crear un grupo y un usuario jabber para ejecutar el servidor

su

groupadd jabber

useradd -g jabber jabber




8.1.1.2 Creación de los directorios para PID's y Logs

Luego como superusuario se deberá ejecutar la siguiente secuencia de comandos con el fin de crear es directorio donde jabberd guardará los archivos pid

su

mkdir -p /usr/local/var/jabberd/pid/

chown -R jabber:jabber /usr/local/var/jabberd/pid/


Puede ahora (si lo desea) crear el directorio para los archivos de log (recomendado).

mkdir -p /usr/local/var/jabberd/log/

chown -R jabber:jabber /usr/local/var/jabberd/log


Nota: por defecto jabberd escribe los mensajes de log a syslog. Para que lo haga en directorio recién creado debe explicitarse en los archivos de configuración de los componentes del servidor. Más adelante veremos uno por uno estos archivos.



8.1.2 Instalación de prerequisitos

Para su instalación mas básica, Jabberd 2 tiene 2 prerequisitos:


Opcionalmente se necesitan:


Jabberd 2 puede ser instalado sin estos paquetes; aunque es fuertemente recomendado que se instalen (sobre todo OpenSSL en implantaciones empresariales).

Jabberd 2 requiere paquetes de almacenamiento de datos y para autenticación de los usuarios que a él se conectan ya que no dispone de almacenamiento propio. (esto no es una carencia y es beneficioso en grandes implantaciones. De hecho los demás productos de M.I. que implementan almacenamiento propio de datos, recomiendan que en grandes instalaciones, aproximadamente de más de 50 usuarios, se utilicen paquetes específicos de almacenamiento de datos). Observar que tanto MySQL, PostgreSQL como Berkeley DB cumplen con ambos requerimientos.

La instalación realizada en el marco de este proyecto utiliza MySQL versión Max (puede utilizarse la estándar) para ambos propósitos, pues este gestor es requisito también de otros componentes auxiliares tales como Bandersnatch (log de mensajes) y Users-Agent (Componente JUD – Jabberd User Directory).

Dado los bajos recursos de la PC utilizada, decidimos minimizar al máximo posible el uso de distintos paquetes, optando por aquellos que fueran comunes a varios servicios.



8.1.2.1 Instalación de OpenSSL

OpenSSL provee de encriptación a las comunicaciones cliente-servidor y servidor-servidor. El protocolo XMPP RFC3920 requiere que los servidores Jabberd soporten TLS (Transport Security Layer), TLS está basado en el protocolo SSL 3.0 de Netscape. OpenSSL implementa SSL v2 y v3 y TLS v1.

Se requiere OpenSSL versión 0.9.6b o superior

Se hace hincapié en el cuidado tomado en este paso. Si se debe actualizar OpenSSL, probablemente se tenga que recompilar y reinstalar el software que dependa de OpenSSL, pues de otra manera, podría dejar de funcionar adecuadamente. Por más información, habrá que dirigirse al sitio web de OpenSSL (www.openssl.org).



Básicamente deben seguirse estos pasos:

Bajar el archivo openssl-0.9.nz.tar.gz del sitio OpenSSL, donde "nz" es la última versión estable. El software que contiene el archivo es un paquete de encriptación fuerte por lo tanto deberá chequear el marco legal2 local antes de bajarlo.

Se deberá extraer los archivos fuentes de OpenSSL. Para ello se deberá cambiar de directorio pasando al mismo donde se haya realizado la descarga. Se deberá extraer los archivos ejecutando el siguiente comando

tar -zxvf openssl-0.9.nz.tar.gz

Esto creará un directorio openssl-0.9.nz. Se deberá cambiar de directorio a este último.

cd openssl-0.9.7b

Luego se deberá configurar OpenSSL para el sistema que se esté actualizando

./config --prefix=/usr

Por defecto OpenSSL se instala en /usr/local/openssl. Se usará la opción --prefix=/usr para que las bibliotecas OpenSSL se instalen en el directorio /usr. Se recomienda el uso de esta opción para que OpenSSL este más accesible, no solamente a Jabberd sino a otras aplicaciones también.

Se compilará usando make, pudiéndose testear antes de la instalación con make test.

No debería de haber errores en la salida. Ahora utilizando la cuenta de superusuario se procederá a a instalar usando make install.



8.1.2.2 Instalación de Libidn

Libidn provee funcionalidades de manipulación de strings a Jabberd 2. Anteriormente a Jabberd 2 stable 3, libidn estaba incluida en la distribución del servidor, pero por problemas de licencias debió ser excluida de la misma realizándose actualmente de manera independiente.

La versión mínima requerida es 0.3.0 o superior. Los fuentes y más información pueden obtenerse en www.gnu.org/software/libdn.

Pasos básicos de instalación

./configure --prefix=/usr

su

make install


Ahora resta instalar el paquete de Datos y el Autenticación, en este caso nosotros usamos MySQL MAX y se instalo usando los archivos .rpm provistos por la distribución Mandrake 10.0 CE. Los mismos corresponden a la versión 4.0.1.8-1mdk

La siguiente tabla muestra los distintos paquetes instalados

Nombre

Descripción

libmysql12

Este paquete contiene las bibliotecas compartidas (*.so*) las cuales son necesarias para que ciertos lenguajes y/o aplicaciones las carguen al utilizar MySQL.

libmysql12-devel

Este paquete contiene las bibliotecas y archivos de cabecera para el desarrollo de aplicaciones clientes. Necesarias para la compilación de Jabberd.

MySQL-bench

Contiene los scripts y los datos para benchmark. No es necesaria para la instalación de Jabberd.

MySQL-client

Contiene los clientes estándar de MySQL.

MySQL-common

Archivos comunes del servidor de base de datos MySQL.

MySQL-Max

Puede utilizarse la versión estándar pues no se están utilizando los features adicionales (que básicamente es incluir también el storage Engine de BerkleyDB)



8.1.3 Compilación e Instalación de Jabberd2

Los siguientes pasos intentan ser una descripción paso a paso de la compilación e instalación de Jabberd2 para el caso particular de nuestro proyecto. Información más detallada puede encontrarse en http://www.jabberdoc.org.

Primero de deberá descargar la última versión disponible del servidor jabberd2. El nombre del archivo será de la forma jabberd-2.0sn.tar.gz donde "n" es la última versión estable. Luego se deberá de descomprimir los fuentes a algún directorio (es recomendable en $HOME o en el propio “/home/jabber”) con tar -zxvf jabberd-2.0sn.tar.gz.

Procederemos ahora a la configuración. Primero nos cambiamos al directorio creado durante la descompresión cd jabberd-2.0sn. Se puede obtener información sobre las opciones de configuración realizando ./configure –help.

En nuestro caso usamos OpenSSL, MySQL, Libidn, se habilito la opción de depuración y se instaló en el directorio por defecto /usr/local/bin.

Para ello el comando es

./configure enable-debug --enable-mysql --enable-ssl --enable-idn \

--with extra-include-path=/usr/local/include:/usr/local/include/mysql \

--with-extra-library-path=/usr/local/lib:/usr/local/lib/mysql


Luego de configurado se ejecuta la siguiente secuencia a fin de compilar e instalar

make

su

make install


La ubicación de los archivos por defecto es la siguiente

Archivos de configuración .................... /usr/local/etc/jabberd

Binarios (jabberd, c2s, resolver,

router, s2s, sm) ............................. /usr/local/bin


Una vez instalados debemos establecer como propietario al usuario jabber

chown -R root:jabber /usr/local/etc/jabberd/*

chmod -R 640 /usr/local/etc/jabberd/*

ln -s /usr/local/etc/jabberd/ /etc/jabberd

ln -s /usr/local/etc/jabberd/ /home/jabber/etc


Este último es opcional, pero facilita las tareas de configuración. Se recomienda realizar también un enlace simbólico al directorio de logs previamente creado. Ahora ya tenemos el servidor instalado.



8.1.4 Configuración de MySQL para jabberd

Utilizando el script db-setup.mysql en la distribución de jabberd crearemos la base de datos en el servidor MySQL donde Jabberd guarda la información por él necesitada.

mysql -u root -p

mysql>\. db-setup.mysql


Luego deberemos crear el usuario para que jabberd se conecte al servidor MySQL. Desde la consola MySQL ejecutamos el siguiente comando

GRANT select,insert,delete,update ON jabberd2.*

to jabberd2@localhost IDENTIFIED by 'secret';


Nota: Socket MySQL por defecto. Jabberd 2 estable 3 se conecta al servidor MySQL vía socket en /tmp/mysql.sock. . El socket por defecto, cuando se instala MySQL usando el código fuente, está en /var/lib/mysql/mysql.sock.por lo tanto se deberá crear un enlace simbólico:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock.

Si no está seguro donde puede estar el socket de MySQL revise el archivo de configuración del servidor, usualmente ubicado en

/etc/my.cnf o /etc/mysql/my.cnf.




8.1.5 Configuración del Servidor Jabberd2

Comenzamos por una configuración básica para testear que el servidor levante en forma adecuada. Para ello deberemos editar el contenido de los archivos de configuración de cada componente de jabberd2 según sea necesario.

Comenzaremos por los archivos sm.xml y c2s.xml responsables de la configuración de los componentes Session Manager y Client to Server respectivamente.

El primer paso es el nombre del host en ambos archivos, este formará parte las JID (Jabber ID), por lo tanto deberá ser resoluble por la red. Es decir, si usamos algo del estilo jabber.fing.edu.uy este debe ser resuelto adecuadamente por el DNS.

Nota : se puede usar solamente el nombre del dominio (fing.edu.uy) para las ID de Jabberd2, pero en este caso el servidor DNS debe estar correctamente configurado para resolver las ID al host donde corre el servicio Jabber. Más adelante veremos el agregado de los registros SRV a la DNS.

Nota 2 : en la práctica realizada en el In.Co. logramos autorización para conectar nuestro servidor jabber (jabber.lab-inco.fing.edu.uy) dentro de la subred del laboratorio interno del Instituto. Para poder acceder al mismo dentro de facultad, debemos conectarnos al firewall (tortuga.fing.edu.uy) de dicha subred, en el cual, mediante port-forwarding se redirige la conexión al servidor. Por esta razón, las JID son del estilo tortuga.fing.edu.uy

En el archivo sm.xml deberemos ir a la siguiente sección

<!-- Session manager configuration -->

<sm>

<!-- Our ID on the network. Users will have this as the domain part

of their JID. If you want your server to be accessible from

other Jabber servers, this ID must be resolvable by DNS.s

(default: localhost) -->

<id>tortuga.fing.edu.uy</id>


En el archivo c2s.xml la sección correspondiente es


<!-- Local network configuration -->

<local>

<!-- Who we identify ourselves as. This should correspond to the

ID (host) that the session manager thinks it is. You can

specify more than one to support virtual hosts, as long as you

have additional session manager instances on the network to

handle those hosts. The realm attribute specifies the auth/reg

or SASL authentication realm for the host. If the attribute is

not specified, the realm will be selected by the SASL

mechanism, or will be the same as the ID itself. Be aware that

users are assigned to a realm, not a host, so two hosts in the

same realm will have the same users.

If no realm is specified, it will be set to be the same as the

ID. -->

<!-- <id>somemachine.somedomain.com</id> -->

<id>tortuga.fing.edu.uy</id>


Luego se deberá configurar la sección correspondiente al paquete de almacenamiento de datos y el de autenticación, en ambos casos se trata de MySQL (es la opción a usarse por defecto en ambos).

Comenzaremos con el almacenamiento, el cual se realiza en el sm.xml. Deberemos buscar la sección storage y editarla para que contenga la siguiente información

<!-- Storage database configuration -->

<storage>

<!-- By default, we use the MySQL driver for all storage -->

<driver>mysql</driver>


<!-- 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> <!-- database user for jabberd -->

<pass>secret</pass> <!-- database password for <user> -->

<!-- Transacation support. If this is commented out,

transactions will be disabled. This might make database

accesses faster, but data may be lost if jabberd crashes.

This will need to be disabled if you are using a MySQL

earlier than v3.23.xx, as transaction support did not

appear until this version. -->

<transactions/>

</mysql>

</storage>



Pasamos ahora a la configuración del paquete de autenticación. La misma se realiza en el archivo c2s.xml. La sección correspondiente dentro del archivo contiene más información (configuración completa en el apéndice 8.8.1.1), pero aquí por razones de espacio, dejaremos sólo lo pertinente.

<!-- Authentication/registration database configuration -->

<authreg>

<!-- Backend module to use -->

<module>mysql</module>

...

<!-- 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>

...

</authreg>


Luego de configurado el nombre del host, la aplicación encargada del almacenamiento de datos y la de autenticación, estamos en condiciones para testear el servidor jabberd.

Para ello debemos seguir la siguiente secuencia de comandos

su

su jabber

cd /usr/local/bin

./jabberd


El comando ps debería mostrar algo similar a lo siguiente

[jabber@localhost]$ ps

PID TTY TIME CMD

2674 pts0 00:00:00 bash

2724 pts0 00:00:00 perl

2725 pts0 00:00:00 router

2726 pts0 00:00:00 resolver

2727 pts0 00:00:00 sm

2728 pts0 00:00:00 s2s

2729 pts0 00:00:00 c2s

2730 pts0 00:00:00 ps


La conectividad puede ser testeada mediante algún cliente (GAIM, Gabber) registrando dos cuentas de prueba y estableciendo comunicación entre ellas.

1Nosotros aconsejamos usar un archivo de log distinto de syslog. Esto ayudará en la administración y mantendrá acotado el log del sistema.

2En países como Estados Unidos este tipo de software es considerado un arma y por lo tanto se halla bajo la reglamentación del Departamento de Defensa. El uso de software no habilitado es un delito federal grave. [21]

Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.