miércoles, 28 de octubre de 2009

Jabber Howto Server .

Este documento lo escribi alla por el 2002 . Hace ya bastantes años , estoy mas que seguro que a dia de hoy montar un servidor con jabber sera mas sencillo , pero me apetecia publicar el documento ya que en su momento por distintos motivos personales no se si llegue a hacerlo publico o no . Es un texto tecnico sobre linux bastante avanzado , asi que para algunos preparaos para un buen tocho . El formato origital del mismo era latex asi que el paso a txt para colocarlo aqui no ha salido todo lo bien que hubiere querido . Si alguien lo quiere en pdf solo tiene que pedirlo al mail del final del documento.





Jabber Howto
Luis Toro Teijeiro.
11 Febrero 2002.
1. Introducción.
Que es jabber se preguntaran muchos, pues jabber es un servidor de mensajer
ía . Aunque por sus características yo le llamaría mas bien EL servidor
de mensajería .Tiene una de las grandes ventajas de que puede funcionar como
pasarela para los principales servicios de mensajería instantánea que hay
funcionando por Internet como son yahoo,msn,aol,icq . Lo que además de sus
prestaciones avanzadas y el hecho de que hay una implementación totalmente
GPL del mismo hace de este tipo de servicios algo especial es que es totalmente
independiente de la plataforma o del sistema operativo que vaya a usar el cliente.
Y ahora que mencionamos al cliente comentar que aunque este es un servicio
basado en servidor-cliente yo me voy a centrar en la instalación,conguración
y uso del servidor de jabber ya que como comentaba clientes hay muchos y
variados y son todos muy sencillos de usar.
2. Instalación.
Para comenzar la instalación tendremos que tener claro una cosa que tipo
de uso le vamos a dar al servidor .Hay dos tipos de usos el privado en una red
de una empresa de manera que el servidor no tenga acceso a Internet y se use
para la mensajería interna de la empresa o el externo como servidor publico de
Internet con lo que ello conlleva de abrir determinados puertos , de tener un
servicio mas , de que ese servicio pueda ser explotable etc , etc .
Y una vez tomadas esas consideraciones también tenemos que tener en cuenta
otras como son que pasarelas vamos a necesitar, que servicios añadidos vamos a
necesitar ( listas de usuarios , salas de conferencias , ) y por ultimo de que manera
vamos a guardar los datos de los usuarios que se registren en nuestro servidor
( actualmente y hasta donde yo se hay 3 formas , base de datos postgresql ,
LDAP con openldap u derivados y en cheros .xml ) .
Decir además que el formato estándar de guardar los datos es xml .
Para proceder a la instalación bajaremos de http://www.jabber.org los
cheros que necesitemos . En la sección download están.
Evidentemente para poder compilar el servidor y instalarlo necesitamos que
en la maquina haya un compilador instalado y tener los permisos necesarios
1
normalmente acceso a la cuenta de root para poder proceder a realizar la
instalación .
Recomiendo que se compile desde 0 el servidor y no se recurran ni a paquetes
deb ( jabber esta integrado en Debian-sid ) ni en paquetes rpm de RedHat o
derivados ya que cualquier servicio extra que queramos añadirle tendremos que
compilarlo y nos va a pedir las fuentes del jabber ( no he encontrado en ningún
sitio paquetes listos de demás servicios ) .
Pasamos a descomprimir el chero que hemos bajado jabber-1.4.2.tar.gz (
en el momento de escribir estas lineas este es el ultimo estable )
Nos movemos al directorio donde queramos que el jabber quede instalado
normalmente /usr/local/ y una vez allí lo descomprimimos con ....
tar zxf jabber-1.4.2.tar.gz ; cd jabber-1.4.2
Conguramos ,compilamos y queda instalado si todo ha ido bien.....
./configure ; make
Si hubiera un error chequearíamos el proceso para ver en que parte nos equivocamos
o donde fallo. Esta parte no debería darnos ningún problema.
Si quisiéramos instalarlo en otra localización tendríamos que crear un directorio
jabber para las librerías y copiarlas una a una ( al menos en esta versión
o mover el directorio de la compilación al lugar que deseásemos. ) .
Para los impacientes decirles que lo normal es que modicasen el chero
jabber.xml que es donde se encuentra la conguración y que
lanzasen el demonio con ...
/path/a/donde/instale/jabber/jabberd -h nombre.del.servidor
La opción -D especica el modo debug el cual nos sera muy útil si tuviésemos
problemas en algún momento de las conguraciones mas avanzadas.
Yo no arrancaría dicho demonio bajo el usuario root.Normalmente crearía un
pequeño chero de arranque y lo arrancaría con un usuario con pocos permisos
evidentemente el User daemon seria el indicado . Un posible ejemplo de
chero seria el siguiente:
#!/bin/bash
DAEMON=/path_a_donde/instale_el_jabber/jabberd
CONF=/path_a_donde/instale_el_jabber/jabber.xml
set -e
case $1 in
start)
echo -n Arrancando jabber
su - daemon DAEMON -c CONF
stop)
echo -n Parando jabber
2
kill 'pidof jabber'
esac
done
Este script es muy sencillo y seguro que usted es capaz de hacerlo mas eciente
basándose el el sistema de arranque de demonios de su Linux , BSD o Unix
favorito.
Existe la posibilidad de obligar a el demonio a leer su conguración de otra
localización invocándolo con el parámetro :
-c /localización/del/jabber.xml
Una vez hecho esto pasaremos a la parte de conguración de los distintos añadidos
y de la propia conguración del servicio que es la parte mas complicada
y enrevesada del mismo.
3. Conguración del servidor.
El chero de conguración de jabber para aquellos que sepan programar en
xml les resultara bastante sencillo de entender pero para aquellos que no tengan
ni idea de xml se les puede atragantar . La idea de este sección es ponérselo mas
fácil a aquellos que empiezan.
El chero de conguración jabber.xml es donde reside toda la ciencia de
este servidor . El que vienen en la distribución o paquete suele venir bastante
completo y traer comentarios Dichos comentarios se marcan de la misma manera
que en html .Los nombres de maquina que se especiquen en
el chero han de ser reales.Es decir deben ser perfectamente resueltos por un
dns.
Dicho chero podemos dividirlo en varias partes :
Los servicios cada uno englobado entre y cada uno
con su correspondiente identidad . El principal es la gestión de sesiones que
es .Dentro de el tenemos a su vez varias áreas por
importancia serian para el nombre del servidor y la zona o
jabber sesión manager dentro de la cual se gestiona como se tratan todos
los mensajes que van llegando al servidor,los mensajes de bienvenida
,la cuenta del administrador , y a su vez dentro de esta la zona
esta ultima es de mucha importancia pues en ella incluiremos
referencias a los servicios añadidos que vayamos montando en un futuro.
Dentro de la zona browse un caso típico de servicio es el de gestión de
usuarios . Se típica el servicio, se identica y se le da un nombre al mismo
así como se llaman a las opciones del mismo . Por ejemplo.
3

jabber:iq:search
jabber:iq:register

El cual llama a el Directory de usuarios de jabber en Internet para la localización
de nuevos usuarios a añadir desde nuestro cliente favorito.
Finalizada la zona comienza la zona donde se cargan los
módulos que el demonio necesita según los ltros que hayamos especicado
en la sección <lter>Normalmente esta parte no se toca a no ser que
seas un gran entendido en el servidor y quieras hilar muy muy no en su
conguración.Ya aquí acaba la parte de la zona .
La siguiente zona es que se encarga de la gestión de los
datos y guardarlos en el sistema de cheros. Mas adelante comentare varios
módulos que permiten que no se guarde en cheros sino en una base
de datos o en una servicio de directorio LDAP. El formato de esta entrada
básicamente se ajusta a cargar el modulo correspondiente desde su
localización y especicar en que directorio se van a guardar los cheros .

./xdb_file/xdb_file.so


/var/lib/jabber

Aquí podemos ver las dos secciones principales de dicho modulo , por un lado
la carga del mismo y por el otro la localización el el sistema de cheros del
directorio donde se guardaran los datos .
La sección es mínima ya que especica cuanto tiempo puede
pasar antes de efectuar la autenticación . Por defecto viene comentada y
yo les recomendaría que pusiesen 15-20 segundos .
15
Conguración cliente-servidor . En este nuevo servicio conguramos el
modulo de gestión de clientes clientes que se encargara de las conexiones
de estos últimos.


./pthsock/pthsock_client.so


4


10
10
1
1
-6
10

o 192.168.0.1
o 192.168.0.1


En este caso vemos como carga el modulo , como gestiona la conexión el ancho de
banda con mas adelante lo explico con mas detalle y como le decimos
en que puerto escuchar o en que puerto y ip escuchar. Si no se especica ip
el demonio escucha en todas las ips que tengamos conguradas en la maquina
.Asimismo también tenemos los puertos con ssl donde también vamos a prestar
servicio.
Gestión de errores o log del demonio . Normalmente va a un chero en
/var/log/jabber/error.log ahora bien podemos especicar una localización
distinta



%d: [ %t] ( %h): %s
/var/log/jabber/error.log


Básicamente indica el formato del error con la hora(%d) el tipo error( %t) el
host( %h) y el contenido del error( %s) .Y el nombre del chero donde se guarda
dicho registro.Es de recordar que la ruta a dicho chero (PATH) debemos especi
carla a nuestro gusto . Normalmente el registra en el directorio donde esta
el propio demonio . Yo preero que lo haga con el resto de los logs .
Gestión de registro de sesiones.


record
%d %h %s
/var/log/jabber/record.log

5
El formato como podemos ver es casi idéntico al anterior salvo en dos puntos
.Aquí no especicamos la salida estándar ya que este registro de
sesiones no envía nada a dicha salida.
Una vez llegados a este punto pasamos a congurar la zona de conexión
entre servidores.Dicha zona usted no la necesita a no ser que vaya a colocar su
maquina como servidor publico en Internet o necesite conectar su maquina de
manera local ( lan - wan ) con otro-s servidores jabber también en local (lan -
wan ) . Por lo tanto podría dejarla tal y como viene en el chero de conguración.
Gestión DNS . Esto es una librería resolutoria externa recursiva . ( Corrija
me alguien si me equivoco.)



./dnsrv/dnsrv.so


s2s
s2s


Como en casos anteriores carga librería y la congura con los valores de servidor
a servidor .
Gestión Servidor a Servidor.


./dialback/dialback.so


192.168.0.1


to='linuxx@host-al-que-me-conecto.XXX'
from='linuxx@jabber.mi-host.XXX'>
//Hola Conectando



50
50
4
1
6
-5
50



En este caso pasamos a ver que el sistema tiene ahora tres partes claramente
denidas . La primera y la tercera son obligatorias.La segunda es para gestionar
a quien yo me quiero conectar pudiendo ser a un solo servidor como en este caso
o a varios .En la primera parte vemos que carga una librería llamada dialback.so
. Este sistema funciona así . El server le notica a el otro extremo que quiere
conectarse y es el otro extremo el que le re llama . (Corrijan me si me equivoco
en este punto ) .
En la sección es donde indico a quien me quiero conectar y opcionalmente
indico también un mensaje a mandar con su from y un to respectivos.
Conguración de otros servicios .Si en la zona de el jsm denimos
algún servicio aquí es donde lo vamos a congurar. Dicha conguraci
ón varía mucho en función de dicho servicio . Y en las siguientes sub
secciones iré explicando el funcionamiento de algunos de los módulos .
Zona . Una vez acabada la conguración de los distintos módulos en
esta zona vamos a congurar los o la gestión de ancho de banda
del servidor.Normalmente esto se puede congurar de manera independiente
para cada servicio dentro de el mismo. Aunque si queremos podemos
poner aquí distintos valores por defecto para el mismo.En el mismo chero
vienen comentados el signicado de los valores.Desde el numero de bytes
que podemos enviar cada segundo sin tener perdida , hasta el tiempo
máximo de perdida ( o retardo ... el conocido lag del irc ) .Dentro de esta
zona también podemos encontrar la conguración de el máximo numero de
conexiones por ip. Así como los servicios ssl
que ajustaran simplemente donde se encuentran nuestras claves y en que ip
escuchar /path/to/cert_and_key.pem.Evidentemente
esto solo funciona cuando el servidor se ha enlazado y compilado con
soporte openssl. Para la creación de claves ssl vea la documentación de
openssl.La siguiente sección dentro de es donde especicaremos las
direcciones que permitiremos o denegaremos conectarse a nuestro server.
La forma es :
127.0.0.0255.255.255.0
22.11.44.0255.255.255.0
Pueden haber tantos como necesitemos y la mascara se puede omitir.Si
no congurásemos ninguno todas las direcciones son permitidas ,además comentar
que si primero aprobamos una dirección y luego la negamos esta quedaría
negada al parsearse la conguración de manera secuencial.
Aquí terminaría la parte .
7
Y el ultimo punto es la localización de el pid de el jabber cuando este esta
ejecutándose.Es muy sencillo.
/path_a_donde_quiera_ponerlo/jabber.pid
Y se acabo. Aquí acaba la conguración básica.Pasaremos ahora a especicar la
conguración de algunos de los módulos extras del servidor.
3.1. Submódulo Jud.
El Jabber User Directory es un servicio básico para que los usuarios se
puedan encontrar unos a otros.Te permite dos cosas por un lado registrar tus
datos contra el servidor y buscar los datos de otras personas .Su conguración
es sencilla . Después de bajar de la pagina de jabber el modulo jud procedemos
a descomprimirlo en el directorio donde compilamos el jabber. Lo compilamos
con un make y ya queda listo para usarlo.
Su conguración se basa en dos partes la primera es el ajuste dentro de
en la sección para que los clientes puedan ver el servicio y
quedaría así ....
jabber:iq:jabber:iq:register

Evidentemente podemos cambiar tanto el jid a el nombre de su maquina así como
el nombre el cual normalmente querrá usted especicar su dominio . Por ejemplo
Gulic User Directory.La segunda parte es la que va en la zona de servidores .
Después de que nalice el servicio .

mi-maquina.org
./jud/jud.so


Local User Directory
This service provides a simple user directory service. http://www.



Tendremos que noticarle al demonio de jabber en caso de que en funcionamiento
el nuevo cambio de conguración recargándolo. Y ahora podemos dirigirnos
con nuestro cliente favorito a probar el nuevo servicio. El cual habrá creado
en el directorio donde especicamos en un nuevo directorio jud donde
guardara los datos de los usuarios que se den de alta.Si tuviéramos algún problema
iríamos a ver los logs o especicaríamos al demonio la opción debug.
8
3.2. Modulo de LDAP .
El modulo que tratamos aquí nos va a gestionar la autenticación contra el
LDAP así como la vCard y el roster (tarjeta de visita , y lista).
Hay un modulo para que la gestión de la autenticación se gestione en un
servicio de directorio . Dicho modulo es ldapauth. SOLO nos va a gestionar
la autenticación.Dicho modulo se explicara en la siguiente sección 3.3 . Para
empezar nos vamos a la pagina de jabber y en la sección de contributed code
. Y procedemos como en el caso anterior lo descomprimimos en el directorio
donde se encuentre el jabber y lo conguramos y compilamos con:
./configure ; make ; make install
con esto ya tenemos el modulo listo....ahora pasamos a la parte jodida como
siempre que es la conguración.
Un ejemplo básico de conguración viene en el chero Readme de el programa.
Aquí de todas formas lo voy a incluir y a comentar.


LDAP-host="192.168.0.1"
ldap-port="30021"
ldap-mgrdn="cn=jabber-write, ou=users, o=cwc"
ldap-mgrpwd="JABBER-write"
ldap-visplist="../config/cwimvisplist.xml"
ldap-user-attribute="imUserName"
ldap-password-attribute="imUserPassword"
ldap-roster-attribute="imUserRoster"
FN="imFriendlyName"
LOCALITY="Locality"
COUNTRY="Country"
STREET="Address"
TEL_WORK="Telephone">
/usr/local/lib/libcwldap.so

jabber:iq:auth
jabber:iq:roster
vcard-temp

Dicha conguración ira después de el y algunos de sus valores son bastante
claros . Los atributos de cada ldap. Luego van los valoren implícitos al
modulo en si como Son la LOCALITY ( localidad ) COUNTRY (país) etc . Una
lista de los valores aceptados esta en el chero Readme del programa y deben
ir escritos en mayúsculas obligatoriamente.
En la zona tenemos la parte mas importante de la conguración de
este modulo pues nos va a permitir elegir que conguración queremos usar.
9
Este modulo puede gestionar 3 Tipos de Valores  la autenticación , la lista de
usuarios que cada uno tiene y su vcard o tarjeta de visita . En la conguración
que he puesto como ejemplo están los 3 nombrados y acotados lo que signica
que se usaran los 3 . Si quisiéramos no usar alguno y que fuera gestionado por
xdb_le en la sección correspondiente pues sencillamente lo quitaríamos de aquí
y se conguraría en
Para grandes servidores también tenemos otra opción a añadir y son las
listas virtuales de servidores ldap o dicho de otra manera que se busque para
cada sub dominio que gestione el isp en un lugar distinto .
Un ejemplo del mismo :


balrogSub dominio_que_gestiono ou=users,ou=balrog,


Siendo la parte la que se repetiría para cada dominio que especicásemos
. El sub dominio puede especicarse tanto como nombre o ip .
3.3. Autenticación ldap.
El modulo ldapauth2 es el que se encarga de la autenticación.Su funcionamiento
básico es realizar una búsqueda en el ldap hasta que encuentra una entrada
que concuerde con los datos que le se le han pasado . Una vez hecho realiza un
bind con ese usuario y el password que se le dio en la conguración del cliente o
desde el xdb_le , si dicho bind falla no se autentica y si es correcto el usuario
queda autenticado.
Además de dicho modulo tenemos también el ldapauth y el ldapauthjab
que hacen lo mismo exactamente que este solo que siguiendo otros métodos de
autenticación . Por ejemplo ldapauthjab hace una autenticación simple. Bajarse
ldapauth2 e instalarlo es algo mas complicado que los anteriores.
Sobre todo instalarlo . Aunque con este peazzorrrr jautuuu seguro que te
lo pongo mas fácil . Para empezar lo descomprimimos en el directorio donde
compilamos el jabber ... dentro de el ... con :
tar zxf ldapauth2.tar.gz
procediendo ahora a editar varios archivos del jabber con nuestro editor favorito
:
Serian ... jabber-1.4.2/jsm/Makele y jabber-1.4.2/jsm/modules/Makele. y
añadiríamos a ellos en la sección jsm_EXOBJECT los siguientes módulos.
mod_auth_ldap_z.o y mod_auth_ldap_digest.o
Es importante jarse en como están enlazados los saltos de linea con \ y
respetarlos . El ultimo modulo no lleva salto de linea . Procedemos a movernos
al directorio principal del jabber con y lo compilamos todo :
10
cd /path_donde_este_jabber/jabber-1.4.2/ ; make allá
La conguración que hay que añadir al jabber.xml seria la siguiente por un lado
en la zona del borrar los módulos: mod_auth_plain , mod_auth_digest
, mod_auth_ok y añadiríamos el modulo del ldap ...un ejemplo ....

varios módulos ......
./jsm/jsm.so ./jsm/jsm.

Esos dos últimos serian los módulos a añadir . El resto de conguración podemos
colocarla donde mejor creamos dentro de por supuesto ....

10.1.1.48
389
ou=members, o=mysite1
sn

Esta conguración es muy sencilla cualquiera que use ldap de manera asidua
sabe que es cada cosa .El ultimó de todos hace referencia al atributo
a buscar para comprobar la contraseña .
3.4. Pasarelas .
Comentare aquí por encima la forma de compilación y conguración básica
de utilidades de las distintas pasarelas disponibles . Voy a centrarme en una sola
de las pasarelas para no agrandar este howto y llevarlo hasta libro .Básicamente
las demás pasarelas se conguran de manera muy similar .
Bajaríamos la pasarela la descomprimiríamos dentro del directorio del jabber
, compilaremos y nos prepararíamos a congurarla.
Los archivos Readme de las pasarelas que yo he instalado vienen con sus
ejemplos de conguración correspondientes . Por ejemplo : .


jabber:iq:gateway
jabber:iq:register
jabber:iq:search


Esta parte iría evidentemente integrada en la zona del .
Luego vendría en la zona de servicios lo siguiente :
11


Please enter your ICQ number (in the "username" field), nickname, and Search for ICQ users

ICQ Transport
This is ICQ Transport
http://foo.bar/

501

2000
3000


./icq-transport/icqtrans.so


Como en la mayoría de servicios primero lo identicamos , luego llamamos a su
conguración , mensaje de bienvenida en el registro , mensaje cuando se busca
un numero de usuario , Tarjeta del servicio , numero PRIMO ( POR conrmar)
identicador de la media de usuarios que vamos a tener ,Rango de
puertos donde el servicio va a escuchar peticiones ... Puede ser mas ajustado .
carga de la librería correspondiente y listo .... a probarlo .
Los servicios de pasarela es bastante recomendado el arrancarlos como servicios
de jabber paralelos . De esa manera ganamos en estabilidad , ya que si se cae
, o falla una pasarela en concreto no nos tira todo el servidor de mensajería . La
manera de arrancar dichos servicios de manera paralela pasa por crear archivos
independientes de conguración para dicha paralela , es decir la conguración
que he realizado justo antes ponerla en un chero icq.xml y modicarle algunas
partes .... quedaría de la siguiente manera :



127.0.0.1
1234
test




Please enter your ICQ number (in the "username" field), nickname, and Search for ICQ users

12
ICQ Transport
This is ICQ Transport
http://foo.bar/




./icq-transport/icqtrans.so



A esto que meteríamos en icq.xml añadiríamos una única referencia en la sección
service del jabber.xml que seria :

icq.mydomain

127.0.0.1
1234
test


Y arrancaríamos el demonio paralelo o con otro script que prepararíamos o a
mano incluyendo la referencia :
-c /path_a_donde/icq.xml
3.5. Comentarios extra.
Además de las distintas pasarelas que hay com son las ya comentadas de yahoo,
msn,etc etc y los servicios aquí explicados hay otro montón de servicios que
se consideran aun en desarrollo pero que algunos de ellos según mi experiencia
me dicen que son perfectamente usarles . Entre ellos podemos citar :
Conference .... para realización de salas de conferencias en el propio servidor.
SMS ....enlace a una pasarela de mensajería sms , si usted no esta en ese
momento se le envía el mensaje vía sms a su móvil .
Xdb_sql .... Guardar y gestionar las autenticaciones y otros servicios en
una base de datos sql ( Postgresql, mysql etc ) . Es independiente de la
DB.
Autojud .... Obligatoriedad de que cada nuevo usuario en el servidor
primero añada sus datos a el servicio de directorio de usuarios.
13
Changejid .... Permitirá a nuestros usuarios poder cambiar su identicador
de usuario .
Ha y en desarrollo aun muy verde una utilidad de pizarra , y otras varias
. Vea para ellos algún buscador de internet .
4. Licencia.
Este howto es propiedad de Luis Toro Teijeiro. También conocido bajo el
nick linuxx en distintas redes de IRC como irc.gulic.org o irc.openprojets.net.
Si quieren contactar con el autor pueden hacerlo en la siguiente dirección
mailto:.Para temas de conguración avanzados de
el servidor así como para cualquier otra tarea de administración de servicios
o maquinas Unix o conferencias y charlas acerca del tema el autor estará
encantado de ayudarle previo acuerdo económico.Este documento se licencia
bajo la FDL una copia de la cual puede encontrarse en la siguiente dirección
http://www.gnu.org/copyleft/fdl.html siempre y cuando se mantenga esta
licencia y las referencias al autor.
Doy especialmente las gracias a mi esposa nacha sin la cual yo no seria nada.
14

2 comentarios:

  1. Me podrás enviar el PDF al mi email?

    micheli.ruben@gmail.com

    Gracias!
    PD: no encontré tu direccion

    ResponderEliminar
  2. Yo también quisiera tu aporte en pdf!(y no encuentro la dirección). A ver si logro montar la mensajería interna con tu aporte!.
    Gracias!
    slafosse@gmail.com

    ResponderEliminar