
Primero que nada este procedimiento lo ejecutaremos en un Debian 10, plenamente actualizado, sirve CT o VM dentro de Proxmox, aunque se recomienda CT. Este tutorial contempla LDAP tanto en sus variantes openLDAP, Samba4 o ADDC de Windows, sólo debe usted ajustar el camino del árbol ldap en el cual se van a hacer las búsquedas de los usuarios.
PCs involucradas:
1- Samba4/ADDC -> 192.168.0.4
2- Jabber -> 192.168.0.6
Entonces, empezamos!
Lo primero que hareos es agregar los records al DNS que necesita jabber para funcionar:
Recordar los records del DNS de jabber como servicio:
1 2 3 4 5 | ;Records del Jabber _jabber._tcp.inutil.cu. IN SRV 5 0 5269 jabber.inutil.cu. _xmpp-server._tcp.inutil.cu. IN SRV 5 0 5269 jabber.inutil.cu. _conference._tcp.inutil.cu. IN SRV 5 0 5269 jabber.inutil.cu. _xmpp-client._tcp.inutil.cu. IN SRV 5 0 5222 jabber.inutil.cu. |
Y necesitamos crear la cuenta de usuario que se conectará al ldap desde el ejabberd, por lo que esto se debe ejecutar[este procedimiento lo tengo implementado contra Samba4]:
1 2 3 4 5 6 7 | samba-tool user create 'ejabberd' 'jabb*123' \ --surname='XMPP Service' \ --given-name='eJabberd' \ --company='INUTIL' \ --description='eJabberd XMPP Service Account' samba-tool user setexpiry ejabberd --noexpiry |
Y crear los records DNS[en caso de que los tengas con el Samba4]:
1 2 3 4 5 6 7 8 | samba-tool dns add localhost inutil.cu jabber A '192.168.0.6' -U 'administrator'%'Admin*123' samba-tool dns add localhost 0.168.192.in-addr.arpa 6 PTR 'jabber.inutil.cu.' -U 'administrator'%'Admin*123' samba-tool dns add localhost inutil.cu conference CNAME 'jabber.inutil.cu' -U 'administrator'%'Admin*123' samba-tool dns add localhost inutil.cu echo CNAME 'jabber.inutil.cu' -U 'administrator'%'Admin*123' samba-tool dns add localhost inutil.cu pubsub CNAME 'jabber.inutil.cu' -U 'administrator'%'Admin*123' samba-tool dns add localhost inutil.cu _jabber._tcp SRV 'jabber.inutil.cu 5269 5 0' -U 'administrator'%'Admin*123' samba-tool dns add localhost inutil.cu _xmpp-client._tcp SRV 'jabber.inutil.cu 5222 5 0' -U 'administrator'%'Admin*123' samba-tool dns add localhost inutil.cu _xmpp-server._tcp SRV 'jabber.inutil.cu 5269 5 0' -U 'administrator'%'Admin*123' |
Instalamos el servicio Ejabberd:
1 | apt install -y ejabberd ejabberd-contrib erlang-eldap |
Hacemos salva de la configuracion original:
1 | mv /etc/ejabberd/ejabberd.pem{,.orig} |
Ahora creamos el certificado[autofirmado] que usará ejabberd:
1 2 3 4 5 6 7 8 9 10 11 12 13 | mkdir -p /etc/ejabberd/cert openssl req -x509 -nodes -days 3650 -sha512 \ -addext "subjectAltName = DNS:jabber.inutil.cu,DNS:conference.inutil.cu,DNS:echo.inutil.cu,DNS:pubsub.inutil.cu,IP:192.168.0.6" \ -newkey rsa:4096 \ -out /tmp/exampleJabber.crt \ -keyout /tmp/exampleJabber.key openssl dhparam -out /etc/ejabberd/cert/dh2048.pem 2048 cat /tmp/{exampleJabber.crt,exampleJabber.key} > /etc/ejabberd/cert/ejabberd.pem chmod 0640 /etc/ejabberd/cert/ejabberd.pem chown root:ejabberd /etc/ejabberd/cert/ejabberd.pem |
Y listo, ahora sólo nos queda revisar/editar/ajustar la configuración general a nuestras necesidades:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | ### ### ejabberd configuration file ### loglevel: 4 log_rotate_count: 0 log_rotate_date: "" hosts: - "inutil.cu" certfiles: - "/etc/ejabberd/cert/ejabberd.pem" define_macro: 'TLS_CIPHERS': "HIGH:!aNULL:!eNULL:!3DES:@STRENGTH" 'TLS_OPTIONS': - "no_sslv3" - "no_tlsv1" - "no_tlsv1_1" - "cipher_server_preference" - "no_compression" 'DH_FILE': "/etc/ejabberd/cert/dh2048.pem" c2s_ciphers: 'TLS_CIPHERS' s2s_ciphers: 'TLS_CIPHERS' c2s_protocol_options: 'TLS_OPTIONS' s2s_protocol_options: 'TLS_OPTIONS' c2s_dhfile: 'DH_FILE' s2s_dhfile: 'DH_FILE' listen: - port: 5222 ip: "0.0.0.0" module: ejabberd_c2s max_stanza_size: 262144 shaper: c2s_shaper access: c2s starttls_required: true protocol_options: 'TLS_OPTIONS' - port: 5223 ip: "0.0.0.0" module: ejabberd_c2s max_stanza_size: 262144 shaper: c2s_shaper access: c2s tls: true protocol_options: 'TLS_OPTIONS' - port: 5269 ip: "0.0.0.0" module: ejabberd_s2s_in max_stanza_size: 524288 - port: 5280 ip: "0.0.0.0" module: ejabberd_http request_handlers: "/api": mod_http_api "/bosh": mod_bosh "/ws": ejabberd_http_ws tls: true protocol_options: 'TLS_OPTIONS' web_admin: true disable_sasl_mechanisms: - "digest-md5" - "X-OAUTH2" s2s_use_starttls: required auth_password_format: scram fqdn: "jabber.inutil.cu" auth_method: ldap ldap_servers: - "addc.inutil.cu" ldap_encrypt: none ldap_port: 389 ldap_password: "jabb*123" ldap_base: "OU=inutil,DC=inutil,DC=cu" ldap_uids: {"sAMAccountName": "%u"} ldap_filter: "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" acl: admin: user: local: user_regexp: "" loopback: ip: - "127.0.0.0/8" access_rules: local: - allow: local c2s: - deny: blocked - allow announce: - allow: admin configure: - allow: admin muc_create: - allow: local pubsub_createnode: - allow: local register: - allow trusted_network: - allow: loopback api_permissions: "console commands": from: - ejabberd_ctl who: all what: "*" "admin access": who: - access: - allow: - acl: loopback - acl: admin - oauth: - scope: "ejabberd:admin" - access: - allow: - acl: loopback - acl: admin what: - "*" - "!stop" - "!start" "public commands": who: - ip: "127.0.0.1/8" what: - "status" - "connected_users_number" shaper: normal: 1000 fast: 50000 shaper_rules: max_user_sessions: 10 max_user_offline_messages: - 5000: admin - 100 c2s_shaper: - none: admin - normal s2s_shaper: fast modules: mod_adhoc: {} mod_admin_extra: {} mod_announce: access: announce mod_blocking: {} mod_bosh: {} mod_caps: {} mod_carboncopy: {} mod_client_state: {} mod_configure: {} mod_disco: {} mod_echo: {} mod_fail2ban: {} mod_http_api: {} mod_last: {} mod_muc: access: - allow access_admin: - allow: admin access_create: muc_create access_persistent: muc_create default_room_options: mam: true mod_muc_admin: {} mod_offline: access_max_user_messages: max_user_offline_messages mod_ping: {} mod_pres_counter: count: 5 interval: 60 mod_privacy: {} mod_private: {} mod_pubsub: access_createnode: pubsub_createnode plugins: - "flat" - "pep" force_node_config: "eu.siacs.conversations.axolotl.*": access_model: open "storage:bookmarks": access_model: whitelist mod_push: {} mod_push_keepalive: {} mod_roster: versioning: true mod_shared_roster_ldap: ldap_base: "OU=inutil,DC=inutil,DC=cu" ldap_groupattr: "department" ldap_groupdesc: "department" ldap_memberattr: "sAMAccountName" ldap_useruid: "sAMAccountName" ldap_userdesc: "cn" ldap_rfilter: "(objectClass=user)" ldap_filter: "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))" mod_s2s_dialback: {} mod_sic: {} mod_stream_mgmt: resend_on_timeout: if_offline mod_vcard: db_type: ldap ldap_uids: {"sAMAccountName": "%u"} matches: infinity ldap_vcard_map: "NICKNAME": {"%s": ["givenName"]} "FN": {"%s": ["displayName"]} "EMAIL": {"%s": ["mail"]} "GIVEN": {"%s": ["givenName"]} "MIDDLE": {"%s": ["middleName"]} "FAMILY": {"%s": ["sn"]} "ORGNAME": {"%s": ["company"]} "ORGUNIT": {"%s": ["department"]} "TITLE": {"%s": ["title"]} "TEL": {"%s": ["telephoneNumber"]} ldap_search_fields: "User": "%u" "Full Name": "displayName" "Email": "mail" ldap_search_reported: "Full Name": "FN" "Nickname": "NICKNAME" "Email": "EMAIL" mod_version: {} allow_contrib_modules: true |
Para agregar los usuarios, como podemos ver en el apartado mod_shared_roster_ldap, sólo con añadirlos al ADDC basta y por ahí mismo se activan se desactivan. Al agregar un usuario, debemos darle descripción en el apartado «Propiedades/Organización/Departamento», con el departamento al que pertenece para que salga ordenado en el roster del Ejabberd, cuando se conecten con el Pidgin, Pandion, Spark.
Adjunto la configuración de ejemplo, así como imágenes del sistema funcionando.
Entonces hasta acá es todo. Bastante fácil y de bajo consumo de recursos el Ejabberd. Prueben y comenten.
Espero les sirva.
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 SeaMonkey/2.53.5.1
Muy bueno, pero te recomiendo no instalar del repo de debian, que tiene el 18.12, sino bajar el .deb de ejabberd directo, que está por el 20.12…
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0
Será esa la razón por la cual a mi no me funciona? Cuando mando a instalar ejabberd me da una bola de errores, algo parecido a lo que siempre me ha sucedido con NTP y en ocasiones con apache2, problemas que he encontrado como solucionarlos, pero en el caso de ejabberd no! Desde donde bajas el .deb? Si sitio oficial de ejabberd??
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0 SeaMonkey/2.53.5.1
Si la instalación de apt te da problemas debe ser algo relacionado con los repositorios que tienes configurado. En fin, sí, descargo el deb del ejabberd del sitio oficial, pero debes tener en cuenta que está bloqueado para Cuba y hay que usar medidas anti-bloqueo…
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0
Muy buen tutorial.
Pero sería bueno este procedimiento lo implementen contra openLdap y no Samba.
Saludos
Mozilla/5.0 (X11; Linux x86_64; rv:85.0) Gecko/20100101 Firefox/85.0
Uff, cualquier semejanza con «https://www.sysadminsdecuba.com/2019/08/guia-para-la-implementacion-de-servicios-integrados-a-samba4-como-active-directory-domain-controller-ad-dc-en-debian-9-10-parte-7/», debe ser pura coincidencia… 😉 😉 😉
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0
https://www.process-one.net/en/ejabberd/downloads/
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0
Saludos, este Manual se puede implementar en Debian11, porque he hecho todo lo posible x emplearlo, y nada de nada