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:
;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]:
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]:
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:
apt install -y ejabberd ejabberd-contrib erlang-eldap
Hacemos salva de la configuracion original:
mv /etc/ejabberd/ejabberd.pem{,.orig}
Ahora creamos el certificado[autofirmado] que usará ejabberd:
mkdir -p /etc/ejabberd/cert openssl req -x509 -nodes -days 3650 -sha512 \ -subj "/C=CU/ST=La Habana/L=La Habana/O=INUTIL.CU/OU=INUTIL/CN=*.inutil.cu/[email protected]/" \ -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:
### ### 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_rootdn: "[email protected]" 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: - "[email protected]" 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 (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
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:85.0) Gecko/20100101 Firefox/85.0
Muy buen tutorial.
Pero sería bueno este procedimiento lo implementen contra openLdap y no Samba.
Saludos
Warning: Undefined array key 1 in /var/www/html/sysadminsdecuba/wp-content/plugins/wp-useragent/wp-useragent-detect-os.php on line 668
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:91.0) Gecko/20100101 Firefox/91.0
https://www.process-one.net/en/ejabberd/downloads/
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…