Introducción

Para realizar nuestro servidor de mensajería instantánea, nos haremos servir del protocolo XMPP. Es, en la actualidad, el más conocido y utilizado por compañías como Facebook o Whatsapp. Por suerte para nosotros, es totalmente libre; y tenemos multitud de software gratuito para gestionarlo.

En nuestro caso usaremos Prosody, un servidor de XMPP escrito en Lua y realmente fácil de configurar. ¿Por qué no Openfire? (Otro servidor más popular). Porque esta escrito en Java y porque Prosody es más ligero. Ideal para aquellos no dispongan de muchos recursos.

La guía esta pensado para Archlinux, pero cualquier otro usuario de Debian/Ubuntu podrá hacerlo de la misma manera. Los paquetes y las rutas son los mismos.

Instalación

Empezamos por el propio prosody.

yaourt -S prosody

Luego instalamos las extensiones para comprimir los datos (lo cual ganará en velocidad), encriptación (para que nadie pueda espiar nuestros mensajes) y soporte para SQL (para habilitar que trabaje con la base de datos que más nos guste).

yaourt -S mercurial luasec-hg lua-zlib luadbi

Configuración

Abrimos con nuestro editor de texto (yo usaré Gedit), el archivo de configuración.

sudo gedit /etc/prosody/prosody.cfg.lua

En Lua, se comenta añadiendo dos guiones al principio de la línea.

--Esto esta comentado.

Esto no esta comentado.

Cuando yo me refiera a descomentar , me referiré a quitarle los dos guiones. Los módulos se activan de esta manera, descomentandolos. Tienes varios, pero yo recomiendo activar los siguientes.

--"privacy"; -- Support privacy lists
--"compression"; -- Stream compression
--"groups"; -- Shared roster support
--"announce"; -- Send announcement to all online users
--"welcome"; -- Welcome users who register accounts
--"watchregistrations"; -- Alert admins of registrations
--"motd"; -- Send a message to users when they log in

Quedando asi.

"privacy"; -- Support privacy lists
"compression"; -- Stream compression
"groups"; -- Shared roster support
"announce"; -- Send announcement to all online users
"welcome"; -- Welcome users who register accounts
"watchregistrations"; -- Alert admins of registrations
"motd"; -- Send a message to users when they log in

Activa los que necesites.

Por defecto no se da el privilegio de  que la gente haga sus propias cuentas, sino que el administrador tendrá que crearla una por una. Si quieres cambiar esto y dejar que cualquier usuario pueda hacerse una propia, tendrás que poner esta línea a true.

allow_registration = true;

Nuestro siguiente paso esta en las siguientes líneas

VirtualHost "example.com"
enabled = false -- Remove this line to enable this host

Cambiamos "example.com" por nuestro dominio. Si no disponeis de uno, tal vez porque lo estáis instalando en un ordenador viejo que tenéis por casa tirado en una mal oliente y oscura esquina, deberéis obtener una Ip estática (llamando a vuestro provedor de internet) o un dominio que apunte a vuestra casa (no-ip.com es gratuito). Y además, borraremos la segunda líne (enabled = false -- Remove this line to enable this host). Suponindo que mi dominio fuera chat.myhttp.com, quedaría una cosa parecida a esto.

VirtualHost "chat.myhttp.com"

Guardamos y cerramos el editor de texto.

Encriptación (Opcional)

Tal como lo tenemos ahora, podría funcionar sin problemas. Pero antes vamos a encriptar nuestros mensajes. Un paso, desde mi punto de vista, crucial.

Nos vamos a Cert, dentro de Prosody, y ejecutamos lo siguiente.

cd /etc/prosody/certs/
sudo openssl req -new -x509 -days 365 -nodes -out prosody.cert -keyout prosody.key

Nos hará una serie de preguntas, donde nos pedirá datos. Podéis ignorarlas pulsando intro como si el mundo no tuviera fin, o contestarlas. No son muy relevantes. Salvo esta:

Common Name (e.g. server FQDN or YOUR name) []:

Es muy importante, que aquí pongáis vuestro dominio. El mismo que pusimos en VirtualHost.

Common Name (e.g. server FQDN or YOUR name) []:chat.myhttp.com

Intro, intro... hasta que termine. Observarás que te ha creado dos archivos en el directorio: prosody.cert y prosody.key.
Abrimos de nuevo nuestro archivo de configuración.

sudo gedit /etc/prosody/prosody.cfg.lua

Editaremos las rutas ssl.

ssl = {
key = "/etc/prosody/certs/prosody.key";
certificate = "/etc/prosody/certs/prosody.cert";
}

Y lo mismo debajo de VirtualHost "chat.myhttp.com". Como veis, tendremos que poner lo mismo dos veces.

ssl = {
key = "/etc/prosody/certs/prosody.key";
certificate = "/etc/prosody/certs/prosody.cert";
}

Guardamos y salimos.

Base de datos (Opcional)

Por defecto, almacena todos los datos en un archivo de texto XML. Pero tenemos la posibilidad de utilizar una base de datos. Lo cual es altamente recomendable, sobretodo a la hora de hacer copias de seguridad. Tiene soporte para: MySQLPostgreSQL y SQLite.

Lo complicado no es hacer que trabaje con una, sino elegir una. Las tres son realmente buenas. Después de tirar varias monedas al aire, utilizaré como ejemplo MySQL.

De nuevo, editamos la configuración.

sudo gedit /etc/prosody/prosody.cfg.lua

Descomentamos esta línea (recuerda, quitar los dos guiones del principio).

storage = "sql" -- Default is "internal"

A continuación, descomentamos la base de datos que utilizaremos.

-- For the "sql" backend, you can uncomment *one* of the below to configure:
--sql = { driver = "SQLite3", database = "prosody.sqlite" } -- Default. 'database' is the filename.
sql = { driver = "MySQL", database = "prosody", username = "admin", password = "secret", host = "localhost" }
--sql = { driver = "PostgreSQL", database = "prosody", username = "prosody", password = "secret", host = "localhost" }

Y por último, con tu cliente de MySQL(MyPhpAdmin, por ejemplo), creamos la database que hayamos indicado. En este caso, sería prosody.

Paso final

Ejecutamos y lo activamos para que arranque al inicio.

sudo systemctl start prosody
sudo systemctl enable prosody

Comprobamos que no tenga ningún error.

Ahora abrimos dos puertos: 5222 y 5223.

Y ya hemos terminado. Para conectarnos podremos usar Pidgin o cualquier otro cliente compatible con el protocolo XMPP o Jabber.
Cuando nos conectemos por primera vez, habrá que dejar seleccionada la opción de crear una nueva cuenta en el servidor. Y en el caso que no hayas dejado posibilidad de crear cuentas por parte de los usuarios, tendrás que utilizar el siguiente comando.

sudo prosodyctl adduser elNombreQueQuieras@tuDominio

Ejemplo:

sudo prosodyctl adduser manolo@chat.myhttp.com

Espero que os sea útil. Ya no dependeréis de ninguna grande compañía y vuestros mensajes serán realmente privados.