Icono del sitio Blog personal de Guido Cutipa

Cómo configurar Z-push para Carbonio CE en 8 pasos

En muchas ocasiones los que tenemos instalado un servidor de correo electrónico Carbonio CE nos realizamos las siguientes preguntas:

¿Cómo sincronizar el calendario de Carbonio CE con Outlook? 
¿Cómo sincronizar los contactos de Carbonio CE con Outlook?
¿Cómo sincronizar el calendario y contactos de Carbonio CE con Android?

La respuesta a estas interrogantes es Z-push. Una forma sencilla de configurar es instalar Z-push en el mismo servidor donde esté instalado Carbonio CE. Sin embargo, será necesario instalar un plugin adicional para conectarlo con Carbonio CE.

Otro beneficio de instalar Z-push es que todo se realiza en el puerto 443, por lo tanto ya no es necesario abrir en nuestro firewall otros puertos de protocolos como POP3, SMTP e IMAP.

Z-Push es una implementación FOSS (Free and Open-Source Software) del protocolo Microsoft Exchange ActiveSync que se utiliza para sincronizar el correo electrónico, los contactos personales y otros elementos entre un servidor central y un dispositivo móvil.

https://en.wikipedia.org/wiki/Z-push

A continuación se detallan 8 pasos para configurar Z-push con Carbonio CE.

Para seguir los pasos descritos a continuación debe escribir «sudo – su» para cambiar al usuario root o escribir sudo delante de cada comando.

Prerrequisitos

  1. Ubuntu Server 20.04, si se utiliza otro sistema operativo el cambio mas significativo se encontrará en el paso 1 al momento de instalar PHP.
  2. Carbonio CE instalado y configurado (para este ejemplo se usó la versión 23.11.0)

Paso 1: Instalar PHP

Primero se actualizará el sistema operativo:

apt update
apt full-upgrade

Antes de instalar PHP 8.2 se debe habilitar el repositorio para tener acceso a la última versión disponible:

apt install -y software-properties-common
add-apt-repository ppa:ondrej/php
apt update

Ahora se instala PHP y todas sus dependencias necesarias para el funcionamiento de Z-push

apt -y install apache2
apt -y install php8.2 php8.2-cli php8.2-soap php8.2-mbstring
apt -y install php8.2-imap php8.2-curl libawl-php php8.2-curl php8.2-xml php8.2-ldap
apt -y install php8.2-intl
apt -y install libapache2-mod-php8.2

Paso 2: Instalación de Z-push

Para obtener la última versión de Z-push es necesario descargarlo desde github.

Si no se tiene instalado GIT en el servidor ejecutar este comando:

apt install git

Crear los directorios necesarios para Z-push

mkdir /var/lib/z-push /var/log/z-push

chmod 755 /var/lib/z-push /var/log/z-push

Clonar el repositorio:

git clone https://github.com/Z-Hub/Z-Push.git

cp -r Z-Push/src/* /var/lib/z-push

Paso 3: Plugin Zimbrabackend

Descargar el plugin desde la web oficial https://sourceforge.net/projects/zimbrabackend/

wget -O zpushzimbra.tar.gz https://sourceforge.net/projects/zimbrabackend/files/latest/download

Extraer el contenido del archivo descargado en la carpeta backend:

mkdir -p /var/lib/z-push/backend/zimbra
tar xf zpushzimbra.tar.gz --strip-components=1 -C /var/lib/z-push/backend/zimbra

Paso 4: Configuración de Z-push

Archivo de configuración de Z-push:

nano /var/lib/z-push/config.php

Modificar los siguientes valores:

define('TIMEZONE', 'America/La_Paz');
define('USE_CUSTOM_REMOTE_IP_HEADER', 'HTTP_X_REAL_IP');
define('BACKEND_PROVIDER', 'BackendZimbra');
define('LOGLEVEL', LOGLEVEL_ERROR);
define('MAX_EMBEDDED_SIZE', 83886080);

El valor de MAX_EMBEDDED_SIZE debe ser igual o mayor al tamaño permitido en el servidor de correo electrónico.

Archivo de configuración de Zimbrabackend

nano /var/lib/z-push/backend/zimbra/config.php

Modificar los siguientes valores:

define('ZIMBRA_URL', 'https://127.0.0.1');
define('ZIMBRA_SSL_VERIFYPEER', false);
define('ZIMBRA_SSL_VERIFYHOST', false);
define('ZIMBRA_DISABLE_URL_OVERRIDE', true);
define('ZIMBRA_USER_DIR', 'zimbra');
define('ZIMBRA_DISABLE_MULTI_CALENDARS',true);
define('ZIMBRA_IGNORE_EMAILED_CONTACTS',true);
define('ZIMBRA_LOCAL_CACHE', true);
define('ZIMBRA_DEBUG',false);

Modificar los permisos de acceso de la carpeta /var/lib/z-push

chmod 755 -R /var/lib/z-push

Paso 5: Logs Z-push

Configurar la rotación del log de z-push para generar un archivo de log diario, comprimido y que se almacenen los logs de los últimos 30 días.

nano /etc/logrotate.d/z-push
/var/log/z-push/*.log {
 daily
 missingok
 rotate 30
 compress
 delaycompress
 notifempty
 }

Actualizar los permisos de escritura y el usuario dueño de los directorios de Z-push

chown www-data:www-data /var/lib/z-push /var/log/z-push
chmod 755 /var/lib/z-push /var/log/z-push

Paso 6: Prevenir conflictos de puerto con el Proxy de Carbonio CE

Como el proxy de Carbonio CE ocupa los puertos 80 y 443, cambiaremos los puertos en Apache para que escuche puertos diferentes:

a2enmod ssl

nano /etc/apache2/ports.conf 

Configuración actual:

 Listen 80
<IfModule ssl_module>
        Listen 443
</IfModule>
 
<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

Nueva Configuración:

 Listen 9080
<IfModule ssl_module>
        Listen 9443
</IfModule>
 
<IfModule mod_gnutls.c>
        Listen 9443
</IfModule>

Reiniciar apache:

service apache2 restart

Verificar el cambio de puertos:

netstat -tlnp | grep apache2

Debería obtenerse un mensaje parecido a:

tcp6       0      0 :::9080                 :::*                    LISTEN      12491/apache2
tcp6 0 0 :::9443 :::* LISTEN 12491/apache2

Habilitar los puertos en el firewall local

ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 6071/tcp
ufw allow 8443/tcp
ufw allow 9443/tcp
ufw enable
ufw status

Paso 7: Configuración de Apache

Configurando el servidor virtual:

nano /etc/apache2/sites-available/z-push.conf
<VirtualHost *:9443>
         ServerAdmin webmaster@guidocutipa.blog.bo
         ServerAlias correo.guidocutipa.blog.bo
         DirectoryIndex index.php
         DocumentRoot /var/lib/z-push/
         Alias /Microsoft-Server-ActiveSync /var/lib/z-push/index.php
         SSLEngine On
         SSLCertificateFile /opt/zextras/ssl/carbonio/commercial/commercial.crt
         SSLCertificateKeyFile /opt/zextras/ssl/carbonio/commercial/commercial.key
         SSLCertificateChainFile /opt/zextras/ssl/carbonio/commercial/commercial.crt
  
         <Directory />
                Options FollowSymLinks
                AllowOverride All
                Require all granted
         </Directory>
         # Logfiles
         ErrorLog /var/log/apache2/error.log
         CustomLog /var/log/apache2/access.log combined 
 </VirtualHost>

Habilitar el nuevo host virtual y aplicar los cambios

a2ensite z-push.conf 

service apache2 restart 

Si se tienen problemas al reiniciar el servicio de apache2 es posible que la causa sea un conflicto de puertos, para solucionarlo continuar con el paso 7.

En el caso de no contar con un certificado comercial instalado en Carbonio CE, será necesario crear un certificado autofirmado.

https://guidocutipa.blog.bo/certificado-ssl-autofirmado-apache/

Paso 8: Inyectar en el proxy de Carbonio CE el alias /Microsoft-Server-ActiveSync

Como ActiveSync usa el Alias /Microsoft-Server-ActiveSync tenemos que modificar el proxy de Carbonio CE en los siguientes archivos:

nano -c /opt/zextras/conf/nginx/templates/nginx.conf.web.https.default.template

nano -c /opt/zextras/conf/nginx/templates/nginx.conf.web.https.template

Buscar la sección:

location ^~ /Microsoft-Server-ActiveSync

Modificar los valores de $mailhostport y proxy_pass para que queden de la siguiente manera:

set $mailhostport 9443;   # z-push

proxy_pass          https://(FQDN del servidor de correo electrónico):9443; # z-push

Aplicar la configuración:

su - zextras -c "zmproxyctl restart" 
o
su - zextras -c "zmcontrol restart" 

Backups de las configuraciones, para no perder los cambios realizados en caso de que se actualice la instalación de Carbonio CE

cp /opt/zextras/conf/nginx/templates/nginx.conf.web.https.template /opt/zextras/conf/nginx/templates_custom
cp /opt/zextras/conf/nginx/templates/nginx.conf.web.https.default.template /opt/zextras/conf/nginx/templates_custom

Pruebas

Podemos acceder a la siguiente dirección para verificar que se realice la autenticación de un usuario de Carbonio CE:

https://(FQDN del servidor de correo electrónico)/Microsoft-Server-ActiveSync

Finalmente podremos probar la sincronización de: Correo, Agenda, Contactos, etc. en nuestro cliente Outlook o nuestros dispositivos móviles.

Para Outlook 2016 a 2021 o 365 seleccionar la opción Exchange ActiveSync:

Outlook 2016

Para Android seleccionar la opción Exchange:

Cliente de correo electrónico de Android

Referencias

https://wiki.z-hub.io/display/ZP/Installation

https://guidocutipa.blog.bo/exchange-activesync-zimbra-z-push/

Salir de la versión móvil