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 en un servidor independiente con Zimbra.
Prerrequisitos
- Ubuntu Server 22.04
- Zimbra Open Source 8.8.15 instalado y configurado
Paso 1: Instalar Apache y 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
apt -y install php8.2-intl php8.2-ldap
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: Habilitar SSL en Apache
Cambiaremos los puertos en Apache para que escuche en el puerto 443:
a2enmod ssl
Reiniciar apache:
service apache2 restart
Verificar el cambio de puertos:
ss -tlnp | grep apache2
Debería obtenerse un mensaje parecido a:
tcp6 0 0 :::80 :::* LISTEN 12491/apache2
tcp6 0 0 :::443 :::* LISTEN 12491/apache2
Habilitar los puertos en el firewall local
ufw allow ssh
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
Paso 7: Configuración de Apache
Configurando el servidor virtual:
nano /etc/apache2/sites-available/z-push.conf
<VirtualHost *:443>
ServerAdmin [email protected]
ServerAlias exchange.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
Paso 8: Configuracion de Autodiscover
Configurando el archivo de configuración:
nano /var/lib/z-push/autodiscover/config.php
// Servidor Z-push
define('ZPUSH_HOST', 'exchange.guidocutipa.blog.bo');
define('TIMEZONE', 'America/La_Paz');
define('BACKEND_PROVIDER', 'BackendZimbra');
Configurar el DNS
Crear un registro tipo A
Crear un Registro tipo SRV
Pruebas
Podemos acceder a la siguiente dirección para verificar que se realice la autenticación de un usuario de zimbra:
https://exchange.guidocutipa.blog.bo/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:
Para Android: