Utilisateur d'origine : Pierre
Comme nous avons pu le voir dans le tutoriel dédié à son installation, Zimbra est un outil très puissant et très complet, qui se présente comme une parfaite alternative à Microsoft Exchange sous Linux, par exemple.
Parfaite ? Pas si sûr. Si il y a bien une chose que Microsoft a conçu et implémenté dans Exchange, et qui n'existe pas dans la version communautaire de Zimbra, c'est ActiveSync.
ActiveSync est un serveur jouant le rôle de passerelle entre le serveur de collaboration et le client. Son rôle ? Permettre une synchronisation performante des différents éléments (calendrier, mail, contacts, ...), et proposer un nouveau type de récupération des mails (et autres éléments), sur le même principe que les notifications Push.
En clair, le client mail ne sera pas obligé d'actualiser toutes les X minutes son contenu, ActiveSync se charge de le prévenir dès qu'une actualisation est nécessaire. Avec plusieurs comptes sur un téléphone, cela permet de faire des économies de batterie, puissance et trafic.
Heureusement, il existe une alternative (open source) à ActiveSync pour Zimbra : Z-Push, dont le nom est assez évocateur de sa fonction.
Pré-requis
Z-Push nécessite de tourner sur un serveur web sur les ports 80 et 443 (c'est l'un des principaux inconvénients d'ActiveSync : on peut difficilement choisir le port de son serveur). Le problème est que Zimbra a lui aussi un serveur web (plus ou moins propriétaire, basé sur Nginx), sur ces ports.
Deux solutions s'offrent à nous. Soit on lance Z-Push sur un deuxième petit serveur (ou un hébergement web, à condition que l'hébergeur vous y autorise), soit on essaye de ruser.
su - zimbra
zmprov ms $(zmhostname) zimbraMailSSLProxyPort 8443
zmprov ms $(zmhostname) zimbraMailProxyPort 8080
zmcontrol restart
exit
Ces commandes vont permettre de changer le port du serveur web de Zimbra de 80 à 8080 (vous pouvez choisir la valeur que vous souhaitez), et la connexion au webmail via HTTPS de 443 à 8443.
Après cette modification, seule la connexion au webmail sera modifiée, vous pourrez y accéder via https://domain.tld:8443
.
Note : Sur le papier, on devrait pouvoir se servir du serveur web de Zimbra pour installer Z-Push. Mais cela nécessite de modifier en profondeur l'installation, et toute mise à jour risquerait d'écraser Z-Push voire de casser l'installation. A éviter donc.
Note pour les utilisateurs de Nginx : Dans la suite de ce tutoriel, je travaillerai avec Apache. En effet, Zimbra tournant déjà sur un serveur web Nginx, cela risque de créer des problèmes sinon. De toute façon, le serveur web n'est pas important pour Z-Push.
Installation
Z-Push n'est pas présent dans les dépôts officiels, nous devons donc ajouter le dépôt de Z-Push. Pour ce faire, rendez-vous ici, et copiez le lien correspondant à votre distribution. Ensuite, ajoutez le au fichier /etc/apt/sources.list.d/z-push.list
(qu'il faut créer) comme ceci pour Ubuntu 16.04 par exemple :
deb http://repo.z-hub.io/z-push:/final/Ubuntu_16.04/ /
N'oubliez pas le deb
et le slash final. Puis, retournez sur la page du dépôt de Z-Push, entrez dans le répertoire de votre distribution, et localisez l'adresse du fichier Release.key
. Installez cette clé grâce à la commande suivante (exemple pour Ubuntu 16.04), puis mettez à jour votre liste de paquets, avant d'installer Z-Push (tout ce dont il a besoin s'installera avec) :
wget -qO - http://repo.z-hub.io/z-push:/final/Ubuntu_16.04/Release.key | apt-key add -
apt-get update
apt-get install z-push-config-apache php-curl z-push-ipc-sharedmemory
Normalement l'installation se termine par un avertissement, le fichier de logs n'a pas pu être créé. Il suffit de le créer et de donner les bonnes permissions, puis de recharger Apache :
touch /var/log/z-push/z-push.log
chown www-data /var/log/z-push/z-push.log
service apache2 reload
Z-Push s'est installé dans /usr/share/z-push/
. Il va falloir configurer Apache pour ce répertoire. Pour cela, éditez le fichier /etc/apache2/sites-available/000-default.conf
:
Rechargeons une dernière fois Apache :
service apache2 reload
Petit détail, obligatoire : il faut un certificat SSL pour Z-Push. Je vous recommande d'utiliser Letsencrypt. L'avantage, c'est que le certificat utilisé pour Z-Push peut également être déployé sur toute l'installation :
apt-get install letsencrypt certbot python-certbot-apache
letsencrypt
Entrez votre email, acceptez les conditions d'utilisation, et sélectionnez votre domaine. C'est tout !
Voilà, nous en avons terminé avec l'installation de Z-Push sur Apache. Il nous reste juste à le configurer avec Zimbra. Z-Push a besoin d'une sorte de petit plugin pour fonctionner avec Zimbra, repérez le lien de la dernière version ici, téléchargez-le et décompressez-le :
cd /usr/share/z-push/backend/
wget http://downloads.sourceforge.net/project/zimbrabackend/Release68/zimbra68.tgz
tar -zxvf zimbra68.tgz
mv zimbra68 zimbra
rm zimbra68.tgz
Enfin, passons à la (courte) configuration de Z-Push. Editons le fichier /usr/share/z-push/config.php
et définissons les propriétés suivantes :
define('PROVISIONING', false);
define('LOOSE_PROVISIONING', true);
define('TIMEZONE', 'Europe/Paris');
define('BACKEND_PROVIDER', 'BackendZimbra');
Un dernier réglage minuscule, il faut indiquer au plugin où se trouve Zimbra. Cette configuration se fait dans /usr/share/z-push/backend/zimbra/config.php
(la ligne est à dé-commenter ou à créer) :
define('ZIMBRA_URL', 'https://domain.tld:8443');
Remplacez évidemment domain.tld
par votre nom de domaine. Et pour éviter tout problème, on définit les permissions du répertoire de Z-Push :
chown -R www-data /usr/share/z-push/
Tests
Le premier test consiste à se connecter à https://domain.tld/Microsoft-Server-ActiveSync/
. Si un nom d'utilisateur et un mot de passe vous sont demandés, tout est bon ! Vous pouvez passer à la configuration des clients.
Sinon, plusieurs cas de figure sont possibles :
- Vous arrivez sur une erreur 404 de Nginx, cela veut dire que Zimbra écoute toujours le port 443, reprenez les pré-requis, puis reconfigurez Apache en HTTPS avec un certificat.
- Vous arrivez sur une erreur 404 d'Apache, cela veut dire que la redirection n'est pas active ou que le
DocumentRoot
est mal défini. Reprenez la configuration d'Apache. Si vous ne savez pas si l'erreur vient de Nginx ou Apache, testez l'adresse https://domain.tld/
. Si une page de connexion Zimbra apparaît, c'est que l'erreur est communiquée par Nginx (point précédent), sinon Apache.
- Rien ne charge, cela veut dire qu'Apache n'écoute pas sur le port 443, mais que Zimbra a bien changé de port. Reprenez l'installation de Z-Push, ou seulement la configuration du HTTPS si vous obtenez un résultat positif en essayant en HTTP
- Pour un diagnostic détaillé, je vous conseille d'utiliser l'outil de Microsoft, sélectionnez Exchange ActiveSync et utilisez les paramètres suivants :

Sinon, n'hésitez pas à poster votre problème sur ce sujet.
Ajout de l'adresse IP de Z-Push dans la whitelist Zimbra
Il est nécessaire d'ajouter l'adresse IP du serveur Z-Push dans la whitelist du système anti-DDoS de Zimbra. Ceci peut être fait grâce aux commandes suivantes :
su - zimbra
zmprov mcf zimbraHttpThrottleSafeIPs XXX.XXX.XXX.XXX
zmmailboxdctl restart
exit
Remplacez évidemment les croix par l'adresse IP du serveur Z-Push.
Si cette opération n'est pas réalisée, Z-Push sera inutilisable et l'erreur HTTP 429 sera retrouvée dans les logs.
Configuration des clients mail
La configuration des clients mail se fait comme si vous configuriez un serveur Exchange, avec en serveur : domain.tld
, et en nom d'utilisateur user@domain.tld
.
Note : en raison de la version d'ActiveSync émulée par Z-Push, les clients Outlook antérieurs à Outlook 2013 ne sont malheureusement pas compatibles.
Désinstallation
Si vous souhaitez revenir à une version de Zimbra normale, il suffit de supprimer les paquets installés au cours de ce tutoriel, et de rétablir les ports d'origine (80 et 443) grâce aux commandes présentées en pré-requis.