Mensajería instantánea o
IM (
Instant Messaging) es una forma de comunicación entre dos o más equipos en tiempo real. Para ello ambos tienen que estar conectados a una red con un servidor IM disponible, ya sea Internet o una red local.
Antes de que el servicio de mensajería instantánea se extienda a las plataformas móviles, se utilizaba ampliamente en los equipos de escritorio (entre ellos los famosos MSN Messenger, ICQ, Jabber, GTalk). Y aunque hoy en día, por la invasión de los
teléfonos inteligentes, no sea muy habitual el uso de ese servicio desde los PCs, en ocasiones puede resultar muy cómodo y útil.
Para que esto funcione, se desarrollon multitud de protocolos diferentes: XMPP, OSCAR, IRC, Mumble, Skype, etc. La mayoría de ellos son privados y sólo los pueden implementar sus propietarios, pero otros no lo son y pueden ser implementados libremente por cualquiera.
1. Openfire
Es un servidor de IM, basado en el protocolo XMPP (
Extensible Messaging and Presence Protocol) , escrito en Java y distribuido bajo la licencia Apache 2.0. Destaca por la administración via web, uso de
TLS y la conectividad con diferentes bases de datos.
Se puede descargar desde la Página oficial
1.1. Instalación
Voy a realizar la instalación de este servidor en una máquina virtual con
Windows Server 2008 R2. Ejecutamos el instalador y elegimos el idioma:
Tras estudiarlos detenidamente,
aceptamos los términos de licencia:
Si es necesario, cambiamos el
directorio de instalación (lo mantendré por defecto):
También elegimos si queremos crear
accesos directos en el menú de inicio:
Finalmente, tras la extracción de archivos del servidor, indicamos si queremos ejecutar
Openfire:
1.2. Configuración
Cuando se ejecute
Openfire, veremos una ventana como esta. Esperamos a que se inicie el servidor y pulsamos
Launch Admin para realizar una configuración básica:
Se abrirá un
panel de configuración desde nuestro navegador predeterminado, mediante el puerto 9090. Elegimos el idioma del proceso de configuración:
En la siguiente ventana debemos introducir nuestro
dominio (en caso de que tengamos uno), si no, mantenemos el campo, que cogerá el nombre de la máquina por defecto. Si es necesario, cambiamos también los puertos de administración:
Especificamos la
forma de conectarse a la base de datos Openfire. La 2ª opción es más sencilla y adecuada para un entorno de pruebas:
Almacenaremos las cuentas de usuarios en una base de datos interna de Openfire, eligiendo la opción por defecto:
Introducimos las
credenciales del administrador para acceder al panel de control más adelante. Importante acordarse de ellos:
Configuración finalizada :)
1.3. Creación de usuarios
Una vez realizada la configuración inicial, se abrirá la
consola de administración:
Introducimos las credenciales del administrador (especificados anteriormente):
Desde aquí se pueden cambiar las configuraciones del servidor, ver logs y otras informaciones útiles:
Desde la pestaña
Usuarios/Grupos vamos a crear 2 usuarios nuevos, que se van a guardar en la base de datos de Openfire:
Rellenamos al menos los campos obligatorios y marcamos la casilla de administrador, si le queremos asignar ese privilegio:
1.4. Pruebas con Spark
Spark es un cliente gratuito para los servidores
IM basados en el protocolo
XMPP. Lo voy a instalar en el propio servidor y en otra máquina virtual con Windows 7, para simular un entorno real.
La instalación del cliente no tiene ninguna complicación:
Desde la máquina del servidor, voy a loguearme con el usuario
pepito (especificando login, contraseña y la @IP del servidor):
Logueo correcto:
Lo mismo desde la otra máquina, pero con la cuenta raulito:
Nos aparecerá un
error de inicio de sesión. Para solucionarlo tendremos que desactivar el cortafuegos de Windows o, bien, añadir una excepción al mismo.
Vamos al
Panel de control -> Sistema y seguridad. Y desactivamos el cortafuegos:
Ahora, al conectarse desde el cliente de Windows 7, ya no tenemos ningún problema:
Para que un usuario pueda comunicarse con el otro lo tendrá que añadir a su lista de contactos. Al hacerlo, el otro usuario tendrá que confirmar esa petición.
¡Allá vamos!
Desde
raulito buscamos a
pepito y lo
agregamos como contacto:
Podemos
cambiar el nombre con el que nos aparecerá pepito y también el
grupo al que pertenece. Mantengo las opciones por defecto:
Desde la cuenta de
pepito (que está en la máquina de Windows Server) vemos la petición que acabamos de realizar. Si no la visualizáis, probad cerrar sesión del usuario y entrar de nuevo:
Si marcamos la casilla, el usuario
pepito agregará también a
raulito a sus contactos y así podrán ver el uno al otro:
Vamos a enviar algunos mensajes de uno al otro para comprobar que la conectividad sea la correcta:
Si clicamos en el candado,
se va a cifrar la conexión. Por lo que, si a partir de ese momento, alguien intercepta algún mensaje, estará cifrado:
Sin embargo, tras realizar una prueba con
Wireshark, parece que la conexión se cifra desde el principio independientemente de que lo especifiquemos o no.
Cuando nos logueamos en el servidor
se establece una conexión XMPP:
Y enseguida se realiza en
intercambio de claves para cifrar la conexión, el cual es iniciado por el cliente mediante la petición
Client Key Exchange:
2. Prosody
Prosody (o también
lxmppd) es un servidor XMPP multiplataforma escrito en Lua. Tiene por objetivos un bajo consumo de recursos, facilidad de uso y extensibilidad.
Voy a realizar la instalación y la configuración de este servidor en
Ubuntu Server 14.04, desde el modo texto.
2.1. Instalación
Aunque en la página oficial se dice que prosody es disponible desde repositorios oficiales de Ubuntu, no lo he conseguido localizar desde allí.
Vamos a
añadir el repositorio oficial del desarrollador. Con ello también nos aseguraremos de tener la versión más nueva del servidor.
Abrimos el fichero
/etc/apt/sources.list y añadimos la última línea:
Además, tendremos que añadir la clave del desarrollador, si no, no se permitirá su instalación en el sistema. Para ello ejecutamos
wget https://prosody.im/files/prosody-debian-packages.key -O- | apt-get key add -
Ahora ya podemos
instalar el servidor mediante el
apt-get install prosody, por ejemplo. Si no nos localiza el paquete, efectuamos un
apt-get update para actualizar nuestros repositorios. Junto con el servidor se instalarán diferentes dependencias (librerías del lenguaje Lua, en su mayoría):
2.2. Configuración
Vamos a securizar el transporte de los paquetes entre nuestro servidor y los cliente mediante el protocolo
SSL, por ello, antes de meterse en el fichero de configuración, vamos a generar una clave.
Con el siguiente comando generamos un
parametro DH (
dhparam), que hará el intercambio de claves entre el cliente y servidor más rápido:
El fichero de configuración principal de
Prosody es
/etc/prosody/prosody.cfg.lua y sigue la sintáxis del lenguaje
Lua mencionado anteriormente. En ese lenguaje una línea se comenta poniendo doble guíon (--) delante:
La variable
admins, indica los
JID (
nombre_de_usuario@dominio) de los administradores. Especificamos nuestra cuenta de administrador:
Hay muchas más características para configurar. Sin embargo, las mantendré tal y como están. Si quisieramos activar una de ellas (por ejemplo "
admin_telnet" que viene desactivada por defecto), bastaría con quitar "--" de la línea. Para desactivar, pondríamos "--" en esa línea, respectivamente:
En la
configuración SSL, especificamos la versión del protocolo en la variable
protocol y la ubicación del
dhparam generado antes:
El parametro
authentication establece cómo se van a guardar las contraseñas de los usuarios de nuestro servidor. Por defecto las guarda en texto plano (
"internal_plain"). Lo mantenemos así para una mejor compatibilidad con diferentes clientes. Si quisieramos guardarlas cifradas (en
hash), bastaría con cambiar el valor del parametro a
"internal_hash":
Cada
virtual host representará el dominio al que reparta servicio nuestro servidor. Nuestro dominio se llama
andrii.org:
Tras realizar las configuraciones reiniciamos el demonio mediante
prosodyctl restart.
Nota: aparecerá un error (más bien advertencia), indicando que la versión actual de LuaExpat (una de las dependencias instaladas con el servidor) está en una versión vulnerable.
Para crear usuarios utilizamos el comando
prosodyctl adduser, indicando el nombre de usuario con su dominio. Creamos al usuario
admin@andrii.org:
Las contraseñas serán almacenadas en texto plano y lo podemos comprobar visualizando el fichero
/var/lib/prosody/NOMBRE_DOMINIO/accounts/NOMBRE_USUARIO.dat:
De la misma forma que antes, creamos el usuario
user@andrii.org:
Para simular un servidor DNS, resolvemos andrii.org a nuestra propia máquina, escibiéndolo de la siguiente manera en el fichero
/etc/hosts:
2.2. Pruebas (Pidgin y Spark)
Vamos a realizar las pruebas de este servidor, voy a configurar las
@IP de las máquinas en el rango
172.30.0.0/16 (fichero
/etc/network/interfaces para configurarlo desde modo texto):
Reiniciamos la interfaz para aplicar los cambios, y con un
ifconfig comprobamos que la dirección sea la correcta:
Voy a emplear otra máquina con
Windows 7 y una con
Debian 8 (ambos con
Pidgin) para simular probar el servicio con diferentes clientes. Nos aseguramos de que esas máquinas también tengan un direccionamiento IP correcto:
Si no tenemos un servidor DNS que lo haga, no olvidamos resolver el nombre de nuestro dominio a la
@IP del servidor. En Windows el fichero a editar es
C:\Windows\system32\drivers\etc\hosts:
En la máquina
Debian 8 se haría de igual forma que en
Ubuntu Server.
Instalando y configurando Pidgin
Pidgin es un cliente IM multiplataforma, multiprotocolo y además gratuito.
Página oficial
En el proceso de la instalación, tras aceptar los terminos de licencia e indicar la ruta, no olvidamos marcar
xmpp: en la lista de componentes a instalar:
Esperamos a que el proceso finalice:
En el primer inicio del programa se nos ofrecerá añadir una cuenta nueva, pulsando
Añadir:
En la siguiente ventana tenemos que elegir el protocolo (XMPP), nombre de usuario y contraseña, además de nuestro dominio. En la máquina Windows 7
me logueo con el usuario
admin:
En la pestaña
Avanzadas, elegimos la opción
utilizar cifrado si es posible:
En Debian 8,
Pidgin ya viene preinstalado en el sistema. Además, su configuración idéntica a la que acabamos de realizar. En esta máquina me loguearé con
user:
Desde el menú del usuario, voy añadir a
admin a la lista de contactos de nuestro usuario:
Rellenamos el nombre de usuario completo al que queramos añadir (
admin@andrii.org), su apodo y el grupo al que va a pertenecer. No olvidamos de elegir la cuenta desde la que realizaremos la petición (
user@andrii.org):
En la otra máquina nos aparecerá una petición de amistad de
admin@andrii.org:
Lo autorizamos y además y también lo añadimos a la lista de contactos de
user@andrii.org:
También tendremos que aceptar la autorización desde el otro lado:
Para finalizar, una prueba de comunicación, enviando algunos mensajes de un usuario a otro. Con ello nos aseguramos de que el destinatario los recibe:
Prueba con Spark
Ahora, desde la máquina Windows, mediante
Spark, me loguearé con la misma cuenta (
admin@andrii.org), simplemente para comprobar que este cliente también funciona con
Prosody:
Puedemos visualizar que ya tenemos un usuario añadido en nuestra lista de contactos (
user@andrii.org, al que agregamos en la prueba anterior). Vamos a ver si recibe un mensaje de prueba:
3. Ejabberd en Windows
Es un servidor IM multiplataforma de código abierto. Está escrito principalmente en Erlang. Y al igual que todos los servidores IM que hemos visto, hace uso del protocolo XMPP.
Página oficial
3.1. Instalación
Voy a instalar este servidor sobre una máquina con
Windows 7 Ultimate.
El proceso de instalación es el típico. Aceptamos los términos e indicamos el directorio de instalación:
Indicamos nuestro
dominio (uno diferente al utilizado en la instalación de
Openfire, para evitar conflictos):
Introducimos las
credenciales del administrador de nuestro servidor:
Y esperamos a que se realice el proceso de la instalación:
3.2. Iniciamos y creamos usuarios
Desde el enlace creado en el escritorio tras la instalación, iniciamos el servidor:
Se nos redirigirá a una página web local, que contendrá el enlace al
panel de control de nuestro servidor:
Para acceder a él vamos a introducir las
credenciales del administrador de
ejabberd:
No he encontrado la opción para crear usuarios nuevos desde el panel de control, pero se puede hacer mediante la línea de comandos. Nos tenemos que situar en la carpeta bin del directorio del servidor (en mi caso
cd C:\Program Files\ejabberd-16.01\bin). Una vez allí, utilizamos el comando
ejabberctl, indicando el nombre del usuario, el dominio y la contraseña (por ejemplo
ejabberctl register andrii asir2.com password). Voy a crear 2 usuarios -
andrii y
pepe:
Tanto en el lado del servidor, como en el del cliente
asir2.com se debe resolver a la
@IP de nuestro servidor. Para ello podemos implementar un servidor DNS, o añadir el registro manualmente al fichero hosts, como hicimos en las pruebas anteriores.
Lo podemos comprobar con un ping:
Desde otra máquina con Windows 7 me voy a loguear con el usuario
andrii, utilizando el cliente
Spark:
En
Ubuntu 14.04 voy a emplear el cliente
Psi que viene preinstalado en la distribución. Al iniciarlo por primera vez, indicaremos los detalles necesarios de la cuenta (
pepe):
Al conectarnos, nos aparecerá un mensaje de aviso, al utilizarse un certificado autofirmado en el servidor:
Y ya estaríamos en la interfaz del programa:
Desde la cuenta
andrii, cuya sesión está iniciada en
Spark, voy a agregar a
pepe:
Desde el otro lado, veríamos un contacto nuevo en nuestra lista, cuya petición vamos a aceptar:
En el lado de
andrii nos preguntará si queremos que nos agreguen a la lista de contactos. De nuevo lo aceptamos:
Para finalizar, una prueba de comunicación entre los 2 clientes conectados a nuestro servidor
ejabberd: