«

»

Oct 13 2012

[Tuto] Zimbra: Installation et configuration de Zpush 2

Bonjour, cela faisait longtemps que je n’avais pas fait de tutoriel pour Zimbra.

Dans ce tuto je vais vous expliquer la configuration de Zpush 2 pour Zimbra 8 sous Ubuntu 12.04 LTS

Qu’est-ce que ZPush?

La version payante de Zimbra (NE) permet la synchronisation des mails, des contacts et du calendrier Zimbra sur les terminaux mobiles.
Zpush est un projet Open-source qui permet de mettre en place un serveur ActiveSync pour effectuer une synchronisation entre Zimbra OSE et divers terminaux mobiles compatibles ActiveSync (IOS, Android, WIndows Phones etc..)

Principe de fonctionnement de Zpush

Fonctionnement de Zpush

Fonctionnement de Zpush

Comme vous pouvez le voir il nous faut un second serveur en plus du serveur Zimbra pour mettre en place Zpush.

Dans ce tuto je vais donc utiliser:

  • Un serveur Zimbra 8 OSE sous Ubuntu 12.04 LTS
  • Un serveur Zpush sous Ubuntu 12.04 LTS aussi (Histoire de changer de Debian)

Zpush dans sa version 2.0.4-1497 et zimbrabackend pour Zpush 2

Installation de Zpush 2

Installation des prérequis

Pour que zpush fonctionne il faut installer quelques prérequis:

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

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

Téléchargement de Zpush

wget http://zarafa-deutschland.de/z-push-download/final/2.0/z-push-2.0.4-1497.tar.gz

Téléchargement de Zimbra Backend

Vous pouvez télécharger Zimbra Backend ici:
http://zimbrabackend.svn.sourceforge.net/viewvc/zimbrabackend/zimbra-backend/branches/z-push-2/

Cliquez sur « Download GNU tarball« , recuperez l’archive téléchargée et envoyez la sur votre machine.

Nous allons installer Zpush dans le dossier /var/www/

Donc voici les commandes à taper:

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

Configuration d’Apache pour Zpush

Nous allons maintenant editer les fichiers de configuration d’Apache par défaut pour faire fonctionner zpush

sudo nano /etc/apache2/sites-available/default

Et voici ce qu’il faut mettre dedans:

<VirtualHost *:80>
ServerName push.test.com
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>

Puis nous allons aussi créer un vhost prenant en charge le SSL

sudo nano /etc/apache/sites-available/ssl

Et on le remplie comme ceci:

<VirtualHost *:443>
	ServerName push.test.com
	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>

On créer un dossier pour mettre les différents certificats d’apache et on crée les certificats:

sudo mkdir /etc/apache2/ssl
cd /etc/apache2/ssl
sudo openssl genrsa -out push.key 2048
sudo openssl req -new -key push.key -out push.csr
sudo openssl x509 -req -days 365 -in push.csr -signkey push.key -out push.crt

Enfin on active le vhost ssl et le mod ssl et on redémarre Apache

sudo a2ensite ssl
sudo a2enmod ssl
sudo service apache2 restart

Maintenant on configure Zpush pour Zimbra

sudo nano /var/www/zpush/config.php

Voici mon fichier de configuration de zpush

<?php
/**********************************************************************************
 *  Default settings
 */
    // Defines the default time zone, change e.g. to "Europe/London" if necessary
    define('TIMEZONE', 'America/Montreal');

    // Defines the base path on the server
    define('BASE_PATH', dirname($_SERVER['SCRIPT_FILENAME']). '/');

    // Try to set unlimited timeout
    define('SCRIPT_TIMEOUT', 0);

    //Max size of attachments to display inline. Default is 1MB
    define('MAX_EMBEDDED_SIZE', 2097152);

/**********************************************************************************
 *  Default FileStateMachine settings
 */
    define('STATE_DIR', '/var/www/zpush/');

/**********************************************************************************
 *  Logging settings
 */
    define('LOGFILEDIR', '/var/log/z-push/');
    define('LOGFILE', LOGFILEDIR . 'z-push.log');
    define('LOGERRORFILE', LOGFILEDIR . 'z-push-error.log');
    define('LOGLEVEL', LOGLEVEL_INFO);
    //Valeur par defaut : 'LOGAUTHFAIL', false
    define('LOGAUTHFAIL', true);

    // To save e.g. WBXML data only for selected users, add the usernames to the array
    // The data will be saved into a dedicated file per user in the LOGFILEDIR
    define('LOGUSERLEVEL', LOGLEVEL_DEVICEID);
    $specialLogUsers = array();

/**********************************************************************************
 *  Mobile settings
 */
    // Device Provisioning
    define('PROVISIONING', true);

    // This option allows the 'loose enforcement' of the provisioning policies for older
    // devices which don't support provisioning (like WM 5 and HTC Android Mail) - dw2412 contribution
    // false (default) - Enforce provisioning for all devices
    // true - allow older devices, but enforce policies on devices which support it
    define('LOOSE_PROVISIONING', false);

    // Default conflict preference
    // Some devices allow to set if the server or PIM (mobile)
    // should win in case of a synchronization conflict
    //   SYNC_CONFLICT_OVERWRITE_SERVER - Server is overwritten, PIM wins
    //   SYNC_CONFLICT_OVERWRITE_PIM    - PIM is overwritten, Server wins (default)
    define('SYNC_CONFLICT_DEFAULT', SYNC_CONFLICT_OVERWRITE_PIM);

    // Global limitation of items to be synchronized
    // The mobile can define a sync back period for calendar and email items
    // For large stores with many items the time period could be limited to a max value
    // If the mobile transmits a wider time period, the defined max value is used
    // Applicable values:
    //   SYNC_FILTERTYPE_ALL (default, no limitation)
    //   SYNC_FILTERTYPE_1DAY, SYNC_FILTERTYPE_3DAYS, SYNC_FILTERTYPE_1WEEK, SYNC_FILTERTYPE_2WEEKS,
    //   SYNC_FILTERTYPE_1MONTH, SYNC_FILTERTYPE_3MONTHS, SYNC_FILTERTYPE_6MONTHS
    //define('SYNC_FILTERTIME_MAX', SYNC_FILTERTYPE_ALL);
    define('SYNC_FILTERTIME_MAX', SYNC_FILTERTYPE_3MONTHS);

    // Interval in seconds before checking if there are changes on the server when in Ping.
    // It means the highest time span before a change is pushed to a mobile. Set it to
    // a higher value if you have a high load on the server.
    define('PING_INTERVAL', 30);

    // Interval in seconds to force a re-check of potentially missed notifications when
    // using a changes sink. Default are 300 seconds (every 5 min).
    // This can also be disabled by setting it to false
    define('SINK_FORCERECHECK', 300);

/**********************************************************************************
 *  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
    // ************************
    define('ZIMBRA_URL','https://zimbra.test.com');
    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);

?>

Les lignes que vous avez à changer sont:

define('TIMEZONE', 'America/Montreal');

Si vous êtes en France mettez ‘Europe/Paris’
et

define('ZIMBRA_URL','https://zimbra.test.com');

Remplacez « zimbra.test.com » par l’URL de votre serveur Zimbra.

Une fois cela fait enregistrez le fichier de conf et tapez la commande suivante:

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

Enfin nous allons créer le dossier pour les fichier de log de Zpush dans le dossier var/log

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

Configuration des Smartphones

La configuration des smartphones sous Android se fait comme avec des comptes mail de types Exchanges.

Testé sous Android 4.0.4 (Ice Cream Sandwich) et 4.1.1 (Jelly Bean)

Configuration Android

Configuration Android

Dans serveur, au lieu de mettre le FQDN de votre serveur Zimbra, mettez le FQDN de votre serveur Zpush.

Sources:
http://geekdefrance.fr/2011/12/27/tuto-push-mail-sur-un-serveur-zimbra-ose-via-z-push/
http://www.zimbrafr.org/forum/topic/5123-installation-de-z-push-2/

(3 commentaires)

  1. Ced91

    Super. tout fonctionne sous VMware WK9.
    J’ai installé la dernière version de Zpush 2.0.7.1690 et la synchro EAS fonctionne très bien.
    Je ne sais pas par contre comment le push opère… j’ai l’impression que le serveur push ne fait pas d’envoie de lui même…
    Merci à toi Denis pour ce tuto qui m’a grandement facilité l’installation.
    Ce serait bien de faire un suivi pour les prochaines versions?

    Cdlt.

    Pour répondre à Olvier…:
    Le tuto c’est 2 machines (vm ou pas) Linux: Zimbra port 4443, Zpush 443 pour les redirections vers ton réseau interne, le proxy apache c’est ton affaire.
    Pas besoin d’autre port à rediriger que les 4443 et 443 vers tes deux machines, celà te laisse le 80 pour ton apache.
    Le 443 sur le Zpush pour te donner la plus grande compatibilité avec les applications des mobiles qui ne permettent pas toujours de configurer le port en mode EAS.

  2. MrassoL

    Merci pour ce tuto facile … tout marche nickel !

  3. Olvier

    Bonjour merci pour ce tuto que je vais tester sous peu.

    Par contre je me pose une question, voici mon infra

    1 serveur proxy apache (pour mon serveur web malheureusement pas pour Zimbra idéalement j’aimerai tout faire passer par lui mais je n’ai rien trouver pour m’aider.)
    1 serveur web apache (écoute port 80)
    1 serveur Zimbra (accès au webmail en https (donc port 443)
    le tout derrière une Freebox.
    la redirection du port 80 de ma freebox se fait sur mon proxy apache et le 443 sur mon serveur Zimbra.

    Quid des port utilisés pour mon serveur zpush ?

Laisser un commentaire

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

Lire les articles précédents :
Sondage
Un petit sondage

Bonjour à tous, Je vous propose aujourd'hui de participer à un petit sondage au niveau de votre satisfaction à propos...

Fermer