Installation d'un serveur de mail Zimbra 8.x sous ubuntu server 16.04 LTS
Préparation
Vous pouvez supprimer quelques paquets inutiles :
apt-get install aptitude aptitude remove ubuntu-server aptitude purge open-iscsi mdadm lvm2 aptitude purge lxcfs lxc-common lxd liblxc1 aptitude remove snapd
Puis configurez correctement l'hostname de votre serveur dans /etc/hosts
185.112.24.150 srvmail.domain.tld srvmail 2001:21c1:3:123d::150 srvmail.domain.tld srvmail
echo ark > /etc/hostname
Il faut aussi que votre serveur résolve correctement les noms de domaine donc vérifiez votre configuration dans /etc/resolv.conf
Installation
Téléchargez la dernière version de Zimbra 8 pour ubuntu.
Vous pouvez trouver les liens de téléchargement sur :
- Un site avec un formulaire débile à remplir à chaque fois : https://www.zimbra.com/downloads/zimbra-collaboration-open-source/
- Un site sans formulaire débile à remplir : https://zimbra.org/download/zimbra-collaboration
Extrayez l'archive et lancez l'installeur :
./install.sh
Installez tous les composants sauf dnscache et snmp, sauf si vous souhaitez les utiliser évidemment.
L'installation est assez triviale.
Lors de la configuration, la seule obligation est de définir le mot-de-passe de l'utilisateur admin de zimbra.
Si vous souhaitez que zimbra fonctionne en ipv4 et ipv6, pensez à passer le mode ip à both
.
Pour certaines fonctions de management, Zimbra a besoin de pouvoir se connecter en ssh (avec une clé privé). Si vous utilisez des directives openssh limitant l'accès ssh (allowusers
par exemple), vous devez les adapter afin de permettre les connexions ssh à l'utilisateur Zimbra.
Une fois l'installation terminée, la console d'administration est accessible en HTTPs sur le port 7071
Certificat SSL via une CA
Les fichiers nécessaires au déploiement du certificat ssl dans zimbra sont les suivants :
root_ca.pem
: le certificat rootint_ca.pem
: le certificat de l'autorité intermédiaire ayant déployé le certificat zimbrazimbra.pem
: le certificat zimbra généré par la CA intermédiairezimbra.key
: la clé privé zimbra généré par la CA intermédiaire
Nous allons maintenant déployer le certificat ssl dans zimbra.
Pour commencer, créez le fichier ca_chain.pem
contenant la chaine de certification complète :
cat root_ca.pem int_ca.pem > ca_chain.pem
Déplacez la clé privée :
mv zimbra.key /opt/zimbra/ssl/zimbra/commercial/commercial.key
Vous pouvez vérifier que vos certificats sont valides avec zmcertmgr
via l'utilisateur zimbra (su - zimbra
) :
/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/zimbra/commercial/commercial.key zimbra.pem ca_chain.pem
Puis déployez le certificat dans zimbra avec zmcertmgr
:
/opt/zimbra/bin/zmcertmgr deploycrt comm zimbra.pem ca_chain.pem
Enfin, ajoutez manuellement les certificats dans la base de donnée de java (le password est changeit
par défaut) :
keytool -keystore /opt/zimbra/common/lib/jvm/java/lib/security/cacerts -import -alias rootca -file /path/to/root_ca.pem
Cette dernière étape est nécessaire pour que les outils d'administration java de zimbra acceptent d'interagir avec votre serveur
Enfin, redémarrez zimbra :
/etc/init.d/zimbra restart
Certificat SSL avec LetsEncrypt
Initialisation
Le client certbot
de LetsEncrypt fourni son propre dépôt pour ubuntu. Nous allons l'utiliser pour installer le client :
apt-get install software-properties-common add-apt-repository ppa:certbot/certbot apt-get update apt-get install certbot
A titre personnel je préfère gérer le renouvellement avec mon propre script dont j'ai désactivé le renouvellement automatique de certbot :
systemctl disable certbot.timer rm -f /etc/cron.d/certbot
Certificat pour le domaine principal
Commencez par arrêter zimbra. Cela est nécessaire car le client certbot
doit pouvoir accéder aux ports 80 et 443 afin de valider que vous possédez bien les domaines pour lesquels vous allez demander un certificat :
/etc/init.d/zimbra stop
TODO
Certificat SNI
Génération du certificat
Afin de ne pas avoir à couper zimbra pendant la génération du certificat, on va jouer un peu avec iptables.
On autorise le port 8181
puis on redirige le port 80
vers le port 8181
:
iptables -t filter -I INPUT -i eth0 -p tcp --dport 8181 -j ACCEPT ip6tables -t filter -I INPUT -i eth0 -p tcp --dport 8181 -j ACCEPT iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8181 ip6tables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8181
Lancez le client en mode standalone
et en spécifiant les domaines/sous-domaines devant figurer dans le certificat avec un ou plusieurs argument -d
, et en spécifiant le port 8181
pour la validation des domaines :
certbot certonly --preferred-challenges http --http-01-port 8181 --standalone -d mail.domain.tld -d imap.domain.tld -d pop.domain.tld -d smtp.domain.tld
Vous pouvez ensuite enlever les règles iptables :
iptables -t nat -D PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8181 ip6tables -t nat -D PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8181 iptables -t filter -D INPUT -i eth0 -p tcp --dport 8181 -j ACCEPT ip6tables -t filter -D INPUT -i eth0 -p tcp --dport 8181 -j ACCEPT
Configuration de Zimbra
Nous allons définir http://mail.domain.tld comme l'url servant pour les mails du domaine domain.tld
zmprov md domain.tld zimbraVirtualHostName mail.domain.tld
zimbra doit pouvoir résoudre mail.domain.tld vers les IP utilisées par le serveur zimbra.
Activez le reverse proxy :
zmprov mcf zimbraReverseProxySNIEnabled TRUE
Mise en forme des certificats
mkdir /opt/zimbra/ssl/letsencrypt/ mkdir /opt/zimbra/ssl/letsencrypt/mail.domain.tld cp /etc/letsencrypt/live/mail.domain.tld/* /opt/zimbra/ssl/letsencrypt/mail.domain.tld/ chown -R zimbra:zimbra /opt/zimbra/ssl/letsencrypt/mail.domain.tld/ chmod -R o-rwx /opt/zimbra/ssl/letsencrypt/mail.domain.tld/
Pour zimbra, il faut ajouter le certificat de la root dans le fichier chaine utilisé. Vous pouvez trouver ce certificat ici : https://webtest.identrust.com/certificates/trustid/root-download-x3.html
Puis l'ajouter a la fin de la chaine de certification :
cat /opt/zimbra/ssl/letsencrypt/mail.domain.tld/chain.pem EMPLACEMENT_du_fichier_contenant_la_root.pem > /opt/zimbra/ssl/letsencrypt/mail.domain.tld/chain+root.pem
Puis testez le certificat :
su - zimbra /opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/letsencrypt/mail.domain.tld/privkey.pem /opt/zimbra/ssl/letsencrypt/mail.domain.tld/cert.pem /opt/zimbra/ssl/letsencrypt/mail.domain.tld/chain+root.pem exit
Si tout va bien, créez un fichier bundle contenant votre certificat et la chaîne de certification :
cat /opt/zimbra/ssl/letsencrypt/mail.domain.tld/cert.pem /opt/zimbra/ssl/letsencrypt/mail.domain.tld/chain+root.pem > /opt/zimbra/ssl/letsencrypt/mail.domain.tld/zimbra.bundle chown zimbra:zimbra /opt/zimbra/ssl/letsencrypt/mail.domain.tld/zimbra.bundle chmod o-rwx /opt/zimbra/ssl/letsencrypt/mail.domain.tld/zimbra.bundle
Déploiement dans zimbra
Installez le certificat dans l'infrastructure zimbra :
su - zimbra /opt/zimbra/libexec/zmdomaincertmgr savecrt domain.tld /opt/zimbra/ssl/letsencrypt/mail.domain.tld/zimbra.bundle /opt/zimbra/ssl/letsencrypt/mail.domain.tld/privkey.pem exit
Déployez le certificat dans zimbra :
su - zimbra /opt/zimbra/libexec/zmdomaincertmgr deploycrts exit
Et relancez la brique proxy de zimbra
su - zimbra zmproxyctl restart exit
Bugs
- Les certificats SNI ne sont pas utilisés pour IMAPs, POPs et SMTPs : Bug 103362 et Bug 107293
- Si vous avez configuré zimbra SNI en mode ipv4 + ipv6, vous allez probablement rencontrer le bug 108293 et le proxy ne démarrera pas
Résolution : bug 108293
Dans les fichiers web.http.template.patch web.http.default.template.patch mail.imap.template.patch mail.imap.default.template.patch mail.pop3.template.patch mail.pop3.default.template.patch :
- A la directive
${core.ipboth.enabled}listen
: enlever l'argument ipv6only=off
Dans les fichiers web.https.template.patch web.https.default.template.patch mail.imaps.template.patch mail.imaps.default.template.patch mail.pop3s.template.patch mail.pop3s.default.template.patch :
- Supprimer les directives suivantes (selon le fichier) :
${core.ipboth.enabled}listen ${vip}${web.https.port} ipv6only=off ssl http2;
[::]:${web.https.port} ipv6only=off ssl http2;
- Ajoutez en remplacement les deux directives suivantes (les deux a chaque fois) :
${core.ipboth.enabled}listen [::]:${web.https.port} ssl http2;
${core.ipboth.enabled}listen 0.0.0.0:${web.https.port} ssl http2;
Il faut ensuite relancer zmmtactl qui met à jour les fichiers de configuration via ces templates.
Wildcard / plus addressing
su - zimbra zmprov mcf zimbraMtaRecipientDelimiter + zmmtactl restart
Pour vérifier :
postconf recipient_delimiter
Ajout de décodeurs pour amavis
Amavis a besoin de quelques programmes extérieurs afin d'extraire certains type de fichier et les analyser :
aptitude install rar lzop binutils lrzip arj arc cabextract zoo p7zip-full ripole
Configuration de spamassassin
Par défaut, Zimbra initialise la valeur trusted_networks
de spamassassin au contenu de la valeur zimbraMtaMyNetworks
de la configuration de Zimbra. La valeur internal_networks
de spamassassin n'est pas utilisé.
De manière globale retenez la chose suivante :
- tous les serveurs MX de vos domaines et tous les relais smtp interne doivent être listés dans
internal_networks
ettrusted_networks
- les serveurs sûre (dont vous êtes certain qu'ils ne sont pas l'origine de spam) mais n'étant pas MX ou relay smtp interne de vos domaines doivent être listés uniquement dans
trusted_networks
Il faut donc, a minima, ajouter vos serveurs MX à la directive zimbraMtaMyNetworks
Commencez par obtenir la liste des serveurs actuellement configuré :
su - zimbra zmprov gs `zmhostname` zimbraMtaMyNetworks
Copiez-collez cette liste et ajoutez y les adresses IPs de vos MX secondaires avec zmprov gs
:
su - zimbra zmprov ms `zmhostname` zimbraMtaMyNetworks "Liste_des_serveurs_séparé_par_des_espaces"
Ajout de internal_networks
Vous pouvez éventuellement modifier Zimbra afin qu'il ajoute la directive manquante internal_networks
à spamassassin. Pour cela, ouvrez le fichier /opt/zimbra/conf/salocal.cf.in
, repérez la ligne %%uncomment VAR:zimbraMtaMyNetworks%%trusted_networks %%zimbraMtaMyNetworks%%
et ajoutez juste après :
%%uncomment VAR:zimbraMtaMyNetworks%%internal_networks %%zimbraMtaMyNetworks%%
Puis relancez :
su - zimbra zmmtactl restart && zmamavisdctl restart
Vous pourrez voir votre directive apparaitre dans /opt/zimbra/data/spamassassin/localrules/salocal.cf
Notez que cette modification ne survivra pas à une mise à jour de zimbra
Mises à jour automatiques
$ zmlocalconfig antispam_enable_rule_updates antispam_enable_rule_updates = false $ zmlocalconfig antispam_enable_restarts antispam_enable_restarts = false
On va activer la mise à jour automatique, et spécifier a zimbra de relancer l'antispam après une mise à jour :
$ zmlocalconfig -e antispam_enable_rule_updates=true $ zmlocalconfig -e antispam_enable_restarts=true
Si vous constatez que le traitement de certains mails est très long, essayez de passer zmlocalconfig -e antispam_enable_rule_compilation=true
$ zmamavisdctl restart $ zmmtactl restart
Ajout de règles personnalisées
Vous pouvez créer le fichier /opt/zimbra/data/spamassassin/localrules/zzsauser.cf
et le faire appartenir à l'utilisateur zimbra et au groupe zimbra.
Pour tester vos règles, avec l'utilisateur zimbra : spamassassin -D < /tmp/test.spammail > /dev/null 2> /tmp/test.output
Razor et Pyzor
https://wiki.zimbra.com/wiki/Anti-spam_Strategies
https://www.missioncriticalemail.com/2019/03/21/zimbra-anti-spam-best-practices-2019/
zmtrainsa
Durée de conservation des statistiques
su - zimbra zmlocalconfig -e zmstat_max_retention=365 /opt/zimbra/libexec/zmstat-cleanup
Configuration de la destination des mails tagués comme SPAM
Dans la console d'administration, allez dans configurer
puis paramètres globaux
et enfin AS/AV
. Les deux éléments intéressants sont Pourcentage de spam supprimés
et Pourcentage de tags
Ces variables sont configurés par défaut à 75% et 33%, ce qui signifie que qu'un message :
- Ayant un score de spam entre 33 et 75% finira dans la boite
spam
des utilisateurs. - Ayant un score de spam supérieur à 75% sera refusé (discarded), ne seront donc PAS remis à l’utilisateur, mais seront cependant copié à l'administrateur du serveur Zimbra.
- Ayant un score de spam inférieur à 33% sera remis à l'utilisateur dans sa boite de réception.
Ces pourcentages sont relatifs au score de spam défini par spamassassin :
- 100% correspond à un score spamassassin de 20 points
- 75% à un score de 15 points
- 33% à un score de 6.6 points
Vous pouvez augmenter la valeur de Pourcentage de spam supprimés
jusqu'à 100% pour diminuer le nombre de message refusé pour cause de spam (ils seront alors délivrés dans la boite spam
des utilisateurs).
Si vous jugez que trop de spam finissent dans la boite de réception de votre utilisateur, abaissez Pourcentage de tags
de quelques pourcents.
Je vous conseil par ailleurs de décocher la case Bloquer les fichiers attachés qui sont des archives cryptées
Notez que les mails contenant un virus sont automatiquement refusés, transférés dans une boite de quarantaine, et les utilisateurs sont notifiés qu'ils ont reçu un mail contenant un virus.
Note : ces valeurs peuvent se modifier en ligne de commande avec zmprov mcf zimbraSpamKillPercent x
et zmprov mcf zimbraSpamTagPercent y
Une autre manière, non recommandée, de forcer les spams à aller dans la boite des utilisateurs est de modifier la valeur zimbraAmavisFinalSpamDestiny
de D_DISCARD
à D_PASS
zmprov ms `zmhostname` zimbraAmavisFinalSpamDestiny D_PASS
Cela va modifier le final_spam_destiny
de /opt/zimbra/conf/amavisd.conf
lui même basé sur le fichier .in
correspondant.
Après toute modification, relancez amavisd:
su - zimbra ; zmamavisdctl restart
Zimbra derrière un firewall
http://wiki.zimbra.com/wiki/Firewall_Configuration
https://wiki.zimbra.com/wiki/Ports
Signatures antivirus supplémentaires
Loguer l'ip du client et pas l'ip du proxy dans mailbox.log
Depuis zimbra 8.8, l'ensemble des protocoles zimbra (smtp* imap* pop*) passent par un proxy nginx
zmprov gcf zimbraMailTrustedIP
zmprov mcf +zimbraMailTrustedIP {IP1-du-proxy} +zimbraMailTrustedIP {IP2-du-proxy}
Globalement : ::1 et 127.0.0.1 + les IPs public de votre zimbra
Fichiers de log
- /opt/zimbra/log/audit.log
- /opt/zimbra/log/mailbox.log
- /var/log/auth.log
- /var/log/zimbra.log
- /var/log/mail.log
Modification en ligne de commande
Il faut vous loguer en tant que l'utilisateur zimbra :
su - zimbra
Puis utiliser zmprov. Par exemple, pour récupérer une des ligne de configuration du serveur, utilisez getserver :
zmprov getserver `zmhostname` VALEUR
Pour modifier les informations du serveur: utilisez modifyserver (ou ms)
Éléments d'intérêt
zmprov gs `zmhostname` zimbraMtaMyNetworks
: a modifier si vous ajoutez/supprimez des IPs à votre serveur mail ou des MXs secondaires
Liste des commandes
- Configuration globale
- getAllConfig
- getConfig {attribut}
- modifyConfig {attribut valeur}
- Configuration du serveur
- getAllServers
- getServer {server}
- modifyServer {server} [attribut valeur]
- Configuration des domaines
- getAllDomains
- getDomain {domain|id}
- modifyDomain {domain|id} [attribut valeur]
- Configurations des comptes
- getAllAccounts
- getAccount {compte}
- modifyAccount {compte} [attribut valeur]
- Pour une liste complète : [1]
Mise a jour
Mise à jour de sécurité
Depuis Zimbra 8.8.9, les patchs de sécurité sont directement déployés via un dépot apt
donc un simple aptitude upgrade
téléchargera et installera la mise à jour. S'il faut relancer un service, vous en serez informé lors de l'installation.
Mise à jour de zimbra
télécharger le .tgz, l'extraire, puis lancer le ./install.sh
Admin
Admin: accéder à un mail contenant un virus
Loguer vous sur la console d'administration. Sélectionnez le compte mail utilisé par zimbra pour centraliser les virus (choisi ou défini automatiquement lors de l'installation). Clique droit > view mails.
Vous pouvez aussi chercher le compte en tapant "virus" dans la barre de recherche.
https://wiki.zimbra.com/wiki/Restore-Quarantined-Emails
Migration
L'API REST étant bugué, il est recommandé de ne pas utiliser cette API et tous les outils s'y référant (Bug 101760)
Le meilleur moyen de migrer les mails de zimbra est actuellement l'usage de l'outil imapsync
Synchronisation des mails avec imapsync
imapsync --host1 serveur_source.domain.tld --tls1 --user1 vous@domain.tld --password1 pass_sur_serveur_source \ --host2 serveur_destination.domain.tld --tls2 --user2 vous@domain.tld --password2 pass_sur_serveur_destination
Réutiliser les mots-de-passe d'une ancienne installation zimbra
Pour récupérer le password (en fait la somme sha512 du password) d'un utilisateur :
zmprov -l ga user@domain.com | grep userPassword
Ensuite, vous pouvez définir ce même password sur votre nouvelle installation zimbra :
zmprov ma user@domain.com userPassword '{SSHA512}2UIGhfdzdh546hZmphT1hT7...'
Problème de redirection sur le port 8443 au lieu de 443
Changement de version d'ubuntu ou changement de serveur / VM
https://wiki.zimbra.com/wiki/How_to_move_ZCS_to_another_server
for 8.8.15 / 16.04 to 18.04 :
- https://forums.zimbra.org/viewtopic.php?t=67390#p294645 (best prefered, use this one)
- https://wiki.zimbra.com/wiki/Ubuntu_Upgrades#Upgrade_Ubuntu_16.x_to_Ubuntu_18.x_and_update_ZCS_8.8.15_.26_above (for record)