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
- 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.
- 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:
Para Android seleccionar la opción Exchange:
Referencias
https://wiki.z-hub.io/display/ZP/Installation
https://guidocutipa.blog.bo/exchange-activesync-zimbra-z-push/