Guía para la implementación de servicios integrados a Samba4 como Active Directory Domain Controller (AD DC) en Debian 9/10 – Parte 7

Samba logo

Instalación y configuración de eJabberd XMPP Server e integración con Samba AD DC

Instalación de paquetes necesarios

apt install ejabberd ejabberd-contrib erlang-eldap

Crear certificado de seguridad TLS/SSL.

mv /etc/ejabberd/ejabberd.pem{,.org}`

Para Debian 9 Stretch.

openssl req -x509 -nodes -days 3650 -sha512 \
    -subj "/C=CU/ST=Provincia/L=Ciudad/O=EXAMPLE TLD/OU=IT/CN=example.tld/[email protected]/" \
    -reqexts SAN -extensions SAN \-config <(cat /etc/ssl/openssl.cnf \
        <(printf "\n[SAN]\nsubjectAltName=DNS:jb.example.tld,\
        DNS:conference.example.tld,DNS:echo.example.tld,\
        DNS:pubsub.example.tld,IP:192.168.0.3")) \
    -newkey rsa:4096 \
    -out /tmp/exampleJabber.crt \
    -keyout /tmp/exampleJabber.key
openssl dhparam -out /etc/ssl/dh2048.pem 2048

Para Debian 10 Buster.

openssl req -x509 -nodes -days 3650 -sha512 \
-subj "/C=CU/ST=Provincia/L=Ciudad/O=EXAMPLE TLD/OU=IT/CN=example.tld/[email protected]/" \
-addext "subjectAltName = DNS:jb.example.tld,DNS:conference.example.tld,DNS:echo.example.tld,DNS:pubsub.example.tld,IP:192.168.0.3" \
-newkey rsa:4096 \
-out /tmp/exampleJabber.crt \
-keyout /tmp/exampleJabber.key
openssl dhparam -out /etc/ssl/dh2048.pem 2048
cat /tmp/{exampleJabber.crt,exampleJabber.key} > /etc/ejabberd/ejabberd.pem
chmod 0640 /etc/ejabberd/ejabberd.pem
chown root:ejabberd /etc/ejabberd/ejabberd.pem

Comprobar correcta creación del certificado.

openssl x509 -in /etc/ejabberd/ejabberd.pem -text -noout

Definir el nombre de dominio del servidor XMPP y parámetros de seguridad TLS/SSL en la comunicación c2s (cliente-servidor).

cp /etc/ejabberd/ejabberd.yml{,.org}
nano /etc/ejabberd/ejabberd.yml

Para Debian 9 Stretch.

hosts:
  - "example.tld"
listen:
  -
    port: 5222
    ip: "::"
    module: ejabberd_c2s
    certfile: "/etc/ejabberd/ejabberd.pem"
    starttls: true
    protocol_options:
      - "no_sslv3"
      - "no_sslv2"
      - "no_tlsv1"
      - "no_tlsv1_1"
    ciphers: "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256"
    max_stanza_size: 65536
    shaper: c2s_shaper
    access: c2s
    zlib: true
    resend_on_timeout: if_offline
    tls_compression: false
    starttls_required: true
    dhfile: "/etc/ejabberd/dh2048.pem"
disable_sasl_mechanisms: "digest-md5"

Para Debian 10 Buster.

hosts:
  - "example.tld"
certfiles:
  - "/etc/ejabberd/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/ssl/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: "::"
    module: ejabberd_c2s
    max_stanza_size: 262144
    shaper: c2s_shaper
    access: c2s
    starttls_required: true
    protocol_options: 'TLS_OPTIONS'
disable_sasl_mechanisms:
  - "digest-md5"
  - "X-OAUTH2"

Creación de registros DNS

samba-tool dns add localhost example.tld jb A '192.168.0.3' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost 0.168.192.in-addr.arpa 3 PTR 'jb.example.tld.' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld conference CNAME 'jb.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld echo CNAME 'jb.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld pubsub CNAME 'jb.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld _xmpp-client._tcp SRV 'jb.example.tld 5222 5 0' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld _xmpp-server._tcp SRV 'jb.example.tld 5269 5 0' -U 'administrator'%'P@s$w0rd.123'

Comprobaciones

host -t SRV _xmpp-server._tcp.example.tld
host -t SRV _xmpp-client._tcp.example.tld
host -t A jb.example.tld
dig -t SRV @example.tld _xmpp-client._tcp.example.tld
dig -t SRV @example.tld _xmpp-server._tcp.example.tld

Configuración del servicio Webmail

Descomprimir el paquete de instalación de Rouncubemail en el sistema y asignar permisos.

tar -xzmf roundcubemail-*-complete.tar.gz -C /opt/
mv /opt/roundcubemail-* /opt/roundcube
ln -s /opt/roundcube/bin/{cleandb,gc}.sh /etc/cron.daily/
chown -R root:www-data /opt/roundcube/
find /opt/roundcube/ -type d \-exec chmod 0755 {} \;
find /opt/roundcube/ -type f \-exec chmod 0644 {} \;
chmod 0770 /opt/roundcube/{logs,temp}

PostgreSQL

Instalar gestor de base de datos PortgreSQL.

apt install postgresql

Crear base de datos para Roundcubemail.

su - postgres
psql
\password postgres
CREATE DATABASE roundcubemail WITH TEMPLATE template0 ENCODING 'UNICODE';
\q

Inicializar la base de datos.

psql -h localhost -U postgres -W -f /opt/roundcube/SQL/postgres.initial.sql roundcubemail

Nginx

Instalar servidor web Nginx y otros paquetes necesarios.

apt install nginx-full php-fpm php-pear php-mbstring php-intl php-ldap php-gd php-imagick php-pgsql

Definir zona horaria.

sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
        s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
        /etc/php/7*/fpm/php.ini

Habilitar el servicio.

nano /etc/nginx/sites-available/roundcube
ln -s /etc/nginx/sites-available/roundcube /etc/nginx/sites-enabled/

Apache2

Instalar servidor web Apache2.

apt install apache2 libapache2-mod-php php-pear php-mbstring php-intl php-ldap php-gd php-imagick php-pgsql

Definir zona horaria.

sed -i "s/^;date\.timezone =.*$/date\.timezone = 'America\/Havana'/;
        s/^;cgi\.fix_pathinfo=.*$/cgi\.fix_pathinfo = 0/" \
        /etc/php/7*/apache2/php.ini

Habilitar el servicio.

nano /etc/apache2/sites-available/roundcube.conf
a2ensite roundcube.conf

Integración con Samba AD DC

Crear nueva Cuenta de Usuario para el servicio eJabberd.

samba-tool user create 'ejabberd' 'P@s$w0rd.012' \
    --surname='XMPP Service' \
    --given-name='eJabberd' \
    --company='EXAMPLE' \
    --description='eJabberd XMPP Service Account'
samba-tool user setexpiry ejabberd --noexpiry

Definir cuenta de usuario con acceso administrativo al servicio.

nano /etc/ejabberd/ejabberd.yml
acl:
  admin:
    user:
      - "[email protected]"

Definir método de autenticación.

auth_password_format: scram
fqdn: "jb.example.tld"
auth_method: ldap
ldap_servers:
  - "dc.example.tld"
ldap_encrypt: none
ldap_port: 389
ldap_rootdn: "[email protected]"
ldap_password: "P@s$w0rd.012"
ldap_base: "OU=ACME,DC=example,DC=tld"
ldap_uids: {"sAMAccountName": "%u"}
ldap_filter: "(&(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"

Compartir el roster de los usuarios

Editar el fichero /etc/ejabberd/ejabberd.yml y añadir en la sección MODULES, debajo de la opción mod_roster: {}, el siguiente contenido:

mod_shared_roster_ldap:
  ldap_base: "OU=ACME,DC=example,DC=tld"
  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)))"

Personalizar vCard de los usuarios

Editar el fichero /etc/ejabberd/ejabberd.yml y añadir en la sección MODULES, debajo de la opción mod_time: {}, el siguiente contenido:

Para Debian 9 Stretch.

mod_vcard_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"

Para Debian 10 Buster.

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"
samba-tool dns add localhost example.tld jb A '192.168.0.3' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost 0.168.192.in-addr.arpa 3 PTR 'jb.example.tld.' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld conference CNAME 'jb.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld echo CNAME 'jb.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld pubsub CNAME 'jb.example.tld' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld _xmpp-client._tcp SRV 'jb.example.tld 5222 5 0' -U 'administrator'%'P@s$w0rd.123'
samba-tool dns add localhost example.tld _xmpp-server._tcp SRV 'jb.example.tld 5269 5 0' -U 'administrator'%'P@s$w0rd.123'

Reiniciar el servicio y comprobar su correcto funcionamiento.

systemctl restart ejabberd
systemctl status ejabberd

Comprobaciones

Acceder a la web admnistrativa que provee eJabberd desde un navegador, loguearse con un usuario administrador y revisar los parámetros de configuración establecidos.

https://jb.example.tld:5280/admin

Vale destacar que una vez intregado el servicio al AD DC, no es necesario realizar cambio alguno a los usuarios, por esta vía; pues son gestionados en el mismo AD DC.

Iniciar sesión desde cualquier cliente jabber (Spark, Gajim, Pidgin) que soporte el protocolo XMPP y en la consola del servidor ejecutar:

tail -fn100 /var/log/ejabberd/ejabberd.log

Como referencia, debajo se muestra la lista de artículos de esta serie.

    1. Introducción
    2. Configuración de parámetros de red y sincronización de tiempo
    3. Instalación y configuración de Samba4 como AD DC
    4. Instalación y configuración del servidor Bind9 DNS e integración con Samba AD DC
    5. Instalación y configuración del servidor NTP e integración con Samba AD DC
    6. Creación de Unidades Organizativas, Grupos y Cuentas de Usuarios
    7. Instalación y configuración de Squid Proxy e integración con Samba AD DC
    8. Instalación y configuración de eJabberd XMPP e integración con Samba AD DC
    9. Instalación y configuración de Postfix, Dovecot, Roundcube Mail e integración con Samba AD DC
    10. Conclusiones

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuar!

Promedio de puntuación 4.7 / 5. Recuento de votos: 3

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

10 comentarios

  1. Google Chrome 83.0.4103.61 Google Chrome 83.0.4103.61 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36

    como logro que me permita los mismos derechos en tolos los navegadores no solo en mozilla

  2. Google Chrome 81.0.4044.138 Google Chrome 81.0.4044.138 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36

    La sera que puedes postear la autenticacion de ejabber pero para kerberos no para ldap. Gracias

  3. Opera 65.0.3467.78 Opera 65.0.3467.78 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78

    si si yo al menos se que es rouncube, pero que pinta en el tuto de ejjaberd, y lo otro la parte de crear los registros en el dns está repedita dos veces

  4. Firefox 67.0 Firefox 67.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

    hola, he montado nuevamente todo lo que describe en esta serie de tuoriales, pero me sudece lo mismo..
    hasta use los mismo ip, nombre, todo como lo describe!
    TENGO EL ERROR…
    lo puse y al parecer no se publico..
    crees poder hacer un tutorial de esta guia en video y subirlo a youtube? porfavor!

  5. Firefox 67.0 Firefox 67.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

    lo he vuelto a realizar…
    con el mismo nombre,mismo ip y el mismo ERROR…
    *************************************
    systemctl restart ejabberd
    Job for ejabberd.service failed because the control process exited with error code.
    See «systemctl status ejabberd.service» and «journalctl -xe» for details.

    *****************************
    REINICIO EL SERVER Y VUELVO A REINICIAR EL SERVICIO
    *****************************
    systemctl status ejabberd.service
    ● ejabberd.service – A distributed, fault-tolerant Jabber/XMPP server
    Loaded: loaded (/lib/systemd/system/ejabberd.service; enabled; vendor preset:
    Active: activating (start) since Thu 2019-09-12 14:34:43 CDT; 58s ago
    Docs: https://www.process-one.net/en/ejabberd/docs/
    Cntrl PID: 7512 (sh)
    Tasks: 3 (limit: 1121)
    Memory: 1.2M
    CGroup: /system.slice/ejabberd.service
    ├─7512 /bin/sh -c /usr/sbin/ejabberdctl start && /usr/sbin/ejabberdct
    ├─7531 /bin/sh /usr/sbin/ejabberdctl started
    └─8367 sleep 2

    Sep 12 14:34:43 jb systemd[1]: ejabberd.service: Service RestartSec=5s expired,
    Sep 12 14:34:43 jb systemd[1]: ejabberd.service: Scheduled restart job, restart
    Sep 12 14:34:43 jb systemd[1]: Stopped A distributed, fault-tolerant Jabber/XMPP
    Sep 12 14:34:43 jb systemd[1]: Starting A distributed, fault-tolerant Jabber/XMP
    ————————————————————————
    ENTONCES NO ME SALE NADA, CARGA LA PAGINA EN BLANCO….
    https://IP:5280/admin

    CREES PODER HACER UN VIDEO SOLO DEL JABBER? Y SUBIRLO A YOUTUBE.

  6. Firefox 67.0 Firefox 67.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

    DICULPA LA IMNORANCIA, PARA QUE SE NECESITA INSTALAR:
    ———————————–
    Configuración del servicio Webmail
    Descomprimir el paquete de instalación de Rouncubemail en el sistema y asignar permisos.
    ___________________________________
    ????

  7. Firefox 67.0 Firefox 67.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

    HOLA..CUANDO DICE

    1. Habilitar el servicio: NO DEBEN APARECER DATOS?

    #nano /etc/nginx/sites-available/roundcube
    #ln -s /etc/nginx/sites-available/roundcube /etc/nginx/sites-enabled/

    Y EN:

    2. Habilitar el servicio: IGUAL SIN DATOS?

    #nano /etc/apache2/sites-available/roundcube.conf
    y……
    # a2ensite roundcube.conf
    pide!…..

    Enabling site roundcube.
    To activate the new configuration, you need to run:
    systemctl reload apache2

    Luego:

    Definir el nombre de dominio del servidor XMPP y parámetros de seguridad TLS/SSL en la comunicación c2s (cliente-servidor).
    #nano /etc/ejabberd/ejabberd.yml
    Para Debian 10 Buster.
    AGREGO TU CONFIGURACION OHHH! MODIFICO, ADAPTO El DEFAULT SEGUN MIS NECESIDADES????
    DISCULPE LA IMNORANCIA
    CUANDO DICE:
    ————————-
    Personalizar vCard de los usuarios
    Editar el fichero /etc/ejabberd/ejabberd.yml y añadir en la sección MODULES, debajo de la opción mod_time: {}, el siguiente contenido:
    ————————
    3. EN DEBIAN 10 NO APARECE mod_time: {} en el archivo ejabberd.yml
    4. DENTRO DE {} AGREGO EL CONTENIDO QUE DESCRIBE PARA LA VERSION CORRESPONDIENTE?

  8. Firefox 67.0 Firefox 67.0 Windows 10 x64 Edition Windows 10 x64 Edition
    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0

    EN LA LINEA
    cat /tmp/{exampleJabber.crt,exampleJabber.key} > /etc/ejabberd/ejabberd.pem
    ERROR
    bash: /etc/ejabberd/ejabberd.pem: No such file or directory
    DEBIDO A QUE NO EXISTE!!!!
    POR FAVOR ARREGLAR

    • Firefox 68.0 Firefox 68.0 Windows 10 x64 Edition Windows 10 x64 Edition
      Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0

      Disculpa el error. El asunto está en que se perdieron algunos símbolos en el editor. En varios casos se perdieron los símbolos > y <.

Responder a jeansito Cancelar la respuesta

Tu dirección de correo electrónico no será publicada.


*