mise en ligne: 06/2024
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" |
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
protocols = imap pop3 # sasl config service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfxi } } |
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 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 | |
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 va recopier les certificats de notre serveur mails et automatiser leur mise à jour
# emacs /etc/postfix/main.cf
# TLS Authentication smtpd_tls_security_level = may smtpd_tls_auth_only = no 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 |
# rc-service opendkim restart
# rc-service postfix restart
À 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
On a un dernier fichier à éditer (attention au nom de domaine dans le chemin vers le fichier)
# emacs /etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/letsencrypt/live/mail.rod-again.com/cert.pem ssl_key = </etc/letsencrypt/live/mail.rod-again.com/privkey.pem |
On redemarre Dovecot et Postfix
# rc-service dovecot restart
# rc-service postfix restart
Normalement, vous êtes opérationel ;)
vous pouvez testez vos mails sur mail-tester.com