Cómo configurar Exchange ActiveSync para Zimbra: Guía de configuración de Z-push en 8 simples pasos

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

¿Cómo sincronizar el calendario de Zimbra con Outlook? 
¿Cómo sincronizar los contactos de Zimbra con Outlook?
¿Cómo sincronizar el calendario y contactos de Zimbra 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 Zimbra. Sin embargo, será necesario instalar un plugin adicional para conectarlo con Zimbra.

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 simples pasos para configurar Z-push con Zimbra.

Prerrequisitos

  1. Ubuntu Server 16.04
  2. Zimbra Open Source 8.8.X instalado y configurado

Paso 1: Repositorio

Para las últimas versiones de Z-push es necesario adicionar el repositorio correspondiente:

# nano /etc/apt/sources.list

Adicionar al final del archivo lo siguiente:

deb http://repo.z-hub.io/z-push:/final/Ubuntu_16.04/ /

También será necesario descargar la llave correspondiente:

# wget -qO - http://repo.z-hub.io/z-push:/final/Ubuntu_16.04/Release.key | sudo apt-key add -

Para otras distribuciones por favor consulten el siguiente enlace: https://wiki.z-hub.io/display/ZP/Installation

Paso 2: Instalación

# apt-get update

Primero se instalará Apache:

# apt-get install apache2
# apt-get install php-curl
# apt-get install libapache2-mod-php

Después se instalarán los paquetes de z-push:

# apt-get install z-push-common
# apt-get install z-push-backend-combined z-push-ipc-memcached z-push-ipc-sharedmemory

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 /usr/share/z-push/backend/zimbra
# tar xf zpushzimbra.tar.gz --strip-components=1 -C /usr/share/z-push/backend/zimbra

Paso 4: Configuración de Z-push

Archivo de configuración de Z-push:

# nano /usr/share/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);

Archivo de configuración de Zimbrabackend

# nano /usr/share/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 777 -R /var/lib/z-push

Paso 5: Logs Z-push

Configurar la rotación del log de z-push

nano /etc/logrotate.d/z-push

/var/log/z-push/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
}

Paso 6: Configuracion 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 /usr/share/z-push/
        Alias /Microsoft-Server-ActiveSync /usr/share/z-push/index.php
        SSLEngine On
        SSLCertificateFile /opt/zimbra/ssl/zimbra/commercial/commercial.crt
        SSLCertificateKeyFile /opt/zimbra/ssl/zimbra/commercial/commercial.key
        SSLCertificateChainFile /opt/zimbra/ssl/zimbra/commercial/commercial.crt
 
        <Directory />
                AllowOverride All
        </Directory>

        php_flag magic_quotes_gpc off
        php_flag register_globals off
        php_flag magic_quotes_runtime off
        php_flag short_open_tag on

        # Logfiles
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>
# a2ensite z-push.conf 
# service apache2 restart

En el caso de no contar con un certificado comenrcial instalado en Zimbra, será necesario crear un certificado autofirmado.

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

Paso 7: Prevenir conflictos de puerto con el Proxy de Zimbra

Como el proxy de Zimbra 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

Debería obtenerse un mensaje parecido a:

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

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

Como ActiveSync usa el Alias /Microsoft-Server-ActiveSync tenemos que modificar el proxy de Zimbra.

# nano /opt/zimbra/conf/nginx/templates/nginx.conf.web.https.default.template

Configuración actual:

# Proxy to Zimbra Upstream
proxy_pass ${web.upstream.target};
proxy_read_timeout ${web.upstream.polling.timeout};
proxy_buffering off;
# For audit
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Nueva configuración:

# Z-PUSH start
proxy_pass https://correo.guidocutipa.blog.bo:9443;
proxy_read_timeout 3600;
proxy_buffering off;
proxy_set_header X-Forwarded-For $remote_addr;
# Z-PUSH end

Aplicar la configuración:

# sudo -u zimbra /opt/zimbra/bin/zmconfigdctl restart
# sudo -u zimbra /opt/zimbra/bin/zmproxyctl restart

Pruebas

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

https://(FQDN del servidor de correos zimbra)/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:

Outlook 2016

Para Android:

Cliente de correo electrónico de Android

Referencias

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

Entradas relacionadas