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/emailAddress=postmaster@example.tld/" \ -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/emailAddress=postmaster@example.tld/" \
-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"
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'
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
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}
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
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/
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
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:
- "john.doe@example.tld"
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: "ejabberd@example.tld"
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)))"
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)))"
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
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.
Me complace anunciar la creación de esta útil herramienta (SquidStats), para el análisis y monitoreo…
La inteligencia artificial está revolucionando las industrias al automatizar tareas, predecir patrones y permitiendo tomar…
Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…
Percona Monitoring and Management (PMM) es una herramienta de código abierto para la supervisión y…
Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…
Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…
View Comments
como logro que me permita los mismos derechos en tolos los navegadores no solo en mozilla
La sera que puedes postear la autenticacion de ejabber pero para kerberos no para ldap. Gracias
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
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!
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.
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.
___________________________________
????
Este servicio permite que los usuarios puedan utilizar su correo a través de un cliente Web o Webmail.
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?
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
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 <.