Tutoriel révisé en décembre 2022 / Debian 11
Ha ! Nous y voila ! La série de tutoriels sur la mise en place d’un serveur de messagerie complet.
J’avais commencé un article il y a quelques années que je n’avais pas pris le temps de terminer : il manquait toute la partie sur la gestion du spam; bien qu’en fonction chez moi, je n’avais pas rédigé le tutoriel correspondant.
Cette fois ci, on recommence à zéro et surtout, on va jusqu’au bout, mais avec UN changement de taille, la gestion des comptes se fera dorénavant à l’aide d’un annuaire LDAP.
Pourquoi LDAP et non pas Mysql ? Bonne question que voila… Et pour vous répondre :
- J’ai déjà mes comptes en Ldap
- Le Ldap est plus rapide en lecture que le SQL.
- On trouve beaucoup de docs sur le net avec Mysql, mais très peu avec LDAP (ou alors, ça ne fonctionne pas du premier coup…), donc c’était l’occasion de s’y mettre et de proposer quelque chose d’unique !
L’installation d’un serveur de mail fonctionnel est le Saint Graal pour beaucoup de SysAdmins. C’est souvent considéré comme compliqué… Très peu d’articles expliquent vraiment comment tout fonctionne. Il faut beaucoup lire les mans, potasser des Faq, guides, docs… Et surtout comprendre de ses erreurs…
Pour info, j’ai passé une bonne semaine à la mise en place, aux tests, au debug, …. Et je ne parle pas du temps de rédaction ;). Comme d’habitude, j’essaye d’être un maximum didactique.
Je pourrais me contenter de simplement vous fournir les fichiers de configurations. Mais j’aime aussi montrer les erreurs ou les problèmes que j’ai rencontré.
Bref, si certains points sont flous, s’il y a des erreurs, des améliorations, n’hésitez pas à commenter !
I – Présentation
Résumons mes besoins :
- Gestion de toutes mes adresses mails.
- Gestion de plusieurs domaines.
- Gestion des mails émanant de mes VMs (on verra cela dans un article connexe).
- Traitement Spam.
- Utilisation du référentiel utilisateur de mon serveur LDAP.
- Filtrage Sieve (sur le serveur directement).
Voyons maintenant les briques qui vont constituer notre architecture
- Postfix : Le point central de l’architecture, il assure la réception des mails des serveurs smtps extérieurs, l’envoi de mails vers eux et la soumission de message depuis les clients connectés.
- Dovecot : Première fonction : range les mails reçus depuis Postfix via lmtp dans les bals physiques des utilisateurs. Peut les trier dans des sous-répertoires en fonction de règles Sieve.
Deuxième fonction : permet aux utilisateurs de consulter leur boites aux lettres en IMAP à l’aide du client de leur choix (ou d’un webmail). Ici, je ne gère pas le pop car c’est le mal (plus sérieusement, tellement d’avantages avec l’Imap que je ne vois pas l’utilité de proposer du pop.
Troisième fonction : fournit le support AUTH à Postfix (pour l’envoi de message). - Rspamd : Traitement du Spam pour les mails venant de l’extérieur et de la signature DKIM pour les mails sortants.
- Openldap : Stockage de nos utilisateurs, domaines, boites aux lettres (aspect configuration, les mails en eux mêmes seront stockés sur disque)
Pour le moment, pas de traitement antivirus, c’est lourd en terme de ressource. Je testerais quand même une solution plus tard, mais ce n’est pas pour de suite …
Ce tuto s’inscrit dans la lignée de : Tuto Virtualisation V 2022 : Debian 11, KVM et Openvswitch. Vous y retrouverez l’architecture, les explications, etc…
Idéalement, avant d’attaquer la messagerie, vous aurez mis en place :
- Ceph (tutoriel à venir) pour le stockage (mais pas obligatoire, on peut tout à fait stocker les mails sur le serveur de messagerie)
- LDAP (tutoriel détaillé: OpenLDAP), la obligatoire, mais comme c’est, on va pas se mentir, déjà une tannée; je vous propose d’aller vite à l’essentiel dans la partie I, vous aurez l’occasion de voir en détail plus tard.
II – Création de la VM
Je me sers de mon script fait maison (Tuto Virtualisation avec KVM, partie VIII : Scripts d’automatisation)
Au niveau de la configuration :
# Options size_swap=1 size_var=3 size=4 ram=512 cpu=1
A – Création de la VM
Tout simplement :
# ./create.sh -n mail1 -i 151 -s 1
Avant de la démarrer, un peu de configuration…
B – Ajout des interfaces réseaux
Nous allons attacher les interfaces supplémentaires, à savoir un port trunk vlansext (les vlans 10 et 20) sur chaque serveur.
Créez un fichier : net-mail1.xml
interface type='network'> <source network='intern-vlans' portgroup='vlansext'/> <target dev='mail1.1'/> <model type='virtio'/> <driver name='vhost'/> </interface>
Et on ajoute :
# virsh attach-device mail1 net-mail1.xml --config
Pour mémoire, le flag –config indique qu’on rend la modification pérenne (maintient au reboot).
C – Configuration réseaux
On va éditer les fichiers d’interfaces avant de démarrer :
# mount /dev/mapper/vg1-mail1p1 /root/mountlvm/
On édite le fichier /root/mountlvm/etc/network/interfaces pour y ajouter les interfaces eth1.10 et eth1.20 :
auto lo iface lo inet loopback auto eth0.99 iface eth0.99 inet static address 10.99.1.151 netmask 255.255.255.0 auto eth0.250 iface eth0.250 inet static address 10.250.1.151 netmask 255.255.255.0 auto eth1.10 iface eth1.10 inet static address 10.10.1.151 netmask 255.255.255.0 gateway 10.10.1.254 auto eth1.20 iface eth1.20 inet static address 10.20.1.151 netmask 255.255.255.0 up ip route add 10.100.0.0/16 via 10.20.1.254
On démonte :
# umount /root/mountlvm
Et on peut démarrer la VM :
# virsh start mail1
Puis se connecter dessus :
# ssh user@mail1
III – Les articles
Pour aller plus loin :
Migration d’un serveur à l’autre
Test en ligne de commande d’un SMTP et d’un IMAP