Credit : Illustration backtotheweb.fr
Configurer un serveur mail avec Postfix et Dovecot
Architecture du serveur mail
C'est le genre de manip qu'on fait une fois et qu'on oublie. D'où cet article.
Un serveur mail complet repose sur plusieurs composants :
- Postfix : MTA (Mail Transfer Agent) pour envoyer et recevoir les mails
- Dovecot : serveur IMAP/POP3 pour la consultation des mails
- Let's Encrypt : certificat SSL pour le chiffrement
- Roundcube : webmail pour consulter ses mails depuis un navigateur
Prerequis DNS
Avant l'installation, configurez les enregistrements DNS dans votre interface IONOS :
mail.monsite.fr A 203.0.113.50
monsite.fr MX 10 mail.monsite.fr
monsite.fr TXT "v=spf1 mx a ip4:203.0.113.50 -all"
_dmarc.monsite.fr TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@monsite.fr"
Verifiez que le reverse DNS (PTR) de votre IP pointe vers mail.monsite.fr depuis le panel IONOS.
Installer Postfix
sudo apt update
sudo apt install postfix postfix-policyd-spf-python -y
Choisissez Site Internet lors de l'installation. Configurez /etc/postfix/main.cf :
myhostname = mail.monsite.fr
mydomain = monsite.fr
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost
mynetworks = 127.0.0.0/8 [::1]/128
# TLS
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.monsite.fr/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mail.monsite.fr/privkey.pem
smtpd_tls_security_level = may
smtp_tls_security_level = may
# Restrictions anti-spam
smtpd_helo_required = yes
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf
# Dovecot pour l'authentification SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
Installer et configurer Dovecot
sudo apt install dovecot-imapd dovecot-lmtpd -y
Editez /etc/dovecot/conf.d/10-mail.conf :
mail_location = maildir:~/Maildir
Editez /etc/dovecot/conf.d/10-auth.conf :
disable_plaintext_auth = yes
auth_mechanisms = plain login
Editez /etc/dovecot/conf.d/10-ssl.conf :
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.monsite.fr/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.monsite.fr/privkey.pem
ssl_min_protocol = TLSv1.2
Configurez le socket d'authentification dans /etc/dovecot/conf.d/10-master.conf :
Attention : vérifiez bien deux fois avant d'appliquer en production.
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
Configurer DKIM avec OpenDKIM
sudo apt install opendkim opendkim-tools -y
sudo mkdir -p /etc/opendkim/keys/monsite.fr
sudo opendkim-genkey -s default -d monsite.fr -D /etc/opendkim/keys/monsite.fr
sudo chown -R opendkim:opendkim /etc/opendkim
Ajoutez l'enregistrement DNS affiche dans le fichier default.txt :
default._domainkey.monsite.fr TXT "v=DKIM1; k=rsa; p=MIIBIjANBg..."
Configurez OpenDKIM dans /etc/opendkim.conf :
Mode sv
Socket inet:8891@localhost
Domain monsite.fr
Selector default
KeyFile /etc/opendkim/keys/monsite.fr/default.private
Ajoutez le milter dans Postfix (/etc/postfix/main.cf) :
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Installer Roundcube
sudo apt install roundcube roundcube-plugins -y
Configurez Nginx pour servir Roundcube :
server {
listen 443 ssl;
server_name webmail.monsite.fr;
root /var/lib/roundcube/public_html;
index index.php;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Redemarrez tous les services :
sudo systemctl restart postfix dovecot opendkim nginx
Testez l'envoi avec mail-tester.com pour verifier votre score de delivrabilite. Avec SPF, DKIM et DMARC correctement configures, vous devriez obtenir un score de 10/10.