Configurar autenticación mysql en ejabberd – ejabberd mysql auth


Si tienen un servidor jabber funcionando, es muy probable que tarde o temprano tengan que cambiar el modo de autenticación por mysql.

Para esto debemos tener instalado el Erlang Sql Native Driver, que lo podemos descargar desde aquí Erlang Mysql Driver.

En el Mysql creamos el usuario ejabberd :

$ mysql -h localhost -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.16-max

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> GRANT ALL ON ejabberd.* TO ‘ejabberd’@’localhost’ IDENTIFIED BY ‘password’;
Query OK, 0 rows affected (0.00 sec)

Creamos la base de datos ejabberd :

$ mysql -h localhost -u ejabberd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.1.16-max

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

mysql> CREATE DATABASE ejabberd;
Query OK, 1 row affected (0.00 sec)

Descargamos el schema (puede descargarse desde otros servidores):

$ wget https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/src/odbc/mysql.sql

Importamos el schema en la base ejabberd:

$ mysql -D ejabberd -h localhost -p -u ejabberd < mysql.sql

Chequeamos la estructura de tablas en la base ejabberd:

$ echo “show tables;” | mysql -D ejabberd -h localhost -p -u ejabberd

Tables_in_ejabberd
last
privacy_default_list
privacy_list
privacy_list_data
private_storage
pubsub_item
pubsub_node
pubsub_node_option
pubsub_node_owner
pubsub_state
pubsub_subscription_opt
rostergroups
rosterusers
roster_version
spool
users
vcard
vcard_search

Ahora en el /etc/ejabberd/ejabberd.cfg modificamos la siguiente configuración (si instalaron el ejabberd desde los fuentes, el cfg puede estar en /opt/ejabberd/etc/):

Comentamos la siguiente línea:

{auth_method, internal}.

Agregamos las siguientes líneas:

{auth_method, odbc}.
{odbc_server, {mysql, “localhost”, “ejabberd”, “ejabberd”, “password”}}.

La configuración del mysql tiene el siguiente formato:

{mysql, Server, DB, Username, Password}

Adicionalmente cambiamos la siguiente configuración:

mod_last a mod_last_odbc

mod_offline a mod_offline_odbc (almacena mensajes offline en el mysql)

mod_roster a mod_roster_odbc (almacena lista de contactos en el mysql)

mod_private a mod_private_odbc

mod_privacy a mod_privacy_odbc

mod_pubsub a mod_pubsub_odbc

mod_vcard a mod_vcard_odbc (almacena descripcion de usuarios en mysql)

Restarteamos el ejabberd por las dudas:

# service ejabberd restart

Con esto cambios tendremos al ejabberd autenticando contra una base de datos mysql.

Como el metodo de conexión es por odbc, es posible aplicarlo a otros motores de base de datos como por ejemplo SQL Server.

Si alguien lo probó con SQL Server puede decirme como les fué…

Configurar iJab chat client con ejabberd


Bueno, como esta configuración me dió bastante laburito, acá vamos con los detalles.
Primero vale la pena aclarar que lo que vamos a hacer es instalar el cliente jabber iJab, que es un cliente web que se posiciona en la parte inferior del navegador y se asemeja mucho al cliente de chat web de gmail o de facebook.

Consideremos además que, independientemente del cliente que usemos, debemos instalar un servidor jabber. Yo he instalado el ejabberd sobre CentOS.

El servidor jabber se puede descargar desde aqui: http://www.ejabberd.im/
El cliente web iJab se puede descargar desde aqui: http://code.google.com/p/ijab/

Puertos: en el dominio donde se instale el jabber, debe abrirse los siguientes puertos para que puedan funcionar con el cliente iJab y el jabber: 5222, 5280, 5269.

Respecto de la instalación del servidor jabber, es bastante intuitiva, solo remarcaré los puntos importantes en el archivo de configuración para que el servidor funcione correctamente con este servicio:
En el ejabberd.cfg, asegurarse de que las siguientes secciones están habilitadas y seteadas:

{hosts, [“jabber.example.com”]}.


{listen,
{5280, ejabberd_http, [
                       %%{request_handlers,
                       %% [
                       %%  {[“pub”, “archive”], mod_http_fileserver}
                       %% ]},
                       %%captcha,
                       http_bind,
                       http_poll,
                       web_admin
                      ]}


{modules,
      {mod_http_bind, []},

Teniendo esto configurado, si apunto el navegador a: http://jabber.example.com:5280/http-bind/

Debería tener como respuesta una página con algo así:
ejabberd mod_http_bind
An implementation of XMPP over BOSH (XEP-0206)
This web page is only informative. To use HTTP-Bind you need a Jabber/XMPP client that supports it.

Yendo a la configuración del iJab, vamos a descomprimir el paquete directamente dentro de /var/www/html/ijab.

En dicho directorio, configuramos un .htaccess con el siguiente contenido:
AddDefaultCharset UTF-8
Options +MultiViews

        RewriteEngine On
        RewriteRule http-bind/ http://jabber.example.com:5280/http-bind/ [P]

En el paquete del iJab hay un archivo a configurar: el ijab_config.js
Dentro hay que modificar las siguientes líneas:
        domain:”example.com”,
        http_bind:”http://jabber.example.com/http-bind/&#8221;,
        host:”localhost@jabber.example.com”,
        port:5222,
        server_type:”ejabberd”,

 
Luego, en el /etc/httpd/conf/httpd.conf creamos el siguiente directorio virtual:
VirtualHost *:80>
  ServerName jabber.example.com
  DocumentRoot /var/www/html
 
     Options +Indexes +Multiviews
     AllowOverride all
 
  AddDefaultCharset UTF-8
  RewriteEngine on
  RewriteLogLevel 9
  RewriteRule http-bind/ http://jabber.example.com:5280/http-bind/ [P]
  CustomLog /etc/httpd/logs/http-bind_access.log combined
  ErrorLog /etc/httpd/logs/http-bind_error.log

Restarteamos el apache y listo.
# service httpd restart

Con esta configuración en el apache estamos seteando los archivos de log para poder verificar cualquier problema. En principio, antes de configurar el apache hay que verificar que el http-bind esté funcionando correctamente en la dirección http://jabber.example.com:5280/http-bind/

Si esto no devuelve la respuesta del servidor jabber, hay algo mal configurado en el mismo.