Configuration de SPF DKIM et DMARC

email-secure

De nos jours, il est de plus en plus difficile de lutter contre les mails non désirés. C'est pourquoi des protocoles d'authentification se sont développés ces dernières année.

Nous allons voir comment implémenter les protocoles SPF, DKIM et DMARC dont le but est d'aider à l'identification d'emails légitimes.

Le protocole SPF

Il s'agit de créer une entrée de type SPF sur le DNS afin d'identifier les machines qui sont autorisées à envoyer des emails depuis le domaine concerné.

domain.com.    600    SPF    "v=spf1 a mx ~all"

L'exemple ci dessus devrait convenir dans la plupart des cas. Elle autorise les machines disposant d'une adresse ip reliée au domaine ainsi que les machines référencées comme MX à envoyer des mails au nom du domaine domain.com.

Le protocole DKIM

Le protocole DKIM repose sur une combinaison de clé permettant d'identifier un mail comme étant originaire du domaine.

Nous allons implémenter ce protocole en nous aidant de l'outil OpenDKIM.

On commence par installer l'outil :

sudo yum install -y opendkim

Nous allons ensuite créer les clés dans le dossier /etc/opendkim/keys.

sudo opendkim-default-keygen
Generating default DKIM keys:
Default DKIM keys for emissaire.fr created in /etc/opendkim/keys.

Dans le dossier cible, vous devez trouver deux fichiers :

sudo ls -l /etc/opendkim/keys
total 8,0K
-rw-r-----. 1 root 891  5 oct.  22:55 default.private
-rw-r--r--. 1 root 316  5 oct.  22:55 default.txt

Le fichier default.private est la clé privée pour le domaine et default.txt est la clé publique que nous allons publier dans un enregistrement DNS de type TXT au niveau du domaine.

Configuration de opendkim.

On commence par éditer le fichier /etc/opendkim.conf. Les paramètres que nous allons modifier sont les suivants :

##  Selects operating modes. Valid modes are s (sign) and v (verify). Default is v.
##  Must be changed to s (sign only) or sv (sign and verify) in order to sign outgoing
##  messages.
Mode    sv

##  Create a socket through which your MTA can communicate.
Socket  inet:8891@localhost

##  Selects the canonicalization method(s) to be used when signing messages.
Canonicalization    relaxed/simple

##  Domain(s) whose mail should be signed by this filter. Mail from other domains will
##  be verified rather than being signed. Uncomment and use your domain name.
##  This parameter is not required if a SigningTable is in use.
Domain  domaine.com

##  Gives the location of a private key to be used for signing ALL messages. This
##  directive is ignored if KeyTable is enabled.
# KeyFile /etc/opendkim/keys/default.private

##  Gives the location of a file mapping key names to signing keys. In simple terms,
##  this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
##  directive in the configuration file. Requires SigningTable be enabled.
KeyTable    /etc/opendkim/KeyTable

##  Defines a table used to select one or more signatures to apply to a message based
##  on the address found in the From: header field. In simple terms, this tells
##  OpenDKIM how to use your keys. Requires KeyTable be enabled.
SigningTable    refile:/etc/opendkim/SigningTable

##  Identifies a set of "external" hosts that may send mail through the server as one
##  of the signing domains without credentials as such.
ExternalIgnoreList  refile:/etc/opendkim/TrustedHosts

##  Identifies a set "internal" hosts whose mail should be signed rather than verified.
InternalHosts   refile:/etc/opendkim/TrustedHosts

Passons maintenant au fichier /etc/opendkim/KeyTable :

# OPENDKIM KEY TABLE
# To use this file, uncomment the #KeyTable option in /etc/opendkim.conf,
# then uncomment the following line and replace example.com with your domain
# name, then restart OpenDKIM. Additional keys may be added on separate lines.

#default._domainkey.example.com example.com:default:/etc/opendkim/keys/default.private
default._domainkey.domain.com domain.com:default:/etc/opendkim/keys/default.private

Vient ensuite le fichier /etc/opendkim/SigningTable pour définir quels sont les adresses emails pour lesquelles on doit signer les emails sortants:

# WILDCARD EXAMPLE
# Enables signing for any address on the listed domain(s), but will work only if
# "refile:/etc/opendkim/SigningTable" is included in /etc/opendkim.conf.
# Create additional lines for additional domains.

*@domain.com default._domainkey.domain.com

Nous choisissons d'utiliser * pour indiquer que tous les utilisateurs du domaine doivents avoir leur mails signés.

Enfin nou éditons le fichier /etc/opendkim/TrustedHosts :

Running transaction

# OPENDKIM TRUSTED HOSTS
# To use this file, uncomment the #ExternalIgnoreList and/or the #InternalHosts
# option in /etc/opendkim.conf then restart OpenDKIM. Additional hosts
# may be added on separate lines (IP addresses, hostnames, or CIDR ranges).
# The localhost IP (127.0.0.1) should always be the first entry in this file.

127.0.0.1
::1
mail.domain.com
domain.com

Nous devons maintenant configurer Postfix pour qu'il utilise opendkim. Pour cela, nous allons éditer le fichier /etc/postfix/main.cf et ajouter ces lignes à la fin:

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

On peut maintenant préparer le lancement de opendkim et relancer postfix :

sudo hash -r
sudo systemctl enable opendkim.service
sudo systemctl start opendkim.service
sudo systemctl restart postfix.service

On peut ensuite utiliser le contenu du fichier /etc/opendkim/keys/default.txt pour créer l'enregistrement DNS de type TXT :

default._domainkey  IN  TXT ( "v=DKIM1; k=rsa; "
     "p=MIGfMA0GCSqGSIb3DQEBAQUZ9ObgQFMS6P+n2CVzFiql+X21BJfmHNruT9YQktteBpwCxjLJtPj+bK7TukctY1fQ8sfCN2srWnFDt/yNarP+n2CVzFiql+X21BJfmHNruT9jQ4xGAHWvRqqXpcMWDKgp+HUkyXgrJLgJe24gsXqXpcMWDKgp+HUkyXgrv2uOIcXNwIDAQAB" )  ; ----- DKIM key default for domain.com

Aucun commentaire

No module Published on Offcanvas position