SPF + DKIM + DMARC

Face au nombre exponentiel de spam, des méthodes ont été mises en place au fur et à mesure des années afin de s'assurer que l'expéditeur des courriels que nous recevons est bien celui qu'il prétend être. Pour nous aider, trois systèmes sont mis en oeuvre :

  • SPF
  • DKIM
  • DMARC

SPF (Sender Policy Framework) est un système qui identifie aux serveurs de messagerie les hôtes autorisés à envoyer des emails pour un domaine donné. La configuration de SPF permet d’éviter que votre courrier électronique soit classé comme spam.

DKIM (DomainKeys Identified Mail) est un système qui permet à vos serveurs de messagerie officiels d’ajouter une signature aux en-têtes des messages sortants et d’identifier la clé publique de votre domaine afin que les autres serveurs de messagerie puissent vérifier la signature. Comme avec SPF, DKIM évite que votre courrier ne soit considéré comme du spam. Il permet également aux serveurs de messagerie de détecter le moment où votre courrier a été falsifié en transit.

DMARC (Domain Message Authentication, Reporting & Conformance) vous permet d’annoncer aux serveurs de messagerie quelles sont les stratégies de votre domaine concernant les messages qui échouent aux validations SPF et / ou DKIM. Il vous permet également de demander des rapports sur les messages ayant échoué aux serveurs de messagerie de réception.

Source : Linode

sudo aptitude update && sudo aptitude install opendkim opendkim-tools postfix-policyd-spf-python postfix-pcre

Nous ajoutons l'utilisateur postfix au groupe opendkim

adduser postfix opendkim

Éditez le fichier /etc/postfix/master.cf pour y ajouter ces lignes à la fin :

policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf

Nous ajoutons les entrées suivantes dans le champs smtpd_recipient_restrictions du fichier /etc/postfix/main.cf :

smtpd_recipient_restrictions=
  ...
  reject_unauth_destination,
  check_policy_service unix:private/policyd-spf
  ...

À la fin du fichier /etc/postfix/main.cf nous ajoutons :

# Milter configuration
# OpenDKIM
milter_default_action = accept
# Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
milter_protocol = 6
smtpd_milters = local:/opendkim/opendkim.sock
non_smtpd_milters = local:/opendkim/opendkim.sock

#Milter
#smtpd_milters = inet:127.0.0.1:2500
#non_smtpd_milters = inet:127.0.0.1:2500

# SPF
policyd-spf_time_limit = 3600

Nous éditons le fichier /etc/opendkim.conf, et remplaçons son contenu par celui-ci :

# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.

# Log to syslog
Syslog          yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask           002
# OpenDKIM user
# Remember to add user postfix to group opendkim
UserID          opendkim

# Map domains in From addresses to keys used to sign messages
KeyTable        /etc/opendkim/key.table
SigningTable        refile:/etc/opendkim/signing.table

# Hosts to ignore when verifying signatures
ExternalIgnoreList  /etc/opendkim/trusted.hosts
InternalHosts       /etc/opendkim/trusted.hosts

PidFile             /var/run/opendkim/opendkim.pid
Socket             local:/var/spool/postfix/opendkim/opendkim.sock

# Commonly-used options; the commented-out versions show the defaults.
Canonicalization    relaxed/simple
Mode            sv
SubDomains      no
#ADSPAction     continue
AutoRestart     yes
AutoRestartRate     10/1M
Background      yes
DNSTimeout      5
SignatureAlgorithm  rsa-sha256

# Always oversign From (sign using actual From and a null From to prevent
# malicious signatures header fields (From and/or others) between the signer
# and the verifier.  From is oversigned by default in the Debian package
# because it is often the identity key used by reputation systems and thus
# somewhat security sensitive.
OversignHeaders     From

Nous mettons les bons droits sur le fichier :

chmod u=rw,go=r /etc/opendkim.conf

Nous créons les répertoires qui vont accueillir les clés et informations opendkim.

mkdir /etc/opendkim
mkdir /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim
chmod go-rw /etc/opendkim/keys

Créez le fichier /etc/opendkim/signing.table et ajoutez-y les informations concernant vos domaines :

*@example.com   example

À suivre.

Nous allons ajouter les informations dans la zone DNS de notre serveur de courriels :

@                       IN      TXT     "v=spf1 a:mail.loubrusc.org -all"
201811._domainkey       IN      TXT     ( "v=DKIM1; h=sha256; k=rsa; s=email; "
          "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0c6vq2vr5EmhcgpJfiX2uyVMsEsaiabo5IjlkUdnMlQbD5fpsSQx3YOIrReFCZAW3nWfVLhcpig402fTmzvNFFw2o4o9aLFhJJgtGFI+wKBQ0bc8vUMO5vxG4FzN15i+/F+Ao4ZvEkgurD+/rDwe6UCb8$
          "7au+/HrdVq7SRk3nf1xHPHzQuKq0Be4+YjenERalDrqySuZvQ7F+xOTrT8K/0aXfPi6TeYS/6AvTfZkmuH9kdNQAhbK1CmRUMAuSWa+vwe5FCfCVo7848EovkXt0znvrp0tuA/cwIDAQAB" )  ; ----- DKIM key 201811 for loubrusc.org
_dmarc                  IN      TXT     "v=DMARC1; p=none"
  • infrastructure/mail/securite/spf-dkim-dmarc.txt
  • Dernière modification : 10/10/2020 11:47
  • de Stéphane Paillet