From ce02169fb1fbaf79fcdb8db8809978270c0768c0 Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Mon, 4 Apr 2022 13:33:11 +0200 Subject: [PATCH] =?UTF-8?q?ajout=20d'infos=20pour=20v=C3=A9rifier=20SPF=20?= =?UTF-8?q?/=20DMARC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoPostfix.md | 111 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 110 insertions(+), 1 deletion(-) diff --git a/HowtoPostfix.md b/HowtoPostfix.md index e27b6135..deddb7e9 100644 --- a/HowtoPostfix.md +++ b/HowtoPostfix.md @@ -575,6 +575,52 @@ On peut utiliser un `include:` vers un autre enregistrement TXT, pratique pour l Chez Evolix, on utilise ainsi `include:spf.protection.evolix.net`. Si vous utilisez [Mailchimp](https://mailchimp.com/developer/transactional/docs/authentication-delivery/) vous devez ajouter `include:spf.mandrillapp.com` par exemple. +#### Vérification SPF + +Pour vérifier les enregistrements SPF des emails : + +~~~ +# apt install postfix-policyd-spf-python +# cp /usr/share/doc/postfix-policyd-spf-python/policyd-spf.conf.commented /etc/postfix-policyd-spf-python/policyd-spf.conf +~~~ + +On ajoutera dans `/etc/postfix/master.cf` : + +~~~ +policyd-spf unix - n n - 0 spawn + user=policyd-spf argv=/usr/bin/policyd-spf +~~~ + +et `/etc/postfix/main.cf` : + +~~~ +smtpd_recipient_restrictions = + ... + reject_unauth_destination + check_policy_service unix:private/policyd-spf + ... +policyd-spf_time_limit = 3600 +~~~ + +Voici les paramètres intéressants pour `/etc/postfix-policyd-spf-python/policyd-spf.conf` : + +~~~ +defaultSeedOnly = 0 # Mode simulation, aucun rejet, seulement la description de l'action dans les logs. +Mail_From_reject = Fail # Rejete les mails si le check SPF échoue. +Mail_From_reject = Softfail # Rejete les mails si le check SPF échoue même en « soft » (utilisation de ~all par exemple), non recommandé. +Reject_Not_Pass_Domains = aol.com,hotmail.com # Transoforme un ~all en -all pour des domaines en particuliers. +~~~ + +Cela ajoutera l'entête suivant aux emails : + +~~~ +Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=192.0.2.1; helo=mail.example.com; envelope-from=jdoe@example.com; receiver= +~~~ + +Cet entête pourra notamment être utilisé par des filtres, SpamAssassin, etc. + +> *Note* : attention, pour les emails locaux, cela n'ajoutera pas l'entête `Received-SPF` ce qui peut poser des soucis avec les outils s'appuyant dessus, notamment SpamAssassin ou OpenDMARC. + ### DKIM [DKIM](HowtoOpenDKIM) est une norme pour ajouter une signature cryptographique dans les entêtes d'un email envoyé. @@ -596,12 +642,75 @@ Voici un exemple d'enregistrement DNS basique : _dmarc IN TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com" ~~~ -Voici un exemple plus avancé : +On pourra spécifier : +* `p=none` si l'on ne veut pas que les emails non conformes soient rejetés +* `p=reject` si l'on veut que les emails non conformes soient rejetés +* `p=quarantine` si l'on veut que les emails non conformes soient mis de côté (dans une sous-boîte Spam en général) + +Attention, si vous spécifiez `rua=mailto:dmarc@example.com` vous recevrez pas mal de rapports +`Report domain` de Google, Outlook, etc. vous notifiant des emails non conformes. +Les rapports incluent un fichier XML, on peut le lire via des outils comme [mxtoolbox](https://mxtoolbox.com/DmarcReportAnalyzer.aspx) ou [easydmarc](https://easydmarc.com/tools/dmarc-aggregated-reports). + +Voici un exemple d'un enregistrement DNS plus avancé : ~~~ _dmarc IN TXT "v=DMARC1;p=reject;rua=mailto:dmarc+aggr@example.com;ruf=mailto:dmarc+forensic@example.com;fo=1;adkim=r;aspf=r;sp=none;pct=100" ~~~ +#### Vérification DMARC + +Pour vérifier la politique DMARC des emails : + +~~~ +# apt install opendmarc +# systemctl enable opendmarc +# systemctl start opendmarc +~~~ + +On configure via `/etc/opendmarc.conf` : + +~~~ +AuthservID mail.example.com +PidFile /var/run/opendmarc/opendmarc.pid +PublicSuffixList /usr/share/publicsuffix +Socket inet:8892@localhost +#Socket local:/var/run/opendmarc/opendmarc.sock +Syslog true +UMask 0002 +UserID opendmarc +IgnoreHosts /etc/opendmarc/ignore.hosts +~~~ + +OpenDMARC s'appuie sur l'entête `Received-SPF`, il faut donc avoir installé [la vérification DKIM](#verification-DKIM). + +Et il faut ajouter un fichier `/etc/opendmarc/ignore.hosts` pour ignorer les emails locaux : + +~~~ +127.0.0.0/8 +::1/128 +localhost +localhost.localdomain +192.168.0.0/16 +192.0.2.0/24 +~~~ + +Et l'on ajoute un milter : + +~~~ +non_smtpd_milters = inet:127.0.0.1:8892 +smtpd_milters = inet:127.0.0.1:8892 +in_flow_delay = 0s +~~~ + +Cela ajoutera les entêtes suivants aux emails : + +~~~ +Authentication-Results: mail.smsmode.com; dmarc=pass (p=none dis=none) header.from=... +Authentication-Results: mail.smsmode.com; dkim=pass ... +~~~ + +Cet entête pourra notamment être utilisé par des filtres, SpamAssassin, etc. + ### Contacts des principaux fournisseurs d'email En cas de souci de _délivrabilité_ vers un domaine particulier, on est amené à contacter son responsable.