Après avoir installé un serveur de messagerie complètement fonctionnel, nous allons installer et configurer deux mécanismes pour permettre à nos correspondants de détecter des usurpations de nos adresses.
Article éditer le 19 septembre : ajout du paragraphe de contrôle d’adresse d’émetteur
Source : Part 4: Set Up SPF & DKIM with Postfix on et c’est la suite de Serveur mail et webmail – part. 3 – postfix admin – Mariadb
SPF et DKIM
SFP, pour Sender Policy Framework, spécifie quels sont les serveurs ou adresses IP autorisés à émettre des mails pour nos domaines de messagerie, en l’occurrence notre serveur. Nous allons écrire ceci dans un enregistrement DNS
DKIM pour DomainKeys Identified Mail est un mécanisme de signature des mails émis. Nous publierons la clé publique dans un enregistrement DNS.
DMARC pour Domain-based Message Authentication, Reporting, and Conformance, permet d’indiquer quoi faire quand les mécanismes ci-dessus échoue
SPF – sortant
A l’apex de notre domaine nous allons ajouter un enregistrement TXT qui contient v=spf1 mx ~all qui signifie que seul les relais de mails sont autorisés à émettre – ou un même serveur sert à recevoir et émettre. Si les mails proviennent d’un autre serveur, ils doivent être considérer douteux. En mettant -all à la place on indique de rejeter les mails.
Je n’ai pas mis les guillemets lors de la saisie, Gandi les a ajoutés. Je ne détail pas la syntaxe plus avant, la littérature sur internet abonde.
SPF – entrant
Nous allons analyser les messages entrant. Installons le module
root@klopmail:~# apt-get install postfix-policyd-spf-python
Pour le lancer avec les autres services postfix cela se passe dans le fichier master.cf
root@klopmail:~# vi /etc/postfix/master.cf
et ajoutons les lignes suivantes à la fin
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
Sauvegardons ce fichier et configurons ce module spf dans main.cf
root@klopmail:~# vi /etc/postfix/main.cf
Ajoutons les lignes suivantes à la fin
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf
Sauvegardons et redémarrons le service
root@klopmail:~# systemctl restart postfix
Désormais, lorsqu’un message provient d’un émetteur avec un enregistrement SPF, l’entête Received-SPF est positionnée.
Installons DKIM
root@klopmail:~# apt-get install opendkim opendkim-tools
Ajoutons l’utilisateur postfix au groupe opendkim
root@klopmail:~# usermod -a -G opendkim postfix
root@klopmail:~# groups postfix
postfix : postfix opendkim
Éditons le fichier de configuration
root@klopmail:~# vi /etc/opendkim.conf
Décommentons les trois suivantes :
Canonicalization relaxed/simple
Mode sv
SubDomains no
Ajoutons les lignes suivantes à la fin du fichier
# Map domains in From addresses to keys used to sign messages
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
# Hosts to ignore when verifying signatures
ExternalIgnoreList /etc/opendkim/trusted.hosts
# A set of internal hosts whose mail should be signed
InternalHosts /etc/opendkim/trusted.hosts
Créons l’arborescence
root@klopmail:~# mkdir -p /etc/opendkim/keys
root@klopmail:~# chown -R opendkim:opendkim /etc/opendkim
root@klopmail:~# chmod go-rw /etc/opendkim/keys/
Nous créons la table de signature
root@klopmail:~# vi /etc/opendkim/signing.table
Une clé pour tout, ajoutons les lignes
*@dync.fr default._domainkey.dync.fr
*@*.dync.fr default._domainkey.dync.fr
*@framboisier.fr default._domainkey.framboisier.fr
*@*.framboisier.fr default._domainkey.framboisier.fr
Sauvegardons et créons la table des clés
root@klopmail:~# vi /etc/opendkim/key.table
Avec le contenu suivant
default._domainkey.dync.fr dync.fr:default:/etc/opendkim/keys/dync.fr/default.private
default._domainkey.framboisier.fr framboisier.fr:default:/etc/opendkim/keys/framboisier.fr/default.private
Sauvegardons et créons le fichier trusted.hosts
root@klopmail:~# vi /etc/opendkim/trusted.hosts
Avec le contenu suivant, pour expliquer à OpenDKIM que les mails locaux et provenant des domaines listés de signer plutôt que de vérifier la signature.
127.0.0.1
::1
localhost
.dync.fr
.framboisier.fr
Les noms de domaines commence par un point. Sauvegardons le fichier.
Génération de la bi-clé
Générons une bi-clé de 2048 bits (-b) pour le domaine dync.fr (-d) sauvegardée dans le répertoire (-D) avec comme nom/selecteur default (-s)
root@klopmail:~# mkdir /etc/opendkim/keys/dync.fr
root@klopmail:~# opendkim-genkey -b 2048 -d dync.fr -D /etc/opendkim/keys/dync.fr -s default -v
opendkim-genkey: generating private key
opendkim-genkey: private key written to default.private
opendkim-genkey: extracting public key
opendkim-genkey: DNS TXT record written to default.txt
root@klopmail:~# chown opendkim:opendkim /etc/opendkim/keys/dync.fr/default.private
root@klopmail:~# chmod 600 /etc/opendkim/keys/dync.fr/default.private
root@klopmail:~# ln -s /etc/opendkim/keys/dync.fr /etc/opendkim/keys/framboisier.fr
Le fichier default.txt contient l’enregistrement DNS à créer
root@klopmail:~# cat /etc/opendkim/keys/dync.fr/default.txt
default._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsxAFlMfR6JEcmeRP8FZQ9zRTRP8xiPVyMMRduFURaLkjA3tqStNMFW6AisXQd5e32T2C2G8K+IiRqsTh9Pk7b4aQ6FS61M2vWdErSN3L/J1KeVeaVMl9IJs/ITRepKFmPE2jpY0+pLttE6h5e1X7Mo1BE9a4dCEv1qj6MbydoMbBh+tbb84Wrn2Pk49CZ372s8PXsYP9vxOH4y"
"DpWDQbML+r5szX9/J7jHtP0Rp3eDjSjxH4mennv/YxwutnrMh+hlc3jAYv/Q87VA4ch/1PVwDn1T9Na9jzfuEEMLSdCGRibJqsj3g7YYXFS5qgFAc4QfBeC93k0SetRCMAVjtSNwIDAQAB" ) ; ----- DKIM key default for dync.fr
Créons l’enregistrement DNS default._domainkey de type texte dans la zone dync.fr avec l’intégralité du contenu de ce qui est entre parenthèses
et dans la zone framboisier.fr, nous créons un alias
default._domainkey in cname default._domainkey.dync.fr
On peut tester
root@klopmail:~# opendkim-testkey -d dync.fr -s default -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key 'default._domainkey.dync.fr'
opendkim-testkey: key secure
opendkim-testkey: key OK
Si key not secure apparait, cela signifie que votre zone n’est pas protégé par DNSSEC, ce n’est pas bloquant.
Brancher OpenDKIM sur postfix
Les échanges entre OpenDKIM et postfix se font via une socket Unix usuellement /run/opendkim/opendkim.sock. Mais sous Debian postfix tourne dans un environnement chroot, ie sa racine est /var/spool/postfix et ne peut en sortir.
Créons un répertoire propriété d’opendkim et accessible par postfix.
root@klopmail:~# mkdir /var/spool/postfix/opendkim
root@klopmail:~# chown opendkim:postfix /var/spool/postfix/opendkim
Éditons le fichier de configuration d’OpenDKIM
root@klopmail:~# vi /etc/opendkim.conf
Et changer la ligne Socket local:… par
Socket local:/var/spool/postfix/opendkim/opendkim.sock
Sauvegardons et fermons ce fichier. Éditons /etc/default/opendkim
root@klopmail:~# vi /etc/default/opendkim
Et remplaçons SOCKET=… par
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
Sauvegardons ce fichier et configurons postfix :
root@klopmail:~# vi /etc/postfix/main.cf
Et ajoutons à la fin du fichier
# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
Sauvegardons ce fichier et redémarrons OpenDKIM et postfix
root@klopmail:~# systemctl restart opendkim postfix
DMARC
DMARC est l’enregistrement DNS _dmarc de type texte (créons le dans la zone dync.fr)
_dmarc in txt "v=DMARC1; p=none; pct=100; rua=mailto:abuse@dync.fr"
- v= est la version
- p= est l’action « none » pour rien, cela peut être « reject » ou « quarantine »
- pct= est le pourcentage des mails auxquels s’applique la politique
- rua= est l’URL où envoyer les rapports
Pour les autres domaine, je vais créer un alias (ne pas oublier le . à la fin)
_dmarc in cname _dmarc.dync.fr.
Tests
Envoyons un message à une boite gmail et depuis l’interface web cliquons sur les trois points verticaux et « afficher l’original » :
Et en répondant au message, dans Thunderbird dans le menu autre, en sélectionnant « Afficher la source », nous devrions voir Authentication-Results … dkim=pass et Reveived-SPF:Pass
Vous pouvez aussi tester avec Mail Tester, le résultat devrait être de 10/10
Interdire les messages d’internet avec des adresses d’émetteur locaux
Paragraphe ajouter le 19 Septembre
Nous allons ignorer un message en provenance d’internet dont l’adresse d’émetteur est un domaine local. J’ai commencer par les rejeter, mais cela génère un avis de non-remise qui, considéré comme légitime, arrive dans la boite de « l’émetteur ». Commençons par créer la table :
root@klopmail:~# vi /etc/postfix/reject-local
avec le contenu suivant :
framboisier.fr DISCARD
dync.fr DISCARD
Transformons le en hash table:
root@klopmail:~# postmap /etc/postfix/reject-local
Intégrons le à la configuration de postfix :
root@klopmail:~# vi /etc/postfix/main.cf
Ajoutons les lignes suivantes après la section smtpd_recipient_restrictions =
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
check_sender_access hash:/etc/postfix/reject-local
Redémarrons postfix
root@klopmail:~# systemctl restart postfix
L’article suivant traite de l’installation d’un webmail, c’est optionnel : Serveur mail et webmail – part. 5 – Roundcube