Comment configurer votre propre serveur de messagerie
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.).
Protocoles de réception et d’envoi d’e-mails Copier le lien
SMTP (Simple Mail Transfer Protocol) Copier le lien
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 (Post Office Protocol) Copier le lien
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).
IMAP (Internet Message Access Protocol) Copier le lien
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).
Pourquoi mettre en place son propre serveur mail ? Copier le lien
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.
Mise en place du serveur de messagerie Copier le lien
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.
Préparation du serveur Copier le lien
Passer en super-utilisateur :
sudo suMettre à jour le système :
apt update && apt upgradeVérifier le nom d’hôte :
hostnameS’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-timezonesActiver chrony :
systemctl enable chronyOuvrir les ports nécessaires Copier le lien
À l’aide d’iptables, ouvrir :
-
25, 465 — SMTP (envoi)
-
110, 995 — POP3 (réception)
-
143, 993 — IMAP (réception)
- 80, 443 — HTTP/HTTPS (services web)
iptables -I INPUT 1 -p tcp --match multiport --dports 25,110,143,465,587,993,995,80,443 -j ACCEPTRendre les règles persistantes :
netfilter-persistent saveInstaller et configurer Postfix Copier le lien
Postfix est un MTA (Mail Transfer Agent) open source à architecture modulaire.
Installer Postfix et le module MySQL :
apt install postfix postfix-mysqlPendant l’installation sélectionner Internet Site et indiquer votre FQDN.
Créer un utilisateur dédié au stockage des boîtes :
addgroup -gid 1080 vmailEnsuite, créez l’utilisateur vmail et attribuez le répertoire personnel à /home/mail :
adduser --home /home/mail -gid 1080 -uid 1080 vmailVérifier les droits :
ll /homeConfiguration principale de Postfix Copier le lien
Éditer :
nano /etc/postfix/main.cfAjouter / 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
Fichiers de mappage MySQL Copier le lien
Alias :
nano /etc/postfix/mysql_virtual_alias_maps.cfAjoutez 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.cfAjoutez 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.cfAjoutez 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.cfAjoutez 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}
Générer les certificats de sécurité Copier le lien
Créer le répertoire :
mkdir -p /etc/ssl/mailGé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 postfixInstaller et configurer Dovecot Copier le lien
Dovecot est un serveur IMAP/POP3 open source. Installez-le avec le support MySQL :
apt install dovecot-imapd dovecot-pop3d dovecot-mysqlEmplacement du courrier :
nano /etc/dovecot/conf.d/10-mail.confDans 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.confRemplacez 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.confDans 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.conflda_mailbox_autocreate = yesConnexion MySQL:
nano /etc/dovecot/dovecot-sql.conf.extdriver = 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.confDans 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 dovecotInstaller et configurer PostfixAdmin Copier le lien
Prérequis : serveur web, PHP, MySQL (pile LAMP/LEMP). Extensions PHP :
apt install php-mysql php-mbstring php-imapTélécharger PostfixAdmin :
wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gzCré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 1Ensuite, créez un répertoire pour stocker les caches de modèles :
mkdir /var/www/html/postfixadmin/templates_cDé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/postfixadminBase 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.phpLe 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.phpActualisez 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.
Créer une boîte aux lettres dans PostfixAdmin Copier le lien
Dans l’interface :
- Domain List → New Domain puis Overview → Create Mailbox.
- Paramètres de connexion dans un client mail :
|
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.
Conclusion Copier le lien
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.