Best practices Postfix SMTP relay

Table des matières

Suite directe des articles sur la configuration d’un relai postfix (ici et ici) avec cette fois un récapitulatif des bonnes pratiques pour limiter le risque d’être mal vu par les antispam.

Configurer un MX

Même si notre domaine n’est destiné qu’à l’envoi d’email, il est nécéssaire de déclarer un MX dans sa zone en effet certain serveur valide l’existence d’un MX avant d’accepter un email.

Vérification à l’aide de dig

$ dig google.fr MX +short

30 alt2.aspmx.l.google.com.
40 alt3.aspmx.l.google.com.
50 alt4.aspmx.l.google.com.
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.

Mettre en place un reverse ptr

Certains serveurs coupent le dialogue SMTP si aucun reverse n’est configuré.

Apr  4 16:16:33 relai-xxx postfix/smtpd[1972]: NOQUEUE: reject: RCPT from unknown[x.x.x.x]: 

450 4.7.1 Client host rejected: cannot find your hostname, [x.x.x.x]; 

from=<someone@expediteur.com> to=<someone.else@notre-domaine.fr> proto=ESMTP helo=<smtp.expediteur.com>

Cela correspond à la directive reject_unknown_reverse_client_hostname dans postfix.

Vérification via la commande host

host x.y.z.132

132.z.y.x.in-addr.arpa domain name pointer mail.redteams.fr.

Bien se présenter

Lors de la phase de “handshake”, notre relai doit se présenter avec le nom correspondant à son reverse PTR. Dans postfix c’est la variable myhostname.

myhostname = mail.domain.tld

Domaine créé recement

Un domaine qui a été enregistré depuis moins d’une semaine peut perdre des points (notamment avec spamassassin).

1.5 FROM_FMBLA_NEWDOM      From domain was registered in last 7 days

SPF

Le protocole SPF vise à réduire les possibilités d’usurpation en publiant, dans le DNS, un enregistrement (de type TXT) qui précise quelles adresses IP sont autorisées à envoyer du courrier pour le domaine considéré.

L’identité testée par SPF est celle indiquée par la commande MAIL FROM dans la session SMTP. C’est donc une information qui appartient à l’enveloppe du courrier, pas à ses en-têtes.

v=spf1 ip4:1.1.1/32 ~all

A noter les variantes sur la variable all : * “-all” demande de rejecter en cas d’incohérence * “~all” tolère les erreurs

Vérification de la valeur déclarée à l’aide de dig :

dig domain.tld TXT +short
v=spf1 ip4:1.1.1/32 ~all

Il est possible de valider rapidement sa configuration sur le site appmaildev

L’enregistrement DKIM

DKIM fonctionne par signature d’une partie du message. Quand le serveur de réception reçoit le message, il vérifie à l’aide de la clé publique publiée dans la zone que la signature est valide.

Voir l’article dédié sur l’installation de DKIM

Il est possible de valider rapidement sa configuration sur le site - appmaildev.com

DMARC

DMARC (Domain-based Message Authentication, Reporting and Conformance) est un standard qui vient en complément de SPF et DKIM

DMARC standardise la façon dont les destinataires réalisent l’authentification des e-mails en utilisant les mécanismes de SPF et de DKIM.

Une politique DMARC autorise l’expéditeur à indiquer que ses e-mails sont protégés par SPF et/ou DKIM et dit au destinataire que faire si ces méthodes d’authentification échouent (ex : rejeter tous les emails sans DKIM et prévenir une adresse email).

v=DMARC1;p=quarantine;pct=100;rua

voir ce wizard très pratique.

v=DMARC1; p=none; rua=mailto:admin@inscription.site; adkim=s;

S et SP c’est respectivement les actions à appliquer pour les emails non conformes aux enregistrements SPF/DKIM venant du domaine ou du sous-domaine (none, quarantine ou block).

  • v Version du protocole
  • pct Pourcentage de messages à filtrer
  • ruf Destinataire du rapport forensique
  • rua Destinataire du rapport agrégé
  • p Procédure avec le domaine principal
  • sp Procédure avec le sous-domaine
  • adkim Règle pour le DKIM
  • aspf Règle pour le SPF

Evaluer sa configuration

L’ensemble de ces bonnes pratiques peuvent être validé sur le site mail-tester.

Script pour réaliser ses tests :

#!/usr/bin/python3
import smtplib
from email.message import EmailMessage

sender="admin@domain.tld"
receivers="@dest-domain.tld"
relay="mail.domain.tld"
subject='Relay validation'

msg = EmailMessage()
msg.set_content('Only a few words ...')
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receivers

s = smtplib.SMTP(relay)
s.send_message(msg)
s.quit()

Related