diff --git a/HowtoSecureMailServer.page b/HowtoSecureMailServer.page index 0e59edf..e500449 100644 --- a/HowtoSecureMailServer.page +++ b/HowtoSecureMailServer.page @@ -93,6 +93,8 @@ On supprime exim4, car Mailcow utilise postfix. # apt purge exim4 exim4-base exim4-config exim4-daemon-light ``` +## Installation + Puis on télécharge le script d'installation, on édite la configuration et on lance l'installation. ``` @@ -109,7 +111,7 @@ Laissez-vous guider par le script d'installation. # ./install.sh ``` -# Fini +## Fini Voilà, c'est fini ! Il vous reste à créer votre premier compte mail via l'interface d'admin. @@ -117,7 +119,7 @@ Si vous avez des questions ou besoin d'aide, n'hésitez pas à ouvrir un ticket # Bonus : Certificat client X.509 -L'idée est de restreindre l'accès au services web (webmail et admin), et mail (SMTPS/IMAPS) via un certificat client X.509. Sans ce certificat, impossible d'accéder à quoi que ce soit. +L'idée est de restreindre l'accès aux services web (webmail et admin), et mail (SMTPS/IMAPS) via un certificat client X.509. Sans ce certificat, impossible d'accéder à quoi que ce soit. > **Note** : Cela remplace le certificat Let's Encrypt utilisé par Mailcow. @@ -133,30 +135,74 @@ Pour cela il faut mettre en place une `PKI` et émettre un certificat client. J' # sed -i -e 's#PREFIX=.*#PREFIX=/etc/shellpki#' -e 's#WWWDIR=.*#WWWDIR=/etc/ssl/clients#' shellpki.sh ``` -Éditer `/etc/shellpki/openssl.cnf` et initialiser shellPKI. Le plus important est de remplir le « Common Name », par exemple `ca.domain.tld`. +Éditer `/etc/shellpki/openssl.cnf` et initialiser shellPKI. Le plus important est de remplir le « Common Name », par exemple `Myname Root Certificate`. ``` # vim /etc/shellpki/openssl.cnf # ./shellpki.sh init ``` -Ensuite on génère un +Injecter le certificat racine `/etc/shellpki/ca/cacert.pem` dans votre navigateur et vos appareils tel qu'un smartphone. -On obtiens un certificat et une clé dans `/etc/shellpki/ca/` que l'on peut positionner sur nginx, dovecot et postfix. +Ensuite on génère un certificat (sans passphrase) pour les services web et mail avec un « Common Name » correspondant à votre FQDN pour accéder à vos services comme `mail.domain.tld`. ``` -# sed -i -e 's#/etc/ssl/mail/mail.crt#/etc/shellpki/ca/cacert.pem#' \ - -e 's#/etc/ssl/mail/mail.key#/etc/shellpki/ca/private.key#' \ - /etc/nginx/sites-available/mailcow.conf /etc/postfix/main.cf \ - /etc/dovecot/dovecot.conf +# ./shellpki.sh create ``` -Générer un certificat client +On obtiens un certificat et une clé dans `/etc/ssl/clients/` que l'on positionne sur nginx, dovecot et postfix. Les différentes directives à modifier : +``` +/etc/nginx/sites-available/mailcow.conf:25: ssl_certificate +/etc/nginx/sites-available/mailcow.conf:26: ssl_certificate_key +/etc/postfix/main.cf:17:smtpd_tls_cert_file +/etc/postfix/main.cf:18:smtpd_tls_key_fil +/etc/dovecot/dovecot.conf:129:ssl_cert +/etc/dovecot/dovecot.conf:130:ssl_key ``` +``` +# for service in dovecot postfix nginx; do systemctl restart $service; done ``` +On en régénère un autre pour votre client (sans passphrase), soit un utilisateur par exemple. On pourra choisir un « Common Name » `username.mail.domain.tld` ou `Nom Prénom`. + +``` +# ./shellpki.sh create +``` + +Puis on le converti au format `PKCS#12` avec une passphrase d'export. + +``` +# cd /etc/ssl/clients +# openssl pkcs12 -export -in benoit.mail.benpro.fr.crt -inkey benoit.mail.benpro.fr.key -out benoit.mail.benpro.fr.p12 +``` + +Il faudra importer ce certificat client dans les navigateurs et dans diverses applications (Thunderbird, Exchange/GMail sous Android, …). + +La dernière étape consiste à dire à dovecot et nginx qu'il est nécessaire de présenter un certificat client. + +Pour nginx : + +``` +ssl_client_certificate /etc/shellpki/ca/cacert.pem; +ssl_verify_client on; +``` + +``` +# systemctl restart nginx +``` + +Pour dovecot : + +``` +ssl_client_ca_file =