Mensajeria Instantánea Segura (Instalación de XMPP + OTR)

7
116

XMPPLo primero de todo es que la mayoría de aplicaciones de móvil o de ordenador que clamen ser “seguras” en el intercambio de mensajes, no lo son.

Para ver el caso de Watsapp, sólo hay que poner en Google “fallo de seguridad en Watsapp” y tenemos para aburrirnos. De hecho, con poner “fallo de seguridad” es suficiente. De Line no he leído que haya sufrido una “gran” vulnerabilidad, pero no me gusta la aplicación, muy pesada y consume muchos datos. Surespot, hasta donde yo sé, es segura, usa un buen cifrado y está correctamente implementado. Pero igual que Line, consume una cantidad absurda de datos, aunque es mucho más liviana. El iMessage podría considerarse seguro en cuanto a que una persona malintencionada no podría, al menos fácilmente, acceder a las conversaciones. Pero Apple sí puede, puesto que la clave secreta pasa por sus servidores. Por lo tanto, de secreta tiene poco o nada.

Siempre que cualquier aplicación de mensajería que se use pase por un servidor centralizado, no autogestionado, que sabe la clave del cifrado que usamos, se puede afirmar que las conversaciones no son privadas ni seguras. Por eso, hoy explicaré como montar un servidor XMPP

Éste un protocolo muy parecido al ICQ o al Windows Messenger, pero libre y MUY documentado. Google lo usaba hasta hace poco, pero anunció que lo abandonaba a favor del protocolo propietario Hangouts. Seguramente lo mejor que ofrece éste protocolo es la descentralización, siendo muy difícil la censura. Los diferentes nodos de esta red pueden conectarse entre si, pudiendo incluso agregar cuentas de Gmail. Además a XMPP, que funciona con SSL, se le puede añadir el cifrado OTR (Off-The-Record). Esta página de la Wikipedia está en Inglés, así que haré un pequeño resumen. OTR es un protocolo criptográfico que usa una combinación de AES, intercambio de llaves Diffie-Hellman y el hash SHA1. Además de autenticación y cifrado, OTR proporciona Perfect Forward Secrecy y denegación de cifrado plausible. Explicar estos conceptos implicaría desviarme demasiado del hilo, intentaré escribir un articulo acerca de esto más adelante. Hay muchos clientes que se puede usar para conectarse a un servidor XMPP, al final del manual explicaré cómo hacerlo.

xmpp-funcionamiento

Los requisitos para esta instalación son: Tener Debian Wheezy instalado, tener No-IP instalado y, opcionalmente, tener una máquina virtual. Y, evidentemente, conexión a Internet.

Sé que puede parecer difícil instalar un servidor con los tan temidos comandos, pero nada más lejos de la realidad. Es asombrosamente sencillo.

Empecemos por el principio. Usaremos el paquete ejabberd, que es multiplataforma, aunque, como en todos los manuales, lo instalaremos en Debian. ejabberd es un acrónimo de Earlang Jabber Demon. Una de las ventajas que ofrece frente a otros paquetes, es que, una vez instalada, se puede administrar de manera gráfica, aparte de ofrecer integración con LDAP, MySQL o PostgreSQL, pero este tema no lo tocaremos.

Instalación

Antes que nada cambiamos al usuario root con el comando siguiente. Tendremos que introducir la contraseña. Un aviso, GNU/Linux no muestra, en terminal, los asteriscos típicos de las contraseñas. Lo deja vacío por si tenemos alguien al lado, que no sepa la longitud de la contraseña.

su

Antes de empezar la instalación como tal, configuraremos una IP estática en el servidor. Por defecto, en la instalación se establece una dirección DHCP, pero esto no nos interesa porque al final tendremos que abrir puertos que apunten a la dirección IP del servidor, y tener que ir cambiándolo no es muy cómodo.

Para establecer una IP estática, modificaremos el archivo /etc/networki/interfaces y lo dejaremos como el siguiente:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo eth0
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
iface eth0 inet static
address 192.168.1.52
netmask 255.255.255.0
gateway 192.168.1.1

Después instalamos ejabberd con el comando:

aptitude install ejabberd

Nos preguntará si estamos seguros, contestamos que si. Y con esto ya tendremos ejabberd instalado. Sencillo, no?

Configuración

Ahora pasaremos a configurarlo. Editaremos el archivo de configuración mediante la terminal. Usaremos el editor nano. Pero antes de hacer eso, haremos una copia de seguridad del archivo de configuración, por si tocamos algo que no debemos. Esto lo haremos mediante el comando cp. /etc/ejabberd/ejabberd.cfg es la dirección del archivo de configuración. La sintaxis del comando es la siguiente:cp [archivo a copiar] [donde se copiará]

cp /etc/ejabberd/ejabberd.cfg /etc/ejabberd/ejabberd.cfg.backup

Como dije, usamos nano para editar el archivo:

nano /etc/ejabberd/ejabberd.cfg

Entonces aparecerá en pantalla el archivo, por el que nos moveremos con las flechas de dirección. Buscaremos, ya sea bajando con las flechas, o con la combinación de teclas ctrl+w, lo siguiente:

%% Admin user
{acl, admin, {user, “”, “localhost”}}.

Ésta parte definirá cual es el o los usuarios administradores. Deberíamos modificarlo para dejarlo así.

{acl, admin, {user, “admin”, “ejemplo.no-ip.org”}}.
{acl, admin, {user, “deploy”, “ejemplo.no-ip.org”}}.

Con estas dos líneas crearemos dos usuarios administradores, “admin” y “deploy”. Donde pone “ejemplo.no-ip.org”, cada uno deberá poner su dirección particular. Justo debajo de esa línea, veremos la siguiente, también a modificar.

{hosts, [“localhost”]}.

Lo modificaremos para dejarlo así.

{hosts, [“ejemplo.no-ip.org”]}.

El siguiente paso es crear la cuenta de usuario admin, o la que hayamos puesto antes. Para hacerlo, antes tenemos que reiniciar el servicio mediante el comando ejabberdctl status. Si todo está bien, nos devolverá este texto.

The node ‘[email protected]’ is started with status: started
ejabberd 2.1.10 is running in that node

Una vez hecho esto, crearemos el usuario administrador mediante el comando para administrar ejabberd, ejabberdctl:

ejabberdctl register admin ejemplo.no-ip.org privacidad ante todo

Donde:

ejabberdctl register <usuario> <dominio> <contraseña>

Una vez hecho esto, ya podemos olvidarnos de los comandos y seguir administrando vía web. Por supuesto, podemos crear los usuarios que queramos mediante el comando anterior.

Ahora sólo queda crear un par de usuarios por interfaz gráfica y casi daremos por terminado este tutorial.

Para hacerlo, sólo tenemos que poner en el navegador la IP de nuestro servidor y el puerto, 5280. Como por ejemplo:

192.168.1.52:5280

Y entonces deberíamos ver una interfaz, después de meter la contraseña del usuario admin, como la siguiente.

xmpp

Desde aquí podremos administrar usuarios y estadísticas cómodamente. Para crear un usuario, vamos a Virtual Hosts o Dominios Virtuales, escogemos nuestro nodo y en el desplegable que se abre, Users. Y ahí podemos crear los usuarios que queramos.

Comandos útiles:

ejabberdctl unregister usuario
ejabberdctl registered-users

Donde el primer comando sirve para borrar un usuario, y el segundo sirve para ver qué usuarios hay registrados en nuestro nodo.

Ya podemos considerar que el servidor está configurado y en funcionamiento. Felicidades!

Pero aún no hemos terminado del todo. Queda lo más importante, abrir los puertos del router. Por desgracia, aquí no puedo ayudar mucho, puesto que todos los routers tienen configuraciones diferentes. Si no sabéis como hacerlo, consultad la documentación de vuestro router o llamad a Atención al Cliente, seguro que os pueden ayudar. Los puertos a abrir son:

5222: El puerto de STARTTLS, el más importante de todos 5269: El puerto para federar nuestro servidor con los demás, permitiendo la interacción con cualquier servidor de la red XMPP. Si esto no nos interesa, podemos simplemente dejar el puerto del router cerrado.

5280: Éste es opcional, depende de si queremos tener la administración vía web accesible desde fuera de nuestra red.

Ya sólo queda hacer la prueba de fuego: Conectarnos con un cliente. Explicaré cómo usar Pidgin y Xabber, qué son para Debian y Android, respectivamente.

En Pidgin, abriremos el programa y le daremos a Cuentas>Gestionar Cuentas. Nos aparecerá una ventana vacía si no tenemos ninguna cuenta configurada. Le damos a Añadir y nos aparecerá una ventana nueva.

Selección_001

En el Protocol si clicamos aparece un desplegable, en el que debemos escoger XMPP. Debemos llenar los campos que se ven en la foto con la información pertinente a nuestro servidor.

Selección_002

Podemos dejar el recurso en blanco o poner algo que identifique el cliente que estamos usando.

Selección_003Después, cambiamos a la pestaña avanzados, en la que sólo tenemos que poner como pasarela nuestro servidor. No queremos que nuestra información pase por terceros, si podemos evitarlo.

Selección_004Éste último paso es opcional, y sólo aplicable si usamos Tor.

Hecho esto, nos aparecerá un aviso preguntandonos si confiamos en el certificado del servidor. Lo podemos revisar para ver que concuerden los datos, y en cuanto se acepte, estaremos conectados a nuestro servidor. Felicidades!

La misma información se puede usar en Xabber, un cliente para android que permite el cifrado OTR.

Fuentes:

Aclaración: En el segundo parrafo afirmo que Line y Surespot gastan muchos datos. No puedo dar números exactos, sólo la sensación que me dieron al usarlo. Por eso, próximamente, haré pruebas al respecto.

7
Deja una respuesta

avatar
3 Hilos de comentario
4 Respuestas de hilo
0 Seguidores
 
Comentario más reaccionado
El hilo de comentarios más caliente
4 Autores de comentarios
drymerPablo RiusdrymerBitacoras.comomeza Autores de comentarios recientes
  Suscribirse  
Los más recientes Los más antiguos Más votados
Notificarme las
trackback

Información Bitacoras.com

Valora en Bitacoras.com: Lo primero de todo es que la mayoría de aplicaciones de móvil o de ordenador que clamen ser “seguras” en el intercambio de mensajes, no lo son. Para ver el caso de Watsapp, sólo hay que poner en Google “fallo de segu…

omeza
Miembro

Interesante, en mi trabajo anterior usaban OpenFire, tambien es OpenSource http://www.igniterealtime.org/projects/openfire/ y es bastante sencillo de usar.

Saludos,

elzorrolibre
Miembro

Cosas como esta son las que ayudan a la gente a cambiar el mundo.
Mi enhorabuena por el post! 😉