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