Un serveur de messagerie est un système qui gère l’acheminement correct des e-mails entre l’expéditeur et le destinataire. Par exemple, lorsque vous envoyez un e-mail via Gmail, vous utilisez le serveur de messagerie de Google.
Un client de messagerie est, lui, un programme permettant de lire, d’envoyer et d’archiver des e-mails (p. ex. Microsoft Outlook, Thunderbird, etc.).
Le serveur de courrier sortant utilise SMTP (Simple Mail Transfer Protocol). Ses fonctions principales sont :
Vérifier la configuration de l’expéditeur et autoriser l’envoi du message.
Transmettre le message et recevoir le code de réponse.
Les serveurs SMTP utilisent les ports 25 (non chiffré) et 465 (chiffré).
POP3 est un protocole de réception. Le client se connecte au serveur et télécharge le message en local, ce qui permet une consultation hors ligne. Par défaut, le message est supprimé du serveur après téléchargement (on peut toutefois conserver une copie).
Ports utilisés : 110 (non chiffré) et 995 (chiffré SSL/TLS).
Comme POP3, IMAP sert à recevoir les e-mails, mais permet de gérer les messages directement sur le serveur, sans les télécharger. C’est idéal pour accéder à sa boîte depuis plusieurs appareils.
Ports utilisés : 143 (non chiffré) et 993 (chiffré SSL/TLS).
La réponse la plus fréquente :
« Pour utiliser mon propre domaine dans l’adresse e-mail. »
C’est vrai, mais inutile de déployer un serveur pour ça : de nombreux services permettent de lier votre domaine à leurs serveurs. Avantage : ils fournissent déjà un SMTP configuré (redirections, antispam, etc.). Vous n’avez alors qu’à régler les enregistrements NS (Name Server), bien plus simple que d’héberger soi-même.
Limites des services tiers :
Contrôle restreint sur le fonctionnement.
Quotas d’envoi imposés (souvent bloquants pour un usage pro/newsletters).
En auto-hébergement, vous devrez gérer :
Quotas et limites d’envoi
Sauvegardes
Listes noires antispam
Droits d’accès si plusieurs utilisateurs
Bref : un serveur mail maison donne plus de contrôle, mais demande plus de compétences et de responsabilités.
Nous allons créer un serveur sur un cloud server Hostman, avec Ubuntu 20.04. Le serveur prendra en charge le chiffrement, disposera d’une protection antispam et d’un panneau d’admin web.
Passer en super-utilisateur :
sudo su
Mettre à jour le système :
apt update && apt upgrade
Vérifier le nom d’hôte :
hostname
S’il ne correspond pas :
hostnamectl set-hostname mail.hostname.com
(Remplacez mail.hostname.com par votre FQDN réel.)
Configurer la zone horaire et la synchro via chrony :
apt install chrony
timedatectl set-timezone Europe/Athens
Lister les zones :
timedatectl list-timezones
Activer chrony :
systemctl enable chrony
À l’aide d’iptables, ouvrir :
25, 465 — SMTP (envoi)
110, 995 — POP3 (réception)
143, 993 — IMAP (réception)
iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995,80,443 -j ACCEPT
Rendre les règles persistantes :
netfilter-persistent save
Postfix est un MTA (Mail Transfer Agent) open source à architecture modulaire.
Installer Postfix et le module MySQL :
apt install postfix postfix-mysql
Pendant l’installation sélectionner Internet Site et indiquer votre FQDN.
Créer un utilisateur dédié au stockage des boîtes :
addgroup -gid 1080 vmail
Ensuite, créez l’utilisateur vmail et attribuez le répertoire personnel à /home/mail :
adduser --home /home/mail -gid 1080 -uid 1080 vmail
Vérifier les droits :
ll /home
Éditer :
nano /etc/postfix/main.cf
Ajouter / ajuster :
# Domains we accept mail for
mydestination = localhost.$mydomain, localhost, localhost.localdomain
# Postfix protocol
inet_protocols = ipv4
# Path to the public certificate
smtpd_tls_cert_file = /etc/ssl/mail/public.pem
# Path to the private certificate
smtpd_tls_key_file = /etc/ssl/mail/private.key
Then, add additional options required for Postfix to function correctly:
# Mail storage location
virtual_mailbox_base = /home/mail
# Path to alias maps
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
# Domain storage format
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
# Mailbox storage format
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
# Minimum virtual user ID
virtual_minimum_uid = 1080
# UID for the main user handling mail
virtual_uid_maps = static:1080
# GID for the group handling mail
virtual_gid_maps = static:1080
# Register Dovecot as the mail delivery agent
virtual_transport = dovecot
# Enable secure authentication
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
# Enable TLS encryption for outgoing SMTP connections
smtp_use_tls = yes
# Enable TLS support for incoming connections
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_helo_required = yes
Alias :
nano /etc/postfix/mysql_virtual_alias_maps.cf
Ajoutez le contenu suivant :
user = postfix
password = postfixPa$$w0rd
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Domaines :
nano /etc/postfix/mysql_virtual_domains_maps.cf
Ajoutez le contenu suivant :
user = postfix
password = postfixPa$$w0rd
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%u'
Boîtes :
nano /etc/postfix/mysql_virtual_mailbox_maps.cf
Ajoutez le contenu suivant :
user = postfix
password = postfixPa$$w0rd
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'
Ajuster master.cf
nano /etc/postfix/master.cf
Ajoutez les paramètres suivants :
submission inet n - n - - smtpd
-o smtpd_tls_security_level=may
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=/var/spool/postfix/private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
smtps inet n - n - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Créer le répertoire :
mkdir -p /etc/ssl/mail
Générer les certificats :
openssl req -new -x509 -days 1000 -nodes -out /etc/ssl/mail/public.pem -keyout /etc/ssl/mail/private.key -subj "/C=CY/ST=Limassol/L=Limassol/O=Global Security/OU=IT Department/CN=mail.devnullhost.com"
Activer et redémarrer Postfix :
systemctl enable postfix && systemctl restart postfix
Dovecot est un serveur IMAP/POP3 open source. Installez-le avec le support MySQL :
apt install dovecot-imapd dovecot-pop3d dovecot-mysql
Emplacement du courrier :
nano /etc/dovecot/conf.d/10-mail.conf
Dans le fichier, spécifiez la structure du répertoire de stockage du courrier. Nous utiliserons une hiérarchie domaine → utilisateur :
mail_location = maildir:/home/mail/%d/%u/
Sockets d’authentification :
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
group = vmail
}
}
service stats {
unix_listener stats-reader {
user = vmail
group = vmail
mode = 0660
}
unix_listener stats-writer {
user = vmail
group = vmail
mode = 0660
}
}
Modifiez le fichier de configuration d'authentification Dovecot :
nano /etc/dovecot/conf.d/10-auth.conf
Remplacez la ligne !include auth-system.conf.ext par !include auth-sql.conf.ext, indiquant que l'authentification SQL doit être utilisée.
Ensuite, configurez le chiffrement SSL dans Dovecot :
nano /etc/dovecot/conf.d/10-ssl.conf
Dans ce fichier, ajoutez ce qui suit :
ssl = required
ssl_cert = </etc/ssl/mail/public.pem
ssl_key = </etc/ssl/mail/private.key
Création automatique des boîtes :
nano /etc/dovecot/conf.d/15-lda.conf
lda_mailbox_autocreate = yes
Connexion MySQL:
nano /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfixPa$$w0rd
default_pass_scheme = MD5-CRYPT
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, 1080 AS uid, 1080 AS gid FROM mailbox WHERE username = '%u'
user_query = SELECT CONCAT('/home/mail/',LCASE(`domain`),'/',LCASE(`maildir`)), 1080 AS uid, 1080 AS gid FROM mailbox WHERE username = '%u'
Écoute sur toutes interfaces :
nano /etc/dovecot/dovecot.conf
Dans ce fichier, ajoutez la ligne suivante pour écouter sur toutes les interfaces réseau disponibles :
listen = *
Enfin, activez et redémarrez Dovecot pour appliquer la configuration :
systemctl enable dovecot && systemctl restart dovecot
Prérequis : serveur web, PHP, MySQL (pile LAMP/LEMP). Extensions PHP :
apt install php-mysql php-mbstring php-imap
Télécharger PostfixAdmin :
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz
Créez un répertoire pour PostfixAdmin et extrayez le contenu de l'archive :
mkdir -p /var/www/html/postfixadmin && tar -C /var/www/html/postfixadmin -xvf postfixadmin.tar.gz --strip-components 1
Ensuite, créez un répertoire pour stocker les caches de modèles :
mkdir /var/www/html/postfixadmin/templates_c
Définissez les autorisations appropriées pour que le serveur Web accède au répertoire PostfixAdmin :
chown -R www-data:www-data /var/www/html/postfixadmin
Base de données :
mysql -u root
CREATE DATABASE postfix DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON postfix.* TO 'postfix'@'localhost' IDENTIFIED BY 'postfixPa$$w0rd';
exit;
Configuration locale :
nano /var/www/html/postfixadmin/config.local.php
Le contenu du fichier doit être :
<?php
$CONF['configured'] = true;
$CONF['default_language'] = 'en';
$CONF['database_password'] = 'postfixPa$$w0rd';
$CONF['emailcheck_resolve_domain']='NO';
?>
Ouvrir /postfixadmin/public/setup.php, générer le hash du mot de passe, l’ajouter au fichier, puis se connecter via /postfixadmin/public/login.php.
nano /var/www/html/postfixadmin/config.local.php
Actualisez la page /postfixadmin/public/setup.php et connectez-vous avec le mot de passe utilisé pour générer le hachage. Si tout est correctement configuré, vous devriez voir une page de vérification de la configuration.
En bas de cette page, vous trouverez un formulaire pour créer un compte administrateur. Après avoir créé le compte administrateur, accédez à /postfixadmin/public/login.php et connectez-vous avec les identifiants que vous venez de configurer.
Vous serez redirigé vers le panneau d'administration de PostfixAdmin.
Dans l’interface :
|
Service |
Port |
Sécurité |
|
IMAP |
143 |
STARTTLS |
|
POP3 |
110 |
STARTTLS |
|
SMTP |
25 |
STARTTLS |
Identifiants : ceux définis lors de la création de la boîte.
Nous avons vu ce qu’est un serveur mail auto-hébergé et comment le configurer pas à pas. L’avantage principal : un contrôle total — boîtes illimitées, alias, gestion fine des utilisateurs.
Le tout est réalisable sur un cloud server Hostman, en suivant cette procédure pour obtenir un système de messagerie sécurisé et opérationnel.