====== Instalar un servidor de XMPP (Jabber) con prosody ====== ===== Introducción ==== A la hora de instalar un servidor del protocolo XMPP (Jabber) para mensajería interna en una red local, muchos eligen jabberd, ejabberd u openfire, pero aunque funcionales, estas aplicaciones pueden llegar a demandar bastantes recursos. Si uno posee una red pequeña o mediana y solo desea un simple servicio de mensajería instantánea, afortunadamente existe una alternativa de servidor liviano llamada [[http://prosody.im|prosody]], que aunque está programado en LUA que es un lenguaje interpretado, según sus desarrolladores funciona muy bien gracias a luajit. Este pequeño tutorial explicará cómo instalar y configurar prosody en Debian stable. ===== Preparativos e instalación ===== Los paquetes de prosody se encuentran en el repositorio de Debian, pero los desarrolladores de este software han preparado un repositorio para Debian y derivadas que contiene paquetes recientes y módulos adicionales, que podemos utilizar de la siguiente manera: echo "deb http://packages.prosody.im/debian stable main" | sudo tee -a /etc/apt/sources.list wget http://prosody.im/files/prosody-debian-packages.key -O- | sudo apt-key add - sudo aptitude update Una vez agregado el repositorio, podemos proceder a instalar prosody (adicionalmente agregando módulos para usar ''sasl'' como mecanismo de autenticación en caso necesario, lo cual permite integrar prosody con ''pam'', LDAP, etc). sudo aptitude install sasl2-bin libsasl2-modules-ldap prosody-0.9 liblua5.1-{sec0,cyrussasl0,event-prosody0} Procedemos entonces a generar certificados autofirmados para nuestro dominio: cd /etc/prosody/certs sudo openssl req -new -x509 -days 1095 -nodes -out "midominio.cu.cert" -keyout "midominio.cu.key" El asistente nos preguntará una serie de datos, de los cuales el realmente imprescindible es "Common Name (e.g. server FQDN or YOUR name)" donde tenemos que poner nuestro dominio, como mismo lo utilizaremos en la sección //VirtualHost// del archivo de configuración. Adicionalmente, si en el servidor donde instalamos prosody tenemos configurado ''iptables'' con políticas de denegación por defecto, ((''sudo iptables -P INPUT DROP'')) necesitamos abrir los puertos requeridos para nuestra red, por ejemplo: sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp -m tcp -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -i eth1 -s 192.168.0.0/24 -p tcp -m tcp -m multiport --dports 5222,5223,5269 -m state --state NEW -j ACCEPT ===== Configuración ===== A continuación, procedemos a modificar algunas líneas del archivo de configuración, para lo cual debemos editar ''/etc/prosody/prosody.cfg.lua'' de modo que quede aproximadamente así: ports = { 5222, 5269 } ssl_ports = { 5223 } admins = { "juan@midominio.cu", "pedro@midominio.cu" } use_libevent = true; -- la opción predeterminada se basa en la función select(), -- en cambio libevent utiliza epoll(), que es más eficiente y escalable. modules_enabled = { "roster"; "saslauth"; "tls"; "dialback"; "disco"; "private"; "vcard"; "privacy"; "compression"; "legacyauth"; "version"; "uptime"; "time"; "ping"; "pep"; "register"; -- no deshabilitar este módulo, permite no solo registrar sino también cambiar contraseñas "adhoc"; "admin_adhoc"; "posix"; "bosh"; -- agregar esta línea si se desea habilitar jabber sobre http }; allow_registration = false; -- deshabilitado por seguridad -- cambiar a true si se desea habilitar la creación de cuentas desde el propio cliente ssl = { key = "/etc/prosody/certs/localhost.key"; certificate = "/etc/prosody/certs/localhost.cert"; } storage = "internal"; -- el almacenamiento predeterminado es un archivo xml -- opcionalmente podemos utilizar el método de almacenamiento "sql" -- esto permite utilizar SQLite, MySQL o PostgreSQL como backend (aunque deben agregarse ciertos parámetros) authentication = "internal_hashed"; -- podemos utilizar "internal_plain" si el cliente no soporta SCRAM-SHA-1 -- si deseamos usar el método sasl para posteriormente emplear LDAP, debemos utilizar "cyrus" log = { error = "/var/log/prosody/prosody.err"; info = "/var/log/prosody/prosody.log"; } pidfile = "/var/run/prosody/prosody.pid"; VirtualHost "localhost" VirtualHost "midominio.cu" ssl = { key = "/etc/prosody/certs/midominio.cu.key"; certificate = "/etc/prosody/certs/midominio.cu.cert"; } Una vez modificado el archivo de configuración, reiniciarmos el servicio: sudo service prosody restart ===== Creación de cuentas ===== Ahora procederemos a crear las cuentas. En este caso, como en el archivo de configuración deshabilitamos el registro desde los clientes, habrá que crear las cuentas manualmente en el servidor. El método de autenticación que elegimos en la configuración (internal_hashed) hace que las contraseñas no se guardan en claro sino con el mecanismo ''SCRAM-SHA-1''. Si el cliente de mensajería que pretendemos utilizar no soporta este mecanismo, podría utilizarse el método "internal_plain" en la configuración. Primeramente crearemos las cuentas de los administradores del servicio que declaramos en la configuración (declararlas no implica que se creen automáticamente): sudo prosodyctl adduser juan@midominio.cu sudo prosodyctl adduser pedro@midominio.cu Podemos utilizar el mismo comando para cualquier otra cuenta que deseemos crear. Finalmente, comprobamos que el servicio está corriendo: sudo prosodyctl status Deberíamos obtener un mensaje como el siguiente: Prosody is running with PID 1310 ===== Configuración del cliente ===== La configuración depende de cada cliente, pero en general los detalles son simples. Por ejemplo, para Pidgin: ^ Pestaña "Básica" ^^ Pestaña "Avanzadas" ^^ | Nombre del usuario: | juan | Seguridad de la conexión: | Utilizar cifrado si es posible | | Dominio: | midominio.cu | Puerto de conexión: | 5222 | | Recurso: | pc-juan | Conectar con el servidor: | miservidor.midominio.cu | ===== Notas ===== Puede encontrarse más información (incluyendo el uso de Cyrus SASL con LDAP y cómo crear entradas de DNS) en [[http://wiki.debian.org/InstallingProsody|este artículo]] de la Wiki de Debian. Un usuario comenta via DesdeLinux que para detener realmente el servicio ha necesitado ejecutar ''pkill lua5.1'' ===== Atribuciones ===== * **Autor:** Hugo Florentino