Mise en place nginx + https + zpush avec Zimbra OpenSource
Contexte
J’utilise Zimbra en version OpenSource pour ma messagerie personnelle, de ma famille ainsi que pour quelques amis.
Nous allons décrire très rapidement ici la mise en place d’un reverse proxy nginx avec utilisation de HTTPS afin de pouvoir fournir une synchronisation de type ActiveSync à un téléphone intelligent.
Certificat SSL
J’utilise startssl qui a le mérite de fournir un certificat SSL gratuitement et bien reconnu dans les navigateurs du marché.
Le processus est le suivant :
- inscrivez-vous sur startssl
- générer une clé privée
- générer une demande de certificat (CSR)
- soumettez votre CSR à startssl et en échange vous obtenez un certificat SSL (CRT)
Génération de la clé privée ainsi que du CSR :
openssl req -new -newkey rsa:2048 -nodes -sha256 -out zpush.lovetux.net.csr -keyout zpush.lovetux.net.key -subj "/C=FR/ST=Indre-Et-Loire/L=Tours/O=Lovetux/CN=zpush.lovetux.net"
Le fichier à soumettre est “zpush.lovetux.net.csr” et surtout pas le fichier zpush.lovetux.net.key qui est la clé privée. La clé privée comme son nom l’indique ne doit jamais sortir de votre serveur et ne jamais être divulguée.
Votre autorité de certification, ici startssl, va donc générer votre certificat SSL.
Le VirtualHost nginx
Nous allons créer le dossier /etc/nginx/ssl afin de pouvoir y déposer la clé privée, ainsi que le certificat SSL.
server {
listen 443;
listen [::]:443;
server_name zpush.lovetux.net;
client_max_body_size 100m;
access_log /var/log/nginx/zpush.lovetux.net.access.log;
error_log /var/log/nginx/zpush.lovetux.net.error.log;
root /srv/sites/hindy/zpush.lovetux.net;
location /Microsoft-Server-ActiveSync {
rewrite ^(.*)$ /index.php last;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
ssl on;
ssl_certificate /etc/nginx/ssl/zpush.lovetux.net.chained.crt;
ssl_certificate_key /etc/nginx/ssl/zpush.lovetux.net.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
}
Il est à noter plusieurs éléments dans ce fichier de configuration :
- nginx écoute à la fois en ipv4 et en ipv6 (on est in ou on ne l’est pas)
- le serveur répond au nom de zpush.lovetux.net
- zpush est déployé dans un dossier particulier (/srv/sites/hindy/zpush.lovetux.net)
- utilisation de php5 fpm avec une socket unix
- on utilise ssl en précisant la clé privée ainsi que le certificat SSL
- on désactive / active un certain nombre d’algorithmes qui permettent d’avoir une sécurité renforcée dans les échanges entre le client et le serveur (on se base sur ssllabs)
Activation du VirtualHost
ln -s /etc/nginx/sites-available/zpush.lovetux.net /etc/nginx/sites-enabled/zpush.lovetux.net
nginx -t
/etc/init.d/nginx restart
Configuration du serveur Zimbra
Le serveur Zimbra est sur le même serveur que nginx. Du coup il peut y avoir un conflit de port. Voici comment s’en sortir :
su - zimbra
zmprov ms $(zmhostname) zimbraMailPort 81
zmcontrol restart
Configuration du backend Zimbra pour zpush
Dans le fichier de configuration appelé config.php (du backend Zimbra pour zpush) voici les informations importantes à configurer :
define('TIMEZONE', 'Europe/Paris');
define('ZIMBRA_URL','http://192.168.0.252:81');
Configuration du téléphone intelligent
Nous avons un serveur nginx en tant que reverse proxy qui est capable de faire passer le serveur Zimbra OpenSource via zpush en tant que serveur Exchange. Cela veut donc dire que notre téléphone intelligent est donc capable d’être paramétré en utilisant le protocole ActiveSync avec le nom de serveur du VirtualHost, son adresse de messagerie en tant que login ainsi que son mot de passe.
Les logs
Il existe plusieurs fichiers de logs :
- ceux de nginx
- ceux de zpush
- ceux de Zimbra
Logs de nginx
Les logs de nginx (du moins sur ma distribution Linux) sont dans /var/log/nginx/
Logs de zpush
Par défaut les logs de zpush sont dans /var/log/z-push/
Logs de Zimbra
Les logs intéressants de Zimbra seront /opt/zimbra/log/audit.log et /opt/zimbra/log/mailbox.log