igloo

Serveur mail sous Gentoo


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.0A82.66.226.80
rod-again.com.0MX1 mail.rod-again.com
rod-again.com.0SPFv=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

Syslogyes
SyslogSuccessyes

Canonicalizationrelaxed/relaxed
Domainrod-again.com
Selectormail

KeyFile/var/lib/opendkim/mail.private
Socketinet:8891@localhost
ReportAddresspostmaster@rod-again.com
PidFile/var/run/opendkim/opendkim.pid
InternalHosts192.168.1.0/24
UMask0117
UserIDopendkim
Modesv

# 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._domainkeyINTXT"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.INTXT"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