« Installation d'un serveur de mail Zimbra 8.x sous ubuntu server 16.04 LTS » : différence entre les versions

Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(86 versions intermédiaires par le même utilisateur non affichées)
Ligne 16 : Ligne 16 :
Puis configurez correctement l'hostname de votre serveur dans <code>/etc/hosts</code>
Puis configurez correctement l'hostname de votre serveur dans <code>/etc/hosts</code>
<pre>
<pre>
185.112.24.150          ark.unscdf.org ark
185.112.24.150          srvmail.domain.tld srvmail
2001:21c1:3:123d::150  ark.unscdf.org ark
2001:21c1:3:123d::150  srvmail.domain.tld srvmail
</pre>
</pre>


Ligne 27 : Ligne 27 :


=Installation=
=Installation=
Téléchargez la dernière version de Zimbra 8 pour ubuntu sur https://www.zimbra.com/downloads/zimbra-collaboration-open-source/
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 :  
Extrayez l'archive et lancez l'installeur :  
Ligne 42 : Ligne 46 :
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 (<code>allowusers</code> par exemple), vous devez les adapter afin de permettre les connexions ssh à l'utilisateur Zimbra.
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 (<code>allowusers</code> 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 :
* <code>root_ca.pem</code> : le certificat root
* <code>int_ca.pem</code> : le certificat de l'autorité intermédiaire ayant déployé le certificat zimbra
* <code>zimbra.pem</code> : le certificat zimbra généré par la CA intermédiaire
* <code>zimbra.key</code> : la clé privé zimbra généré par la CA intermédiaire
Nous allons maintenant déployer le certificat ssl dans zimbra.<br />
Pour commencer, créez le fichier <code>ca_chain.pem</code> contenant la chaine de certification complète :
<pre>
cat root_ca.pem int_ca.pem > ca_chain.pem
</pre>
Déplacez la clé privée :
<pre>
mv zimbra.key /opt/zimbra/ssl/zimbra/commercial/commercial.key
</pre>
Vous pouvez vérifier que vos certificats sont valides avec <code>zmcertmgr</code> via l'utilisateur zimbra (<code>su - zimbra</code>) :
<pre>
/opt/zimbra/bin/zmcertmgr verifycrt comm /opt/zimbra/ssl/zimbra/commercial/commercial.key zimbra.pem ca_chain.pem
</pre>
Puis déployez le certificat dans zimbra avec <code>zmcertmgr</code> :
<pre>
/opt/zimbra/bin/zmcertmgr deploycrt comm zimbra.pem ca_chain.pem
</pre>
Enfin, ajoutez manuellement les certificats dans la base de donnée de java (le password est <code>changeit</code> par défaut) :
<pre>keytool -keystore /opt/zimbra/common/lib/jvm/java/lib/security/cacerts -import -alias rootca -file /path/to/root_ca.pem</pre>
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 :
<pre>/etc/init.d/zimbra restart</pre>
=Certificat SSL avec LetsEncrypt=
==Initialisation==
Le client <code>certbot</code> de LetsEncrypt fourni son propre dépôt pour ubuntu. Nous allons l'utiliser pour installer le client :
<pre>
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install certbot
</pre>
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 :
<pre>
systemctl disable certbot.timer
rm -f /etc/cron.d/certbot
</pre>
==Certificat pour le domaine principal==
Commencez par arrêter zimbra. Cela est nécessaire car le client <code>certbot</code> 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 :
<pre>/etc/init.d/zimbra stop</pre>
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.<br>
On autorise le port <code>8181</code> puis on redirige le port <code>80</code> vers le port <code>8181</code> :
<pre>
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
</pre>
Lancez le client en mode <code>standalone</code> et en spécifiant les domaines/sous-domaines devant figurer dans le certificat avec un ou plusieurs argument <code>-d</code>, et en spécifiant le port <code>8181</code> pour la validation des domaines :
<pre>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</pre>
Vous pouvez ensuite enlever les règles iptables :
<pre>
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
</pre>
===Configuration de Zimbra===
Nous allons définir http://mail.domain.tld comme l'url servant pour les mails du domaine <code>domain.tld</code>
<pre>zmprov md domain.tld zimbraVirtualHostName mail.domain.tld</pre>
zimbra doit pouvoir résoudre mail.domain.tld vers les IP utilisées par le serveur zimbra.
Activez le reverse proxy :
<pre>zmprov mcf zimbraReverseProxySNIEnabled TRUE</pre>
===Mise en forme des certificats===
<pre>
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/
</pre>
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 <br>
Puis l'ajouter a la fin de la chaine de certification :
<pre>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</pre>
Puis testez le certificat :
<pre>
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
</pre>
Si tout va bien, créez un fichier bundle contenant votre certificat et la chaîne de certification :
<pre>
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
</pre>
===Déploiement dans zimbra===
Installez le certificat dans l'infrastructure zimbra :
<pre>
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
</pre>
Déployez le certificat dans zimbra :
<pre>
su - zimbra
/opt/zimbra/libexec/zmdomaincertmgr deploycrts
exit
</pre>
Et relancez la brique proxy de zimbra
<pre>
su - zimbra
zmproxyctl restart
exit
</pre>
===Bugs===
* Les certificats SNI ne sont pas utilisés pour IMAPs, POPs et SMTPs : [https://bugzilla.zimbra.com/show_bug.cgi?id=103362 Bug 103362] et [https://bugzilla.zimbra.com/show_bug.cgi?id=107293 Bug 107293]
* Si vous avez configuré zimbra SNI en mode ipv4 + ipv6, vous allez probablement rencontrer [https://bugzilla.zimbra.com/show_bug.cgi?id=108293 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 <code>${core.ipboth.enabled}listen</code> : enlever l'argument ipv6only=off
<br>
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) :
** <code>${core.ipboth.enabled}listen                  ${vip}${web.https.port} ipv6only=off ssl http2;</code>
** <code>[::]:${web.https.port} ipv6only=off ssl http2;</code>
* Ajoutez en remplacement les deux directives suivantes (les deux a chaque fois) :
** <code>${core.ipboth.enabled}listen                  [::]:${web.https.port} ssl http2;</code>
** <code>${core.ipboth.enabled}listen                  0.0.0.0:${web.https.port} ssl http2;</code>
<br>
Il faut ensuite relancer zmmtactl qui met à jour les fichiers de configuration via ces templates.
=Wildcard / plus addressing=
<pre>
su - zimbra
zmprov mcf zimbraMtaRecipientDelimiter +
zmmtactl restart
</pre>
Pour vérifier :
<pre>postconf recipient_delimiter</pre>
http://wiki.zimbra.com/wiki/Plus_Addressing
=Ajout de décodeurs pour amavis=
Amavis a besoin de quelques programmes extérieurs afin d'extraire certains type de fichier et les analyser :
<pre>aptitude install rar lzop binutils lrzip arj arc cabextract zoo p7zip-full ripole</pre>
=Configuration de spamassassin=
Par défaut, Zimbra initialise la valeur <code>trusted_networks</code> de spamassassin au contenu de la valeur <code>zimbraMtaMyNetworks</code> de la configuration de Zimbra. La valeur <code>internal_networks</code> 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 <code>internal_networks</code> '''et''' <code>trusted_networks</code>
* 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 <code>trusted_networks</code>
Il faut donc, a minima, ajouter vos serveurs MX à la directive <code>zimbraMtaMyNetworks</code><br>
Commencez par obtenir la liste des serveurs actuellement configuré :
<pre>
su - zimbra
zmprov gs `zmhostname` zimbraMtaMyNetworks
</pre>
Copiez-collez cette liste et ajoutez y les adresses IPs de vos MX secondaires avec <code>zmprov gs</code> :
<pre>
su - zimbra
zmprov ms `zmhostname` zimbraMtaMyNetworks "Liste_des_serveurs_séparé_par_des_espaces"
</pre>
==Ajout de internal_networks==
Vous pouvez éventuellement modifier Zimbra afin qu'il ajoute la directive manquante <code>internal_networks</code> à spamassassin. Pour cela, ouvrez le fichier <code>/opt/zimbra/conf/salocal.cf.in</code>, repérez la ligne <code>%%uncomment VAR:zimbraMtaMyNetworks%%trusted_networks %%zimbraMtaMyNetworks%%</code> et ajoutez juste après :
<pre>
%%uncomment VAR:zimbraMtaMyNetworks%%internal_networks %%zimbraMtaMyNetworks%%
</pre>
Puis relancez :
<pre>
su - zimbra
zmmtactl restart && zmamavisdctl restart
</pre>
Vous pourrez voir votre directive apparaitre dans <code>/opt/zimbra/data/spamassassin/localrules/salocal.cf</code>
Notez que cette modification ne survivra pas à une mise à jour de zimbra
==Mises à jour automatiques==
<pre>$ zmlocalconfig antispam_enable_rule_updates
antispam_enable_rule_updates = false
$ zmlocalconfig antispam_enable_restarts
antispam_enable_restarts = false
</pre>
On va activer la mise à jour automatique, et spécifier a zimbra de relancer l'antispam après une mise à jour :
<pre>
$ zmlocalconfig -e antispam_enable_rule_updates=true
$ zmlocalconfig -e antispam_enable_restarts=true
</pre>
Si vous constatez que le traitement de certains mails est très long, essayez de passer <code>zmlocalconfig -e antispam_enable_rule_compilation=true</code>
<pre>
$ zmamavisdctl restart
$ zmmtactl restart
</pre>
==Ajout de règles personnalisées==
Vous pouvez créer le fichier <code>/opt/zimbra/data/spamassassin/localrules/zzsauser.cf</code> et le faire appartenir à l'utilisateur zimbra et au groupe zimbra.
Pour tester vos règles, avec l'utilisateur zimbra : <code>spamassassin -D < /tmp/test.spammail > /dev/null 2> /tmp/test.output</code>
==Razor et Pyzor==
https://wiki.zimbra.com/wiki/Anti-spam_Strategies <br>
https://www.missioncriticalemail.com/2019/03/21/zimbra-anti-spam-best-practices-2019/
==zmtrainsa==
=Durée de conservation des statistiques=
<pre>su - zimbra
zmlocalconfig -e zmstat_max_retention=365
/opt/zimbra/libexec/zmstat-cleanup
</pre>
=Configuration de la destination des mails tagués comme SPAM=
Dans la console d'administration, allez dans <code>configurer</code> puis <code>paramètres globaux</code> et enfin <code>AS/AV</code>. Les deux éléments intéressants sont <code>Pourcentage de spam supprimés</code> et <code>Pourcentage de tags</code>
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 <code>spam</code> 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 <code>Pourcentage de spam supprimés</code> jusqu'à 100% pour diminuer le nombre de message refusé pour cause de spam (ils seront alors délivrés dans la boite <code>spam</code> des utilisateurs). <br>
Si vous jugez que trop de spam finissent dans la boite de réception de votre utilisateur, abaissez <code>Pourcentage de tags</code> de quelques pourcents.
<br>Je vous conseil par ailleurs de décocher la case <code>Bloquer les fichiers attachés qui sont des archives cryptées</code><br>
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.
<br>
Note : ces valeurs peuvent se modifier en ligne de commande avec <code>zmprov mcf zimbraSpamKillPercent x</code> et <code>zmprov mcf zimbraSpamTagPercent y</code>
<br>Une autre manière, '''non recommandée''', de forcer les spams à aller dans la boite des utilisateurs est de modifier la valeur <code>zimbraAmavisFinalSpamDestiny</code> de <code>D_DISCARD</code> à <code>D_PASS</code>
<pre>
zmprov ms `zmhostname` zimbraAmavisFinalSpamDestiny D_PASS
</pre>
Cela va modifier le <code>final_spam_destiny</code> de <code>/opt/zimbra/conf/amavisd.conf</code> lui même basé sur le fichier <code>.in</code> correspondant.
Après toute modification, relancez amavisd:
<pre>su - zimbra ; zmamavisdctl restart</pre>
=Zimbra derrière un firewall=
http://wiki.zimbra.com/wiki/Firewall_Configuration <br>
https://wiki.zimbra.com/wiki/Ports
=Signatures antivirus supplémentaires=
[[Ajouter des signatures ClamAV dans zimbra 8.8]]
=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
<pre>zmprov gcf zimbraMailTrustedIP</pre>
<pre>zmprov mcf +zimbraMailTrustedIP {IP1-du-proxy} +zimbraMailTrustedIP {IP2-du-proxy}</pre>
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 :
<pre> su - zimbra</pre>
Puis utiliser zmprov. Par exemple, pour récupérer une des ligne de configuration du serveur, utilisez getserver :
<pre>zmprov getserver `zmhostname` VALEUR</pre>
Pour modifier les informations du serveur: utilisez modifyserver (ou ms)
==Éléments d'intérêt==
* <code>zmprov gs `zmhostname` zimbraMtaMyNetworks</code> : 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 : [https://wiki.zimbra.com/wiki/Zmprov]
=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 <code>apt</code> donc un simple <code>aptitude upgrade</code> 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 <code>./install.sh</code>
=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.<br>
Vous pouvez aussi chercher le compte en tapant "virus" dans la barre de recherche.<br>
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 ([http://bugzilla.zimbra.com/show_bug.cgi?id=101760 Bug 101760])
Le meilleur moyen de migrer les mails de zimbra est actuellement l'usage de l'outil <code>imapsync</code>
==Synchronisation des mails avec imapsync==
<pre>
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
</pre>
==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 :
<pre>zmprov -l ga user@domain.com | grep userPassword</pre>
Ensuite, vous pouvez définir ce même password sur votre nouvelle installation zimbra :
<pre>zmprov ma user@domain.com userPassword '{SSHA512}2UIGhfdzdh546hZmphT1hT7...'</pre>
=Problème de redirection sur le port 8443 au lieu de 443=
https://wiki.zimbra.com/wiki/Steps_to_fix_port_redirection_problem_with_password_change_request_on_webclient
=Changement de version d'ubuntu ou changement de serveur / VM=
https://wiki.zimbra.com/wiki/How_to_move_ZCS_to_another_server


=Éléments d'intérêt=
for 8.8.15 / 16.04 to 18.04 :
* <code>zmprov gs `zmhostname` zimbraMtaMyNetworks</code> : a modifier si vous ajoutez/supprimez des IPs à votre serveur mail
* 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)
4 231

modifications

Menu de navigation