Synchronisation mails / calendriers / contacts de Zimbra via Z-Push

De base Zimbra ne propose pas de synchronisation de mails / calendrier / contacts dans sa version gratuite. Il propose cependant une version payante offrant ces options.
Cependant il existe une alternative gratuite se nommant « Z-Push ».
C’est une application libre proposant les mêmes fonctionnalités en synchronisant les différents appareils compatibles via « ActiveSync » installé sur un serveur ayant ce rôle.
Nous allons donc voir comment configurer cette machine afin de permettre la synchronisation des mails / calendriers / contacts de Zimbra via Z-push.

⚠ Le client de messagerie « Outlook » n’offre cette configuration qu’à partir de la version 2013.

 I. Installation d’une machine Debian

Modification des dépôts :

vim /etc/apt/sources.list
deb http://ftp.debian.org/debian/ jessie main
deb http://security.debian.org/ jessie/updates main
deb http://repo.z-hub.io/z-push:/final/Debian_8.0/ /

II. Installation des prérequis

sudo apt-get update
sudo apt-get install apache2 php5 php5-curl openssl

III. Téléchargement et installation de Zpush et de Zimbra Backend

Il faut installer Zpush dans le dossier /var/www/

Puisque nous avons modifié les dépôts, il suffit d’effectuer la commande suivante :

apt-get install z-push-common

Il est également possible de le télécharger directement sur le site :

http://repo.z-hub.io/z-push:/

Récupérez le fichier .tar.gz que vous désirez en fonction de votre distribution.

Pour l’extraire dans le bon répertoire faites la commande suivante :

tar xvzf z-push-2.X.X.tar.gz -C /var/www/

Puis renommer le dossier :

mv /var/www/z-push-2.3.5 /var/www/zpush

Il nous reste ZimbraBackend à installer.

Téléchargez la dernière release sur le lien ci-dessous, puis copiez-là dans le répertoire « /var/www/zpush/backend/ »

http://zimbrabackend.svn.sourceforge.net/viewvc/zimbrabackend/zimbra-backend/branches/z-push-2/

On décompresse le .tar.gz dans le répertoire « var/www/zpush/backend » puis on le renomme en « zimbra« .

tar xvzf zimbrabackend-z-push-2.tar.gz -C /var/www/zpush/backend/
mv /var/www/zpush/backend/zimbrabackend-z-push-2 /var/www/zpush/backend/zimbra

Configuration d’Apache2

Édition du fichier de configuration d’Apache :

vim /etc/apache2/sites-available/default

On remplacera le contenu par ceci :

<VirtualHost *:80>
ServerName <strong>zpush.domaine.com</strong>
ServerAdmin webmaster@localhost
 
    DocumentRoot /var/www/zpush
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /var/www/zpush>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
 
    ErrorLog /var/log/apache2/error.log
    LogLevel warn
    CustomLog /var/log/apache2/ssl_access.log combined
    Alias /doc/ "/usr/share/doc/"
 
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
        </Directory>
 
Alias /Microsoft-Server-ActiveSync /var/www/zpush/index.php
php_flag short_open_tag on
php_flag magic_quotes_runtime off
php_flag register_globals off
php_flag magic_quotes_gpc off
</VirtualHost>

Ensuite, on crée un fichier de configuration pour le SSL :

/etc/apache/sites-available/ssl.conf

Puis, on édite le fichier de configuration :

<VirtualHost *:443>
    ServerName <strong>zpush.domaine.com</strong>
    DocumentRoot /var/www/zpush/
 
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
 
    <Directory /var/www/zpush/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
 
    ErrorLog /var/log/apache2/error.log
    LogLevel warn
    CustomLog /var/log/apache2/ssl_access.log combined
    Alias /doc/ "/usr/share/doc/"
 
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>
 
    Alias /Microsoft-Server-ActiveSync /var/www/zpush/index.php
    php_flag short_open_tag on
    php_flag magic_quotes_runtime off
    php_flag register_globals off
    php_flag magic_quotes_gpc off
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/apache2/ssl/push.crt
    SSLCertificateKeyFile /etc/apache2/ssl/push.key
    SSLProxyCACertificateFile /etc/apache2/ssl/push.crt
 
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
 
    BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
</VirtualHost>

Ensuite on crée un dossier « ssl » dans « /etc/apache2/ » pour y placer nos différents certificats :

mkdir /etc/apache2/ssl

Il faut alors se placer dedans et créer nos fichiers de certificat .crt | .key | .crt :

openssl genrsa -out zpush.key 2048
openssl req -new -key zpush.key -out zpush.csr
openssl x509 -req -days 365 -in zpush.csr -signkey zpush.key -out zpush.crt

Afin de rendre actif notre vhost « ssl.conf » on effectue les commande suivantes :

a2ensite ssl.conf
a2enmod ssl.conf
service apache2 restart

Configuration de Z-push

Pour cette partie il faudra éditer le fichier de configuration « /var/www/zpush/config.php » et ajouter cette partie :

//  Backend settings

    // The data providers that we are using (see configuration below)
    define('BACKEND_PROVIDER', "BackendZimbra");
 
    // ************************
    //  BackendZarafa settings
    // ************************
    // Defines the server to which we want to connect
    
    define('MAPI_SERVER', 'file:///var/run/zarafa');
 
    // ************************
    //  BackendZimbra settings
    // ************************
   <strong> define('ZIMBRA_URL','https://zimbra.domaine.com');</strong>
    define('ZIMBRA_USER_DIR','zimbra');
    define('ZIMBRA_SYNC_CONTACT_PICTURES', true);
    define('ZIMBRA_VIRTUAL_CONTACTS',true);
    define('ZIMBRA_VIRTUAL_APPOINTMENTS',true);
    define('ZIMBRA_VIRTUAL_TASKS',true);
    define('ZIMBRA_IGNORE_EMAILED_CONTACTS',true);
    define('ZIMBRA_HTML',true);
    define('ZIMBRA_ENFORCE_VALID_EMAIL',false);
    define('ZIMBRA_SMART_FOLDERS',true);

Remplacez à la ligne « ZIMBRA_URL »  l’adresse « zimbra.domaine.com » par votre serveur Zimbra.

Vous devrez également modifier la ligne suivante en fonction de votre emplacement géographique :

define('TIMEZONE', 'Europe/Paris');

Pour éviter tout problème il sera nécessaire d’installer le paquet suivant :

apt-get install z-push-config-apache

Ensuite on modifie les droits sur /var/www de façon récursive :

chown -R www-data:www-data /var/www/

Et enfin on crée un dossier de logs :

mkdir /var/log/z-push
chown -R www-data:www-data /var/log/z-push

Test de l’interface web

Lancez un navigateur web et entrez l’adresse de votre serveur ZPush (https://zpush.domaine.com), la page suivante doit s’ouvrir :

Synchronisation mails calendriers contacts de Zimbra via Z-push

Entrez le nom et le mot de passe d’un compte mail, si tout est bon, la page suivante doit apparaitre :

Configuration Zimbra

Il ne faudra pas oublier sur le Zimbra d’exécuter la commande suivante en tant qu’utilisateur Zimbra :

zmprov mcf +zimbraHttpThrottleSafeIPs 192.168.33.179

Celle-ci permet de rajouter l’IP du Z-Push sur la whitelist du denial-of-service filter or DoSFilter. Ceci afin que Z-Push ne soit pas identifié comme un faux positif.

Voici le genre d’erreur qui peut arriver si l’on ne fait pas la commande :

SOAP FAULT: HTML Error Returned - Error 429 Too Many Requests - Enable ZIMBRA_DEBUG for more details - returning { false }

Il ne vous restera plus qu’à configurer vos différents appareils avec l’adresse du serveur Z-Push.

Votre synchronisation des mails, calendriers, et contacts de Zimbra via Z-push est à présent fonctionnelle !

4 réponses sur “Synchronisation mails / calendriers / contacts de Zimbra via Z-Push”

  1. Bonjour,
    j’ai suivi votre tuto à la lettre et tout marche bien, j’ai bien :
    Z-Push – Open Source ActiveSync

    Version 2.3.6
    GET not supported

    This is the Z-Push location and can only be accessed by Microsoft ActiveSync-capable devices

    More information about Z-Push can be found at:
    Z-Push homepage
    Z-Push download page
    Z-Push Bugtracker
    Z-Push Wiki and Roadmap

    All modifications to this sourcecode must be published and returned to the community.
    Please see AGPLv3 License for details.

    Mais comment fait-on pour se connecter ensuite sur outlook 2016 via exchange ?

    Rien ne marche après ???

    Auriez vous une idée ?

  2. Dans les logs je trouve cela :
    09/06/2017 13:55:43 [23097] [FATAL] [] FatalException: Requested the Z-Push URL without the required GET parameters – code: 0 – file: /usr/share/z-push/index.php:71
    09/06/2017 13:55:43 [23097] [FATAL] [] Exception: (FatalException) – Requested the Z-Push URL without the required GET parameters

    1. Bonjour Philippe,
      ActiveSync n’est pas que pour smartphones, en effet je l’utilise via Outlook 2013, cependant lors du choix de service au moment de la création du compte, il faut choisir « Service compatible Outlook.com ou Exchange ActiveSync » et non pas « Microsoft Exchange Server ou service compatible ».
      Je ne sais pas exactement comment cela se présente dans Outlook 2016 mais j’imagine que cela diffère peu.
      Cordialement,

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *