{"id":1831,"date":"2016-09-20T08:11:29","date_gmt":"2016-09-20T08:11:29","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=1831"},"modified":"2016-09-20T08:11:33","modified_gmt":"2016-09-20T08:11:33","slug":"servidor-jabberxmpp-con-ldap-y-certificados-lets-encrypt","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/09\/20\/servidor-jabberxmpp-con-ldap-y-certificados-lets-encrypt\/","title":{"rendered":"Servidor Jabber\/XMPP con LDAP y certificados Let&#8217;s Encrypt"},"content":{"rendered":"<p>Ya he tenido que hacerlo en tres instalaciones: una en mi lugar de trabajo, otra en mis servidores personales y otra en los de una amiga.<\/p>\n<p><!--more--><\/p>\n<p>En todos los casos pretendo conseguir lo siguiente:<\/p>\n<ol>\n<li>Cuentas XMPP para todos los usuarios del dominio.<\/li>\n<li>Conexiones seguras entre el servidor, los clientes y otros servidores.<\/li>\n<li>Conservaci\u00f3n de datos (conversaciones, datos de usuario, &#8230;) en un servidor SQL.<\/li>\n<\/ol>\n<p>Antes de proceder nos aseguramos de tener funcionando estos servicios:<\/p>\n<ol>\n<li>Servidor LDAP con un \u00e1rbol de entradas para los usuarios.<\/li>\n<li>Servidor SQL donde podamos crear una cuenta y una base de datos.<\/li>\n<li>Certificados digitales para el dominio instalados y activos.<\/li>\n<\/ol>\n<p>Y, dado que estamos en Debian, versi\u00f3n Jessie en el momento de escribir \u00e9sto, podemos emplear la versi\u00f3n de <em>prosody<\/em> de sus repositorios. As\u00ed pues, s\u00f3lo necesitamos realizar lo siguiente:<\/p>\n<ol>\n<li>Instalar el paquete <em>prosody<\/em>.<\/li>\n<li>Instalar el complemento <a href=\"http:\/\/modules.prosody.im\/mod_auth_ldap.html\">mod_auth_ldap<\/a>:\n<ol>\n<li>Crear un directorio especial para modulos locales <code>\/usr\/local\/lib\/prosody\/modules<\/code> donde situar el archivo <em>.lua<\/em> correspondiente.<\/li>\n<li>Indicar a <em>prosody<\/em> que busque all\u00ed otros m\u00f3dulos a\u00f1adiendo <code>plugin_paths = { \"\/usr\/local\/lib\/prosody\/modules\" }<\/code> a su configuraci\u00f3n.<\/li>\n<li>Declarar el m\u00f3dulo <em>auth_ldap<code><\/code><\/em> como activo en la configuraci\u00f3n.<\/li>\n<\/ol>\n<\/li>\n<li>Configurar el servidor para que use lo anterior, entre otros aspectos.<\/li>\n<\/ol>\n<h4>Configuraci\u00f3n<\/h4>\n<p>El archivo principal de configuraci\u00f3n est\u00e1 en <code>\/etc\/prosody<\/code> y se llama <code>prosody.cfg.lua<\/code><code><\/code>. He realizado pocas modificaciones en el mismo; las m\u00e1s importantes son:<\/p>\n<pre class=\"lang:lua decode:true \">-- Identificaci\u00f3n de usuarios v\u00eda LDAP\r\n-- Conexi\u00f3n con servidor local, sin cifrado,\r\n-- e intentando acceso con contrase\u00f1a para validar\r\n-- usuarios en lugar de buscarlos (bind mode)\r\nauthentication = \"ldap\"\r\nanonymous_login = false\r\nldap_base       = \"ou=users,dc=empresa,dc=net\"\r\nldap_server     = \"localhost\"\r\nldap_filter     = \"(uid=$user)\"\r\nldap_tls        = false\r\nldap_mode       = \"bind\"\r\n\r\n-- Almacenamiento en servidor MySQL, conexi\u00f3n\r\n-- local y sin cifrado. Necesario el paquete \r\n-- lua-dbi-mysql y lo siguiente, incluyendo la\r\n-- autorizaci\u00f3n para gestionar tablas si no \r\n-- existen\r\nstorage = \"sql\"\r\nsql_manage_tables = true\r\nsql = { driver = \"MySQL\", \r\n        database = \"prosody\", \r\n        username = \"prosody\", \r\n        password = \"XXXXXXXX\", \r\n       host = \"localhost\" }\r\n\r\n-- Definimos el servidor virtual XMPP y los \r\n-- certificados que puede obtener del sistema\r\nVirtualHost \"empresa.net\"\r\n        enabled = true -- Remove this line to enable this host\r\n\r\n        ssl = { \r\n                key = \"\/etc\/letsencrypt.sh\/certs\/empresa.net\/privkey.pem\";\r\n                certificate = \"\/etc\/letsencrypt.sh\/certs\/empresa.net\/fullchain.pem\";\r\n        }\r\n<\/pre>\n<p>Aspectos a tener en cuenta:<\/p>\n<ol>\n<li>Los certificados digitales est\u00e1n creados y mantenidos por programas cliente para el proyecto <a href=\"http:\/\/esferas.org\/msqlu\/2016\/04\/08\/usando-letsencrypt-sh-para-crear-y-renovar-certificados\/\">Let&#8217;s Encrypt<\/a> y s\u00f3lo hay que tener en cuenta dos cosas:\n<ol>\n<li>Es obligatorio que ambos archivos sean accesibles al usuario bajo el que funciona <em>prosody<\/em>. Lo mejor es asignarlos a un grupo concreto y hacer que esa cuenta pertenezca a \u00e9l.<\/li>\n<li>Cada vez que los certificados son renovados es necesario reiniciar el servidor (o que releea su configuraci\u00f3n seg\u00fan versi\u00f3n).<\/li>\n<\/ol>\n<\/li>\n<li>Los servidores LDAP y MySQL est\u00e1n configurados para aceptar conexiones en claro sobre el interfaz local. Si se encuentran en otra m\u00e1quina conviene asegurar la comunicaci\u00f3n con cifrado.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Ya he tenido que hacerlo en tres instalaciones: una en mi lugar de trabajo, otra en mis servidores personales y otra en los de una amiga.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[41,335,554,561,466],"class_list":["post-1831","post","type-post","status-publish","format-standard","hentry","category-software","tag-debian","tag-ldap","tag-lets-encrypt","tag-prosody","tag-xmpp"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=1831"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1831\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=1831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=1831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=1831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}