Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
serveur_hebergement:serveur_mail:partie_4_spf_dmarc_et_dkim [2022/11/03 10:26] – fate | serveur_hebergement:serveur_mail:partie_4_spf_dmarc_et_dkim [2023/08/08 14:00] (Version actuelle) – modification externe 127.0.0.1 |
---|
====== Partie 4 : SPF, DMARC et DKIM ====== | ====== Partie 4 : SPF, DMARC et DKIM ====== |
| |
====== En cours de rédaction ====== | SPF, DMARC et DKIM sont des mécanismes permettant de lutter contre le spam. Voyons comment fonctionnent plus en détails ces différents mécanismes. |
| |
Expliquer ce qu'est SPF et DMARC. | ===== Fonctionnement du SPF ===== |
| |
Pour SPF, ajoutez une entrée DNS type TXT : <code>v=spf1 mx ip4:adresseIPV4 ip6:adresseIPV6 ~all</code> | De base, le protocole SMTP ne permet pas de vérifier qu'un expéditeur a bien le droit d'envoyer un courriel depuis tel domaine. C'est là que le SPF (Sender Policy Framework ou Système de Politique d'Envoi en français) va servir. |
Pour DMARC, ajoutez une entrée DNS type TXT _dmarc : <code> "v=DMARC1; p=reject; rua=mailto:postmaster@domaine.fr; ruf=mailto:admin@domaine.fr; fo=0:1:d:s; adkim=s; aspf=s; sp=reject"</code> | Une entrée DNS de type TXT est ajoutée au nom de domaine, listant les adresses IP autorisés et/ou interdites à envoyer du courriel depuis ce domaine. Lorsque le destinataire (Postfix, pas la personne qui reçoit le courriel) reçoit un courrier, il interroge le domaine pour récupérer les adresses IP autorisées et/ou interdites à envoyer des courriels et vérifie si l'adresse IP qui a envoyée le courriel est autorisée ou non à envoyer des courriels. |
| |
Il faut également que Postfix vérifie le SPF des mails que l'on reçoit afin de se protéger en partie des spams. | ===== Fonctionnement de DKIM ===== |
Installez postfix-policyd-spf-python : <code bash>sudo aptitude install postfix-policyd-spf-python</code> | |
| |
Ouvrez le fichier /etc/postfix/master.cf et ajoutez la ligne suivante afin que Postfix démarre le programme policyd-spf au démarrage : | DKIM (DomainKeys Identified Mail ou Courrier identifié par clés de domaine en français), est un système d'authentification à base de clés permettant au destinataire de s'assurer que le courriel a bien été envoyé depuis le domaine et qu'il n'y a pas d'usurpation. |
| Le serveur qui envoi le courriel met à disposition une clé publique via une entrée DNS de type TXT et signe tous les courriels envoyés. Le destinataire vérifie que la signature du courriel est valide à l'aide de la clé contenue dans l'entrée DNS de type TXT. Si la signature est valide, le destinataire sait que le courriel a bien été envoyé depuis ce domaine et n'a pas été modifié après son envoi. |
| |
| ===== Fonctionnement de DMARC ===== |
| |
| DMARC (Domain-based message authentication, reporting and conformance ou Authentification, rapport et conformité de message basé sur le domaine en français) est lié aux mécanismes SPF et DKIM. DMARC permet d'indiquer au destinataire que le courriel est protégé par SPF et/ou DKIM et comment gérer le courriel en cas d'échec d'un ou des deux mécanismes : l'accepter, le mettre en en quarantaine ou le rejeter. |
| DMARC permet également d'indiquer une adresse de retour afin de recevoir le résultat des tests SPF et DKIM (réussi ou échoué). |
| |
| |
| Passons à l'installation. |
| |
| ===== Installation du SPF ===== |
| |
| Commencez par installer postfix-policyd-spf-python qui va permettre à Postfix de vérifier le SPF des courriels reçus : |
| <code bash>sudo aptitude install postfix-policyd-spf-python</code> |
| |
| Ouvrez le fichier master.cf : |
| <code bash>sudo nano /etc/postfix/master.cf</code> |
| Ajoutez la ligne suivante afin que Postfix démarre le programme policyd-spf au démarrage : |
<code> | <code> |
policyd-spf unix - n n - 0 spawn | policyd-spf unix - n n - 0 spawn |
</code> | </code> |
| |
Ouvrez le fichier /etc/postfix/main.cf at ajoutez les lignes suivantes : | Ouvrez le fichier main.cf : |
| <code bash>sudo nano /etc/postfix/main.cf</code> |
| Ajoutez les lignes suivantes : |
<code> | <code> |
policyd-spf_time_limit = 3600 | policyd-spf_time_limit = 3600 |
smtpd_recipient_restrictions = | smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service unix:private/policyd-spf |
permit_mynetworks, | |
permit_sasl_authenticated, | |
reject_unauth_destination, | |
check_policy_service unix:private/policyd-spf | |
</code> | </code> |
Ces lignes servent à rejeter les mails qui ne sont pas adressés à notre domaine. | Ces lignes servent à rejeter les courriels qui ne sont pas adressés à notre domaine : |
Permit_mynetworks et permit_sasl_authenticated acceptent les e-mails à destination d'une adresse locale ou appartenant à un utilisateur enregistré. | * Permit_mynetworks et permit_sasl_authenticated acceptent les courriels à destination d'une adresse locale ou appartenant à un utilisateur enregistré. |
Reject_unauth_destination rejette les e-mails non adressés à notre domaine. | * Reject_unauth_destination rejette les courriels non adressés à notre domaine. |
Check_policy_service unix:private/policyd-spf active la vérification de SPF pour les mails entrants. | * Check_policy_service unix:private/policyd-spf active la vérification de SPF pour les courriels entrants. |
| |
Expliquer ce qu'est DKIM. | Passons à configuration du SPF pour les courriels sortant. |
| Ajoutez une entrée DNS type TXT à votre domaine : |
| <code>v=spf1 mx ip4:adresseIPV4 ip6:adresseIPV6 ~all</code> |
| Remplacez "adresseIPV4" et "adresseIPV6" par les adresses IP de votre serveur. |
| |
Installez opendkim : <code bash>sudo aptitude install opendkim opendkim-tools</code> | Cette entrée DNS signifie que les courriels ayant votre domaine (toto@domaine.fr par exemple) doivent être envoyé depuis l'adresse IP ou le domaine MX figurant dans l'entrée TXT. Le "~all" signifie que si le courriel est envoyé depuis un adresse IP ou un domaine MX différents de ceux listés dans l'entrée DNS, le MTA recevant le courriel va délivrer le courriel mais en marquant que la vérification SPF a échoué. Si vous mettez "-all", le courriel sera rejeté en cas d'échec de la vérification. |
| |
Ouvrez le fichier /etc/opendkim.conf. | Passons à DKIM. |
Décommentez les lignes | |
| ===== Installation du DKIM ===== |
| |
| Installez opendkim : |
| <code bash>sudo aptitude install opendkim opendkim-tools</code> |
| |
| Ouvrez le fichier opendkim.conf : |
| <code bash>sudo nano /etc/opendkim.conf</code> |
| Décommentez les lignes suivantes : |
<code> | <code> |
#Mode sv | #Mode sv |
#SubDomains no | #SubDomains no |
</code> | </code> |
Mode sv active la vérification pour les mails entrant et la signature pour les mails sortant et subdomains no désactive la gestion des sous-domaines. | "Mode sv" active la vérification pour les courriels entrant et ajoute une signature pour les courriels sortants. "subdomains no" désactive la gestion des sous-domaines vu que les courriels ne seront jamais envoyés depuis un sous-domaine. |
| |
Commentez la ligne Socket local:/run/opendkim/opendkim.sock et décommentez la ligne Socket inet:8891@localhost. Cela va servir à faire communiquer OpenDKIM avec Postfix. | Commentez la ligne suivante : |
| <code>Socket local:/run/opendkim/opendkim.sock</code> |
| |
| Décommentez la ligne suivante : |
| <code>Socket inet:8891@localhost</code>. |
| On désactive le fichier de socket et on demande à OpenDKIM d'écouter sur le port 8891. Cela va servir à faire communiquer OpenDKIM avec Postfix. |
| |
Ajoutez les lignes suivantes à la fin du fichier : | Ajoutez les lignes suivantes à la fin du fichier : |
InternalHosts /etc/opendkim/TrustedHosts | InternalHosts /etc/opendkim/TrustedHosts |
</code> | </code> |
Ces lignes indiquent à OpenDKIM les fichiers dont on va se servir pour configurer DKIM. | Ces lignes indiquent à OpenDKIM les fichiers dont on va se servir pour configurer la signature DKIM. |
| |
On enregistre et on crée le dossier qui contiendra les clés privées (une par nom de domaine) : | Créez le dossier qui contiendra les clés privées (une par nom de domaine) : |
<code bash>sudo mkdir -p /etc/opendkim/keys</code> | <code bash>sudo mkdir -p /etc/opendkim/keys</code> |
| |
</code> | </code> |
| |
Créer fichier /etc/opendkim/TrustedHosts et y mettre | Créez le fichier TrustedHosts : |
| <code bash>sudo nano /etc/opendkim/TrustedHosts</code> |
| Ajouter les lignes suivantes : |
<code> | <code> |
127.0.0.1 | 127.0.0.1 |
.domaine.fr | .domaine.fr |
</code> | </code> |
| Remplacez domaine.fr par votre nom de domaine. Ces lignes indique à OpenDKIM que lorsque un courriel est envoyé depuis le serveur (127.0.0.1 et localhost) ou depuis le domaine, il faut ajouter une signature DKIM. |
| |
| Créez le fichier KeyTable : |
Créer fichier /etc/opendkim/KeyTable et mettre dedans : | <code bash>sudo nano /etc/opendkim/KeyTable</code> |
<code>default._domainkey.domaine.fr domaine.fr:default:/etc/opendkim/keys/example.com/default.private</code> | Ajoutez les lignes suivantes : |
Ça indique où est située la clé privée | <code>default._domainkey.domaine.fr domaine.fr:default:/etc/opendkim/keys/domaine.fr/default.private</code> |
| Remplacez domaine.fr par votre nom de domaine. Ça indique où est située la clé privée. |
| |
Créer fichier /etc/opendkim/SigningTable et mettre dedans : | Créer fichier /etc/opendkim/SigningTable et mettre dedans : |
Ces deux lignes indiquent que lorsqu'un mail sera envoyé depuis votre domaine ou sous-domaine (seconde ligne) il devra être signé avec la clé privée identifiée par default._domainkey.domaine.fr | Ces deux lignes indiquent que lorsqu'un mail sera envoyé depuis votre domaine ou sous-domaine (seconde ligne) il devra être signé avec la clé privée identifiée par default._domainkey.domaine.fr |
| |
Dans répertoire /etc/opendkim/keys/ créez un répertoire domaine.fr : <code bash>sudo mkdir /etc/opendkim/keys/domaine.fr</code> | Dans répertoire /etc/opendkim/keys/ créez un répertoire domaine.fr : |
Lancez la commande suivante pour générer les clés : <code bash>sudo opendkim-genkey -b 2048 -s default -d domaine.fr -D /etc/opendkim/keys/domaine.fr</code> | <code bash>sudo mkdir /etc/opendkim/keys/domaine.fr</code> |
| Lancez la commande suivante pour générer les clés : |
| <code bash>sudo opendkim-genkey -b 2048 -s default -d domaine.fr -D /etc/opendkim/keys/domaine.fr</code> |
Cela va créer deux clés 2048 bits, une privée et une publique, pour le domaine domaine.fr avec default comme sélecteur. | Cela va créer deux clés 2048 bits, une privée et une publique, pour le domaine domaine.fr avec default comme sélecteur. |
| |
Une fois les clés créées, changer le propriétaire avec la commande : <code bash>sudo chown opendkim:opendkim /etc/opendkim/keys/domaine.fr/default.private</code> | Une fois les clés créées, changez le propriétaire avec la commande : |
Puis changez les permissions afin que seul l'utilisateur opendkim y ait accès : <code bash>sudo chmod 640 /etc/opendkim/keys/domaine.fr/default.private</code> | <code bash>sudo chown opendkim:opendkim /etc/opendkim/keys/domaine.fr/default.private</code> |
| |
Récupérez le contenu de la clé publique : <code bash>sudo cat /etc/opendkim/keys/domaine.fr/default.txt</code> | Puis changez les permissions afin que seul l'utilisateur opendkim y ait accès : |
Ajoutez ce contenu dans le fichier de zone de bind (/etc/bind/pri.domaine.fr par exemple) en supprimant le "IN" et incrémentez le serial pour que la mise à jour soit prise en compte. | <code bash>sudo chmod 640 /etc/opendkim/keys/domaine.fr/default.private</code> |
| |
Dans /etc/postfix/main.cf ajouter à la fin les lignes suivantes pour que Postfix puisse appeler OpenDKIM : | Récupérez le contenu de la clé publique : |
| <code bash>sudo cat /etc/opendkim/keys/domaine.fr/default.txt</code> |
| |
| Créez une entrée DNS de type TXT nommée default._domainkey et ayant comme valeur le contenu de la clé publique en supprimant le "IN". Incrémentez le serial pour que la mise à jour soit prise en compte. |
| |
| Ouvrez le fichier main.cf : |
| <code bash>sudo nano /etc/postfix/main.cf</code> |
| Ajouter à la fin les lignes suivantes pour que Postfix puisse appeler OpenDKIM : |
<code> | <code> |
#DKIM | #DKIM |
non_smtpd_milters = $smtpd_milters | non_smtpd_milters = $smtpd_milters |
</code> | </code> |
Redémarrer Postfix et OpenDKIM | |
| |
Vous pouvez tester votre configuration sur https://www.mail-tester.com/ | |
| |
| ===== Installation de DMARC ===== |
| |
| Pour DMARC, ajoutez une entrée DNS type TXT _dmarc : <code> "v=DMARC1; p=reject; rua=mailto:postmaster@domaine.fr; ruf=mailto:admin@domaine.fr; fo=1; adkim=s; aspf=s; sp=reject"</code> |
| |
| A quoi correspond toutes ces options : |
| * v=DMARC1 : indique la version du protocole |
| * p=reject : indique la politique en cas d'échec du SPF ou DKIM. On rejette le courriel. |
| * rua=mailto:postmaster@domaine.fr : adresse électronique qui recevra les rapports agrégés |
| * ruf=mailto:admin@domaine.fr : adresse électronique qui recevra les rapports d'échec détaillés |
| * fo=1: condition d'envoi des rapports détaillés. Avec 1 comme valeur, un rapport sera envoyé en cas d'échec de DKIM et/ou de SPF |
| * adkim=s : Mode de cohérence des noms de domaine pour DKIM. "s" correspond au mode strict où le nom de domaine DKIM doit correspondre exactement au domaine d'expédition. Un envoi depuis un sous-domaine finira en échec. |
| * aspf=s : pareil que adkim mais pour SPF. |
| * sp=reject : pareil que p mais pour les sous-domaines |
| |
| |
| Vous pouvez tester votre configuration sur [[https://www.mail-tester.com/]] |
| |
| Source : https://www.linuxbabe.com/mail-server/build-email-server-from-scratch-debian-postfix-smtp |