mise à jour: 03/2026
Pour un serveur mail basique mais complet et sécurisé, on va utiliser Postfix + Dovecot et configurer une clé DKIM et des entrées SPF et DMARC
On installe et on configure Postfix. Plutôt qu'une base de données, on va créer des utilistateurs qui recevront leurs messages dans ~/.maildir et géreront leurs mails via Thunderbird
# emerge -a mail-mta/postfix
# emacs /etc/postfix/main.cf
| myhostname = rod-again.com | |
| mydomain = rod-again.com | |
| myorigin = $myhostname | |
| inet_interfaces = all | |
| mynetwork_style = host | |
| mynetworks = 192.168.1.0/24 | # liste des réseaux autorisés à envoyer des mails |
| mydestination = $myhostname, localhost, $mydomain, mail.$mydomain, www.$mydomain | |
| home_mailbox = .maildir/ | |
| # sasl config | |
| smtpd_sasl_type = dovecot | |
| smtpd_sasl_path = private/auth | |
| smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination |
Il faut configurer les alias, plusieurs adresses peuvent pointer vers un seul utilistateur.
# emacs /etc/mail/aliases
| # Basic system aliases -- these MUST be present | |
| MAILER-DAEMON: | postmaster |
| postmaster: | rod |
| # General redirections for pseudo accounts. | |
| adm: | rod |
| bin: | rod |
| daemon: | rod |
| exim: | rod |
| lp: | rod |
| mail: | rod |
| named: | rod |
| nobody: | rod |
| postfix: | rod |
| # Well-known aliases -- these should be filled in! | |
| root: | rod |
| operator: | rod |
| # Standard RFC2142 aliases | |
| abuse: | rod |
| ftp: | rod |
| hostmaster: | rod |
| news: | rod |
| noc: | rod |
| security: | rod |
| usenet: | rod |
| uucp: | rod |
| webmaster: | rod |
| www: | rod |
On recharge la configuration avec la commande 'newaliases' et on ajoute notre nom de domaine à /etc/conf.d/net
# newaliases
# emacs /etc/conf.d/net
| dns_domain_lo="rod-again.com" |
Si ça n'a pas déjà été fait, on édite /etc/conf.d/hostname pour avoir autre chose que 'localhost'
# emacs /etc/con.d/hostname
| HOSTNAME="mail" # Au choix, bien sûr, ce sera le 'selector' pour la configuration d'opendkim |
On vérifie qu'on a bien un 'Fully Qualified Domain Name'
# hostname -f
On peut lancer le service, l'ajouter au démarrage et consulter le log
# rc-service postfix start
# rc-update add postfix default
# tail -f /var/log/syslog
|
May 29 13:14:17 mail postfix/postfix-script[5101]: starting the Postfix mail system May 29 13:14:17 mail postfix/master[5103]: daemon started -- version 3.8.5, configuration /etc/postfix |
On assigne quelque variables USE à Dovecot avant de l'installer
# echo net-mail/dovecot bzip2 maildir pam ssl zlib > /etc/portage/package.use/dovecot
# emerge -a dovecot
# emacs /etc/dovecot/dovecot.conf
|
dovecot_config_version = 2.4.2 dovecot_storage_version = 2.4.2 !include_try conf.d/*.conf protocols { imap = yes } mail_home = /srv/mail/%{user} mail_driver = maildir mail_path = ~/.maildir mail_uid = postfix mail_gid = postfix namespace inbox { inbox = yes separator = / } passdb pam { } userdb passwd { use_worker = yes } # sasl config service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } } |
On démarre le nouveau service, si tout ce passe bien, on l'ajoute au démarrage et on vérifie qu'il écoute bien sur le port 25
# rc-service dovecot start
# rc-update add dovecot default
# netstat -apn --inet
Il va falloir ouvrir les ports nécessaires sur votre routeur. Si vous avez une Freebox, il faut vous rendre dans votre espace abonné et autoriser le smtp sortant sur le port 25. Profitez-en pour activer le Reverse DNS (Onglet 'ma freebox' pour les deux options).
Depuis l'interface web de votre box, redirigez les ports 25, 143, 993 (imap et imaps), 587, 465 (smtp et smtps) et 8891 (pour DKIM) vers votre serveur mail
Il faudra ensuite modifier vos DNS et ajouter un enregistrement SPF (Sender Policy FRamework) au format TXT (pensez à modifier l'adresse IP):
| mail.rod-again.com. | 0 | A | 82.66.226.80 |
| rod-again.com. | 0 | MX | 1 mail.rod-again.com |
| rod-again.com. | 0 | SPF | v=spf1 a mx ip4:82.66.226.80 ~all |
À ce stade, même si le protocole TLS n'est pas encore configuré, on peut se connecter avec Thunderbird.
On va installer le paquet 'opendkim', le configurer, générer une clé, lancer le service et créer une nouvelle entrée DNS
# emerge -a opendkim
# emerge -a --config opendkim
# emacs /etc/opendkim/opendkim.conf
| Syslog | yes |
| SyslogSuccess | yes |
| Canonicalization | relaxed/relaxed |
| Domain | rod-again.com |
| Selector | mail # C'est le nom de votre machine (hostname) |
| KeyFile | /var/lib/opendkim/mail.private |
| Socket | inet:8891@localhost |
| ReportAddress | postmaster@rod-again.com |
| PidFile | /var/run/opendkim/opendkim.pid |
| InternalHosts | 192.168.1.0/24 |
| UMask | 0117 |
| UserID | opendkim |
| Mode | sv |
# chown -R opendkim:opendkim /var/lib/opendkim
# chmod 0700 /var/lib/opendkim
# chmod 0600 /var/lib/opendkim/mail.*
# rc-service opendkim start
# rc-update add opendkim default
On peut trouver la clé à copier dans votre nouvelle entrée DNS (p=…) dans /var/lib/opendkim/<selector>.txt
| mail._domainkey | IN | TXT | "v=DKIM1; k=rsa; p=MIGfMA0GCS…jnwIDAQAB;" |
Pour vérifier votre configuration, vous pouvez envoyer un mail vide à check-auth@verifier.port25.com, le diagnostic vous sera renvoyé en quelques secondes.
Soyez sûr que tout fonctionne avant d'ajouter votre entrée DMARC (Domain-based Message Authentication, Reporting and Conformance)
| _dmarc.rod-again.com. | IN | TXT | "v=DMARC1; p=quarantine;" |
Il ne reste plus qu'à configurer l'authentification TLS (attention au noms de domaine dans les liens vers les certificats)
On édite les fichiers /etc/postfix/master.cf, /etc/postfix/main.cf et /etc/dovecot/dovecot.conf
On va recopier les certificats de notre serveur web et automatiser leur mise à jour
# emacs /etc/postfix/master.cf
|
smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes |
# emacs /etc/postfix/main.cf
|
readme_directory = no inet_protocols = ipv4 meta_directory = /etc/postfix shlib_directory = /usr/lib64/postfix/${mail_version} home_mailbox = .maildir/ smtpd_forbid_bare_newline = normalize smtpd_forbid_bare_newline_exclusions = $mynetworks # sasl config smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth broken_sasl_auth_clients = no smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination # TLS Authentication smtpd_tls_security_level = may smtpd_tls_auth_only = yes smtpd_tls_loglevel = 3 smtpd_tls_key_file = /etc/letsencrypt/live/mail.rod-again.com/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/mail.rod-again.com/cert.pem #smtpd_tls_CAfile = /etc/ssl/certs/cacert.org_root.pem smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom # OpenDKIM mail verification smtpd_milters = inet:localhost:8891 non_smtpd_milters = $smtpd_milters # Enable TLS for sending mails if supported by other server smtp_use_tls = yes smtp_tls_security_level = may smtp_tls_key_file = /etc/letsencrypt/live/mail.rod-again.com/privkey.pem smtp_tls_cert_file = /etc/letsencrypt/live/mail.rod-again.com/fullchain.pem |
# emacs /etc/dovecot/dovecot.conf
|
ssl_server { cert_file = /etc/letsencrypt/live/mail.rod-again.com/fullchain.pem key_file = /etc/letsencrypt/live/mail.rod-again.com/privkey.pem } |
# rc-service opendkim dovecot postfix reload
À faire sur votre serveur https
On affiche les certificats en cour, on ajoute notre nouveau nom de domaine et on créé un nouveau certificat.
# certbot certificates
# certbot --expand -d rod-again.com,www.rod-again.com,irc.rod-again.com,mail.rod-again.com
# certbot certonly -d mail.rod-again.com
On copie le repertoire /etc/letsencrypt vers notre serveur mail (par exemple dans /tmp) et on automatise la procédure avec crontab, on aura au préalable créé une clé SSH et édité /etc/hosts pour se connecter au serveur mail sans mot de passe
# rsync -al --delete /etc/letsencrypt rod@mail:/tmp
# crontab -e
|
0 0 1,15 * * certbot renew --force-renewal 0 1 1,15 * * rsync -al --delete /etc/letsencrypt rod@mail:/tmp |
# rc-service cronie restart
Depuis notre serveur mail
On copie le repertoire letsencrypt dans /etc
# rsync -al /tmp/letsencrypt /etc
# rm -rf /tmp/letsencrypt
# crontab -e
| 10 1 1,15 * * rsync -al --delete /tmp/letsencrypt /etc && chown -R root:root /etc/letsencrypt && rm -rf /tmp/letsencrypt |
# rc-service cronie restart
Normalement, vous êtes opérationel ;)
vous pouvez testez vos mails sur mail-tester.com