Cette configuration est utile lorsque vous placez votre Modoboa derrière un Reverse Proxy, ou bien si vous voulez simplement rendre plus instinctif la configuration de vos services. Je préciserais quelles sont les configurations sont à faire en cas de Reverse Proxy, il faudra simplement les ignorer si vous n'en avait pas.
L'objectif est donc d'avoir un domaine et avec leur certificat par type de service. Cette configuration est basée sur Let's Encrypt, mais si vous voulez utiliser une autre autorité, il vous faudra ignorer aussi simplement les étapes les concernant.
Les domaines vont être configurés comme ceci :
Je vais volontairement omettre le POP3 pour une raison très simple : Il faut arrêter d'utiliser le POP3, c'est nul.
Cette étape concerne surtout si vous avez un Reverse Proxy, si vous n'en avait pas, il faudra simplement mettre des règles de NAT / Filtrage classique.
Dans le cas où vous n'avez qu'une seule IP, il va falloir re-diriger les ports 80 et 443 vers le Reverse Proxy, et les ports 25, 143, 587 et 993 vers le serveur Modoboa. Tous les domaines devront avoir pour entrée votre IP.
Si vous avez deux IP, il faudra simplement utiliser les mêmes configurations que pour l'IPv6.
Je vais partir du principe que vous avez plusieurs IPv6, et donc une pour chaque machine. Comme pour l'IPv4, il va falloir configurer les ports 80 et 443 vers le Reverse Proxy, ainsi que les ports 25, 143, 587 et 993 vers le serveur Modoboa. Sauf, que s'ajoute a cette liste le port 80 vers le serveur Modoboa.
Cette étape est importante et obligatoire dans le cas où vous utilisez des certificats Let's Encrypt.
Pour simplifier l'usage, on ne va pas utiliser le module Nginx de Certbot1) mais le module webroot, non dépendant a un serveur web particulier.
Pour cela, il va falloir commencer par créer le dossier pour les challenges :
# mkdir -p /var/www/.well-known/acme-challenge/
ensuite il faudra ajouter dans le fichier /etc/nginx/sites-available/default, dans la section server, les lignes suivantes :
location /.well-known/acme-challenge/ { allow all; alias /var/www/.well-known/acme-challenge/; }
et pour finir, il faudra re-charger Nginx :
# systemctl reload nginx
Dans le cas où vous votre Modoboa est derrière un Reverse Proxy, il va falloir le configurer de telle sorte a ce que les requêtes vers /.well-known/acme-challenge/ des domaines mx01.virtit.fr, smtp.virtit.fr et imap.virtit.fr soient redirigées vers le Modoboa, alors que celle du domaine mail.virtit.fr doivent être conservé sur le Proxy.
Pour cela, on va ajouter la configuration suivante au Nginx du Reverse Proxy :
server { listen 80; listen [::]:80; server_name mx01.virtit.fr smtp.virtit.fr imap.virtit.fr; location /.well-known/acme-challenge/ { allow all; proxy_pass http://serveur-modoboa ; } return 302 https://mail.virtit.fr$request_uri; }
Maintenant, pour générer les certificats, il faut simplement taper la commande suivante pour chaque domaine :
# certbot certonly --webroot -w /var/www/ --rsa-key-size 4096 -d mx01.virtit.fr
Il faut modifier le fichier /etc/postfix/main.cf et remplacez les lignes suivantes :
myhostname = mx01.virtit.fr [....] smtpd_tls_key_file = /etc/letsencrypt/live/mx01.virtit.fr/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/mx01.virtit.fr/fullchain.pem
ensuite, il vous faudra aussi remplacer le domaine dans le fichier /etc/amavis/conf.d/05-node_id
Il faut modifier le fichier /etc/postfix/master.cf et ajouter, pour la section submission les lignes suivantes :
-o smtpd_tls_cert_file=/etc/letsencrypt/live/smtp.virtit.fr/fullchain.pem -o smtpd_tls_key_file=/etc/letsencrypt/live/smtp.virtit.fr/privkey.pem
Il faut modifier le fichier /etc/dovecot/conf.d/10-ssl.conf et remplacez les lignes suivantes :
ssl_cert = </etc/letsencrypt/live/imap.virtit.fr/fullchain.pem ssl_key = </etc/letsencrypt/live/imap.virtit.fr/privkey.pem
Il faudra modifier l'ensemble des domaines pour correspondre a votre réalité dans le fichier /etc/automx.conf, comme ceci:
# This file was automatically installed on 2020-12-30T16:23:00.311580 [automx] provider = virtit.fr domains = * # Protect against DoS memcache = 127.0.0.1:11211 memcache_ttl = 600 client_error_limit = 20 rate_limit_exception_networks = 127.0.0.0/8, ::1/128 [global] backend = sql action = settings account_type = email host = mysql://modoboa:XXXXXXXXXXXXXXXXXXXXXX@localhost/modoboa query = SELECT concat(first_name, ' ', last_name) AS display_name, email, SUBSTRING_INDEX(email, '@', -1) AS domain FROM core_user WHERE email='%s' AND is_active=1 result_attrs = display_name, email smtp = yes smtp_server = smtp.virtit.fr smtp_port = 587 smtp_encryption = starttls smtp_auth = plaintext smtp_auth_identity = ${email} smtp_refresh_ttl = 6 smtp_default = yes imap = yes imap_server = imap.virtit.fr imap_port = 993 imap_encryption = ssl imap_auth = plaintext imap_auth_identity = ${email} imap_refresh_ttl = 6 pop = no
Ensuite, il vous faudra simplement redémarrer les services :
# systemctl restart postfix dovecot amavis uwsgi