Table des matières

Serveur de courriels

Présentation d'installation d'un serveur de courriels sur debian 11.
Dans la suite de cette présentation, nous allons voir comment configurer le serveur mail.sleto.fr (ayant l'IP 99.88.77.66) comme serveur SMTP, IMAP et outil de gestion de courriels (le DNS identifie déjà correctement ce serveur).

Packages

Installation repose sur l'utilisation de Modoboa.

Pour cela installer avant les packets suivant

apt-get install -y git vim

Installation

L'installation de Modobao est très bien expliqué dans la documentation modoboa et dans le README de github

Prérequis

la documentation demande la configuration minimum: 2 CPU / 2Go RAM / 10Go Disk
J'ai commencé avec cette configuration et j'ai eu des soucis de RAM. Je recommande donc d'avoir une machine un peu plus puissante (4 CPU / 4Go RAM)

Il recommande également d'installer les packages python supplémentaires:

sudo apt-get install python-virtualenv python-pip

Téléchargement

Récupérer l'outil d'installation via git:

git clone https://github.com/modoboa/modoboa-installer
cd modoboa-installer

Configuration

Lancer l'outil ainsi:

./run.py --stop-after-configfile-check slerto.fr

Éditer alors le fichier de configuration installer.cfg pour affiner l'installation.
Au minimum, je recommande de modifier les premiers champs liés au certificat SSL en utilisant letsencrypt:

...
[certificate]
generate = true
type = letsencrypt

[letsencrypt]
email = contact@sleto.fr
...

RUN

Lancer alors simplement la commande:

sudo ./run.py sleto.fr

Et l'ensemble des outils nécessaires a un serveur de courriels vont s'installer et se configurer pour fonctionner ensemble: c'est magique !

Et alors, il n'y a plus qu'à se connecter sur la nouvelle interface de gestion https://mail.sleto.fr via les paramètres de connexion initial: admin / password (à changer à la première connexion).

Réglages finaux

Depuis l'interface de gestion, entant qu'administrateur, il est possible de changer des règlages dans le menu “Modoboa > Paramètres”.
Noter qu'il existe une nouvelle interface d'administration, plus modèrne, en allant à https://mail.sleto.fr/new-admin.

Globalement, les paramètres par défaut sont très satisfaisant un usage classique.
Notons néanmoins:

Gestion d'un domain courriel

Configuration d'un domain

Dans le menu domaines, cliquer simplement sur le bouton “+Ajouter” pour définir le nouveau domaine.
Je recommande de cocher “Activer la signature DKIM” afin de faire signer en DKIM vos courriels.
On peut également créer un compte administrateur par défaut associé à ce nouveau domaine.

Au bout de quelques minutes, Modoboa va analyser les DNS associés à ce domaine.
Dans la fiche du domaine, on a alors la possibilité d'éditer les modifications DNS à appliquer pour finaliser sa configuration.

gloabalement, il faut ajouter quelque chose de ce genre à son DNS:

@ IN MX 10 mail.sleto.fr.

@ IN TXT "v=spf1 mx ip4:99.88.77.66 ~all"

modoboa._domainkey.sleto.fr. IN TXT (
  "v=DKIM1;k=rsa;p=blablablablablablablablablablablablablablablablablablablab"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablablablablablablablablablablablablablablablablablablablablablablabl"
  "blablablabla")

_dmarc.sleto.fr. IN TXT "v=DMARC1; p=quarantine; pct=100;"
autoconfig.sleto.fr. IN CNAME mail.sleto.fr.
autodiscover.sleto.fr. IN CNAME mail.sleto.fr.

Noter que j'ai précisé dans le SPF l'IP du serveur de courriel. Cela permet à des serveurs recevant les messages de vérifier que l'émetteur et bien celui autorisé.

Création de compte

La création d'un compte est très simple. Il faut juste choisir entre 4 types de comptes:

Un résumé des informations de connexion en PDF est téléchageable alors.

Création d'alias

Il est déjà possible de créer un alias directement depuis la création d'un compte.
Il est également possible d'en créer un après coup en précisant alors l'adresse de redirection.

Attention: il n'est possible d'envoyer un courriel entant qu'expéditeur en alias qu'en se connectant en SMTP avec le compte courriel associé.

Migration de compte

Si votre domaine était géré par un autre serveur de courriel, il est possible d'importer les anciens messages via un migration IMAP.

Pour cela, l'outil imapsync est top pour cela.
Deux solutions pour l'utiliser:

Il suffit dans les deux cas d'indiquer les serveurs IMAP ainsi que l'utilisateur et mot de passe des comptes à syncroniser.

Et pour finir

Firewall

Configurer un firewall afin de n'autorisé que les ports 80, 25, 143, 443, 587 et 993 (et ssh si besoin, bien sûr).
Attention de bien laisser les ports ouverts en interne.

Sauvegarde

Pour effectuer la sauvegarde, autant se baser sur l'outil d'installation de modoboa.
En effet, la commande “run” précédement utilisé propose un mécanisme de backup et de restauration.

Créer donc un script /opt/modoboa-installer/backup_email ainsi où:

#!/bin/bash

/opt/modoboa-installer/run.py --backup --silent-backup --backup-path /opt/email_backup/ sleto.fr
zip -r /tmp/email_backup.zip /opt/email_backup/
scp /tmp/email_backup.zip user@backup.sleto.net:/opt/backup_dir

Ajouter un crontab en root de type:

10   *   *   *   *   /opt/modoboa-installer/backup_email 2>&1 > /opt/modoboa-installer/backup_email.log

Ainsi, la sauvegarde des courriels et de toutes la configuration sera faite toutes les heures.

Compte "envoi tout"

Pour des besoins d'hébergement, il peut-être interessant que n'importe quelle adresse d'expédition puisse envoyer un message depuis ce serveur SMTP.
Octroyons ce privilège qu'au compte postmaster@sleto.fr.

Modifier pour cela le fichier /etc/postfix/sql-sender-login-map.cf en y ajoutant un clause “union”

# This file was generated on July 22, 2023, 1:41 p.m. by running:
# manage.py generate_postfix_maps --destdir /etc/postfix --force-overwrite
# DO NOT EDIT!
user = modoboa
password = <????????>
dbname = modoboa
hosts = 127.0.0.1:5432
query = (SELECT email FROM core_user WHERE email='%s' AND is_active) UNION (SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id WHERE sad.address='%s') UNION (SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN modoboa_admin_aliasrecipient alr ON alr.r_mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id INNER JOIN admin_alias al ON alr.alias_id=al.id LEFT JOIN admin_domainalias adoma ON adoma.target_id=al.domain_id LEFT JOIN admin_domain adom ON adom.id=adoma.target_id WHERE al.enabled AND (  al.address='%s' OR (    adoma.name='%d' AND al.address='%u'||'@'||adom.name))) UNION (SELECT mb.address || '@' || dom.name FROM admin_mailbox mb INNER JOIN admin_senderaddress sad ON sad.mailbox_id=mb.id INNER JOIN admin_domain dom ON dom.id=mb.domain_id WHERE sad.address='@'||'%d') UNION (SELECT email FROM core_user WHERE email='postmaster@sleto.fr' AND is_active) 

relancer le serveur postfix

sudo service postfix restart

et voilà !

Maintenant, en se connectant en SMTP à postmaster@sleto.fr, il est possible d'envoyer un message en utilisant l'adresse de son choix comme expéditeur (sans avoir une erreur “Sender address rejected: not owned by user”).
De même, si l'adresse d'expédition est un alias du serveur modoboa, celui-ci sera correctement signé DKIM/SPF/DMARC.

VadeSecure

Vade Secure est une entreprise française spécialisée dans la conception et l'édition de solutions logicielles de sécurité des emails, détections d'emails abusifs ou malveillants.
Comme elle est utilisé par les beaucoup de gros fournisseurs de mails pour gérer leur politique Antispam, il est interessant de s'enregistré chez eux afin de vérifier que nos domaines sont bien en “white list”.

Avant de se référencer, il est important de vérifier que le “reverse DNS” (rDNS) est correctement configuré. C'est à dire que l'IP du serveur retourne bien (en inverse) le nom du domaine sleto.fr.

Créer un compte sur https://sendertool.vadesecure.com/fr/

Une fois connecté, l'outil demande de référencer une adresse IP qui envoi en extérieur des courriels. Saissir donc l'IP de mail.sleto.fr
L'outil utilise le rDNS pour demander confirmation d'une l'adresse courriel de validation sur le domaine associé à l'IP: postmaster@sleto.fr

Il faut donc bien sûr valider le lien dans le courriel pour valider son IP. On a alors la possibilité de signaler des faux positifs dans leur interface, si des messages sont rejetés depuis ce serveur.

SMTP Relay

Un grand nombre d'outil hébergé, on besoin d'un serveur SMTP pour envoyer des courriels.
Il est plus simple de ne pas à avoir à spécifier une authentification (serveur en 127.0.0.1:25) voir d'utiliser des outils directe comme sendmail.

Pour cela, sur les autres serveurs d'hérgement (dans mon exemple ns3.sleto.net), il est bien d'installer un SMTP Relay.

Installer le paquet exim4 après avoir éventuellement desinstaller postfix:

sudo apt-get remove postfix
sudo apt-get install exim4

Lancer la configuration

sudo dpkg-reconfigure exim4-config

Dans l'interface, choisir les choix suivant:

Pour finaliser la configuration SMTP, modifier le fichier /etc/exim4/passwd.client:

*:postmaster@sleto.fr:<???????????>

Là, j'utilise mon compte courriel “envoi tout” pour ne pas me filtrer les adresses d'expédition.

A cela, il faut créer une signature SSL:

sudo bash /usr/share/doc/exim4-base/examples/exim-gencert

Et indiquer dans le fichier /etc/exim4/exim4.conf.localmacros

AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS = 1
MAIN_TLS_ENABLE = 1
# désactiver TLS verification si erreur "not in hosts_require_tls" lors de l'envoie
REMOTE_SMTP_SMARTHOST_TLS_VERIFY_HOSTS = :

Mettre à jour la configuration via

sudo update-exim4.conf
sudo service exim4 restart

Enfin, il faut éditer 2 fichiers pour assigner des adresses d'expédition et destinataire à nos utilisateurs Linux en cas d'envoie: Pour l'expédition /etc/email-addresses (pas grave si le compte courriel n'existe pas là)

user: user@ns3.sleto.net

Pour la destination /etc/aliases

user: contact@sleto.net

Faire alors un essai d'envoi:

echo "Blablabla" | mail -s 'test' contact@sleto.net

Bien sûr, ne pas oublier de vérifier que le firewall n'ouvre pas les ports 25, 587 et 993