Faire cohabiter Apache et Zimbra OpenSource

Billet posté le 26 janv. 2014

Introduction

Sur mon serveur dédié perso j’héberge mon blog ainsi que d’autres sites mais surtout j’héberge ma messagerie personnelle : lovetux.net. C’est un Zimbra OpenSource que j’utilise couplé avec zpush pour avoir une synchronisation agenda, mail et contacts.

Problématique

La problématique est la suivante : je veux accéder au webmail de Zimbra via le protocole HTTPS.

Seulement en faisant écouter Zimbra sur le port 443 je ne peux même pas faire écouter d’autres applications web en HTTPS.

La réponse

La réponse consiste à se servir d’Apache en tant que reverse proxy, le faire écouter sur HTTPS et que Zimbra soit sur autre port.

Les versions

Operating System

root@heretic:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 12.04.4 LTS
Release:	12.04
Codename:	precise
root@heretic:~#

Apache

root@heretic:~# dpkg -l | grep apache
ii  apache2                              2.2.22-1ubuntu1.4                       Apache HTTP Server metapackage
ii  apache2-mpm-prefork                  2.2.22-1ubuntu1.4                       Apache HTTP Server - traditional non-threaded model
ii  apache2-utils                        2.2.22-1ubuntu1.4                       utility programs for webservers
ii  apache2.2-bin                        2.2.22-1ubuntu1.4                       Apache HTTP Server common binary files
ii  apache2.2-common                     2.2.22-1ubuntu1.4                       Apache HTTP Server common files
ii  libapache2-mod-php5                  5.3.10-1ubuntu3.9                       server-side, HTML-embedded scripting language (Apache 2 module)
ii  zimbra-apache                        8.0.6.GA.5922.UBUNTU12.64               Best email money can buy
root@heretic:~#

Zimbra

zimbra@heretic:~$ zmcontrol -v
Release 8.0.6.GA.5922.UBUNTU12.64 UBUNTU12_64 FOSS edition.
zimbra@heretic:~$

Un peu de configuration côté Zimbra

Toutes les commandes ci-dessous sont à exécuter sous l’utilisateur zimbra.

su - zimbra
zmtlsctl http
zmprov ms $(zmhostname) zimbraMailPort 81
zmcontrol restart

Cela revient à dire à Zimbra de n’écouter qu’en HTTP et sur le port 81. On recharge les fichiers de configurations pour la prise en compte de la modification.

Un peu de configuration côté Apache

Pour Apache voici les points d’attention à prendre en compte :

  • générer / utiliser un certificat SSL auto-signé ou commercial si vous avez les moyens
  • avoir activé des virtualhosts
  • activer le module proxy dans apache

Le point d’entrée que j’utiliserais est le suivant : https://webmail.lovetux.net

SSL

mkdir /etc/apache2/ssl
openssl req -x509 -nodes -days 1000 -newkey rsa:2048 -keyout webmail.lovetux.net.key -out webmail.lovetux.net.crt

Répondre aux différentes questions, le plus important étant de mettre dans Common Name le hostname cité plus haut : webmail.lovetux.net.

Activons le module SSL dans Apache

a2enmod ssl
/etc/init.d/apache2 force-reload

Enfin, il faut dire à Apache d’écouter sur le port 443 :

Listen 46.105.124.192:80
Listen 46.105.124.192:443
Listen 2001:41d0:2:ebc0::1:80
Listen 2001:41d0:2:ebc0::1:443

SSLStrictSNIVHostCheck off

Dans cette section on liste explicitement la ou les adresses IP associées au serveur ainsi que le port d’écoute : 80 et 443.

Le reverse proxy + SSL dans Apache

Bien penser à activer les modules ci-dessous :

a2enmod proxy proxy_http
/etc/init.d/apache2 force-reload

Le virtualhost défini en IPv4 et IPv6 :

root@heretic:/etc/apache2/sites-available# cat webmail.lovetux.net
<VirtualHost 46.105.124.192:443>
        ServerName webmail.lovetux.net
        DocumentRoot /tmp
        CustomLog /var/log/apache2/webmail.lovetux.net-access.log common
        ErrorLog /var/log/apache2/webmail.lovetux.net-error.log
	SSLEngine on
	SSLCertificateFile /etc/apache2/ssl/webmail.lovetux.net.crt
	SSLCertificateKeyFile /etc/apache2/ssl/webmail.lovetux.net.key
	ProxyPass / http://webmail.lovetux.net:81/
	ProxyPassReverse / http://webmail.lovetux.net:81/
</VirtualHost>

<VirtualHost [2001:41d0:2:ebc0::1]:443>
        ServerName webmail.lovetux.net
        DocumentRoot /tmp
        CustomLog /var/log/apache2/zpush.lovetux.net-access.log common
        ErrorLog /var/log/apache2/webmail.lovetux.net-error.log
	SSLEngine on
	SSLCertificateFile /etc/apache2/ssl/webmail.lovetux.net.crt
	SSLCertificateKeyFile /etc/apache2/ssl/webmail.lovetux.net.key
        ProxyPass / http://webmail.lovetux.net:81/
        ProxyPassReverse / http://webmail.lovetux.net:81/
</VirtualHost>
root@heretic:/etc/apache2/sites-available#

Ce qu’il faut adapter :

  • les adresses IP
  • le serverName
  • la valeur du ProxyPass
  • la valeur du ProxyPassReverse

Il faut maintenant activer le virtualhost :

a2ensite webmail.lovetux.net
apache2ctl configtest
/etc/init.d/apache2 force-reload

Tester

Prenez votre brouteur préféré puis saisissez le nom de votre serveur en utilisant le protocole HTTPS.

Zpush

Présentation de zpush : ici

On va aussi faire écouter zpush sur HTTPS :

<VirtualHost 46.105.124.192:443>
        ServerName zpush.lovetux.net
        DocumentRoot /home/www/hindy/zpush.lovetux.net
        CustomLog /var/log/apache2/zpush.lovetux.net-ssl-access.log common
        ErrorLog /var/log/apache2/zpush.lovetux.net-ssl-error.log
        Alias /Microsoft-Server-ActiveSync /home/www/hindy/zpush.lovetux.net/index.php
        <Directory /home/www/hindy/zpush.lovetux.net>
                AllowOverride All
        </Directory>
        php_flag magic_quotes_gpc off
        php_flag register_globals off
        php_flag magic_quotes_runtime off
        php_flag short_open_tag on
	SSLEngine on
	SSLCertificateFile /etc/apache2/ssl/zpush.lovetux.net.crt
	SSLCertificateKeyFile /etc/apache2/ssl/zpush.lovetux.net.key
</VirtualHost>

<VirtualHost [2001:41d0:2:ebc0::1]:443>
        ServerName zpush.lovetux.net
        DocumentRoot /home/www/hindy/zpush.lovetux.net
        CustomLog /var/log/apache2/zpush.lovetux.net-ssl-access.log common
        ErrorLog /var/log/apache2/zpush.lovetux.net-ssl-error.log
        Alias /Microsoft-Server-ActiveSync /home/www/hindy/zpush.lovetux.net/index.php
        <Directory /home/www/hindy/zpush.lovetux.net>
                AllowOverride All
        </Directory>
        php_flag magic_quotes_gpc off
        php_flag register_globals off
        php_flag magic_quotes_runtime off
        php_flag short_open_tag on
	SSLEngine on
	SSLCertificateFile /etc/apache2/ssl/zpush.lovetux.net.crt
	SSLCertificateKeyFile /etc/apache2/ssl/zpush.lovetux.net.key
</VirtualHost>

Ne pas oublier de :

  • générer un nouveau certif SSL (ici le nom du vhost est zpush.lovetux.net)
  • activer le nouveau vhost : a2enmod
  • vérifier la configuration du vhost via apache2ctl configtest
  • recharger la configuration : /etc/init.d/apache2 force-reload