configurer SPF et DKIM


Pour ne pas être considéré comme un spammeur, il va falloir configurer votre serveur aux petits oignons, et montrer pattes blanches...

configurer SPF

SPF (Sender Policy Framework) est simple à mettre en place, il suffit d'une entrée dans le DNS:

Le SPF est une méthode pour empêcher la falsification des adresses email des expéditeurs. SPF permet aux administrateurs de spécifier les hôtes autorisés à envoyer des email au nom d'un domaine donné en créant un enregistrement SPF (ou enregistrement TXT) spécifique dans le système de noms de domaine (DNS).

nano /etc/bind/db.example.com

$TTL 1H
example.com.          IN      SOA     ns3022121.ip-123-123-123.eu. email.wanadoo.fr. (
                                2019030904 ; Serial
                                1H         ; Refresh
                                15M        ; Retry
                                2W         ; Expire
                                3M         ; Minimum TTL
                                )
example.com.  IN      NS  ns3022121.ip-123-123-123.eu.
example.com.  IN      NS  ns.kimsufi.com.
example.com.  IN      A   123.123.123.123
example.com.  IN      MX  10 mail.example.com.
www                IN      A   123.123.123.123
mail               IN      A   123.123.127.123

@              IN      TXT "v=spf1 a ~all"
;@              IN      TXT "v=spf1 ip4:123.123.123.123 ~all" ; identique


TXT : Le type d'enregistrement de la zone DNS; Les enregistrements SPF sont écrits en tant qu'enregistrements TXT
@ : Dans un fichier DNS, le symbole "@" est un espace réservé utilisé pour représenter "le domaine actuel".
v=spf1 : Identifie l'enregistrement TXT en tant qu'enregistrement SPF, à l'aide de SPF Version 1
a : Autorise le ou les hôtes identifiés dans les enregistrements A du domaine à envoyer un courrier électronique.
ip4 : Spécifie une adresse IPv4 unique ou une plage d'adresses IPv4 acceptable. Un masque de / 32 est supposé si aucune longueur de préfixe n'est incluse. Exemple: "v = spf1 ip4: 192.168.0.1/16 ~all"
~all : Indique que cette liste est exhaustive et qu'aucun autre serveur n'est autorisé à envoyer un courrier électronique.

configurer DKIM


Selon Wikipedia: « DKIM (DomainKeys Identified Mail) est une norme d'authentification fiable du nom de domaine de l'expéditeur d'un courrier électronique.

Elle constitue une protection efficace contre le spam et l'hameçonnage. En effet, DKIM fonctionne par signature cryptographique du corps du message et d'une partie de ses en-têtes.

Une signature DKIM vérifie donc l'authenticité du domaine expéditeur et garantit l'intégrité du message. »

DKIM est utilisé par plusieurs opérateurs de messagerie, comme Google. Elle permet de filtrer les emails valides (ou plutôt les serveurs de mails envoyeurs). Un peu plus complexe que SPF, elle se trouve facilité avec l'outil OpenDKIM.


apt-get install opendkim opendkim-tools

Bon...premièrement, après avoir galérer quelques heures, j’avais ça dans mes logs : "SASL authentication failure: No worthy mechs found", et pourtant tout me paraissait vraiment bien configuré, il a fallu que je rajoute le paquet suivant :

apt-get libsasl2-modules

Ne me demandez pas pourquoi...

Commençons par le fichier de configuration principal:

nano /etc/opendkim.conf


Syslog                  yes
UMask                   002
OversignHeaders         From
AutoRestart             Yes
AutoRestartRate         10/1h
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
Mode                    sv
PidFile                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:12301@localhost


ExternalIgnoreList: spécifie les hôtes externes pouvant envoyer des messages via le serveur comme l'un des domaines de signature sans informations d'identification.

InternalHosts: définit une liste d'hôtes internes dont le courrier ne doit pas être vérifié mais signé

KeyTable: mappe les noms de clé sur les clés de signature

SigningTable: répertorie les signatures à appliquer à un message en fonction de l'adresse trouvée dans le champ From: de l'en-tête de l'email:

Ajoutez la ligne SOCKET="inet:12301@localhost" au fichier /etc/default/opendkim

nano /etc/default/opendkim

SOCKET="inet:12301@localhost"

Assurez-vous que ces deux lignes sont présentes dans le fichier /etc/postfix/main.cf ne sont pas commentées:

nano /etc/postfix/main.cf

# Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
milter_protocol = 2
milter_default_action = accept

rajoutez:

nano /etc/postfix/main.cf

# Postfix ≥ 2.6 milter_protocol = 6, Postfix ≤ 2.5 milter_protocol = 2
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Vous devrez peut être ajuster la variable milter_protocol selon votre version de postfix, pour connaitre votre version:

postconf mail_version

Créez les répertoire pour the trusted hosts, key tables, signing tables et crypto keys:


mkdir /etc/opendkim
mkdir /etc/opendkim/keys

Spécifiez les hôtes de confiance

nano /etc/opendkim/TrustedHosts

127.0.0.1
localhost
123.123.123.123/24

*mon-site.fr
*example.com
#*.mon-site.fr
#*.example.com

123.123.123.123 est l'ip du serveur

* permet de spécifier comme valide tous les sous domaine
# est un commentaire

créer une key table:

nano /etc/opendkim/KeyTable

mail._domainkey.mon-site.fr mon-site.fr:mail:/etc/opendkim/keys/mon-site.fr/mail.private
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

Créez une signing table:

nano /etc/opendkim/SigningTable

*@mon-site.fr mail._domainkey.mon-site.fr
*@example.com mail._domainkey.example.com

Générer les clés publiques et privées

Accédez au répertoire des clés:


cd /etc/opendkim/keys

Créez un dossier séparé pour que le domaine contienne les clés:


mkdir example.com
cd example.com

Générez les clés:


opendkim-genkey -s mail -d example.com

-s spécifie le sélecteur et -d le domaine. Cette commande crée deux fichiers, mail.private est notre clé privée et mail.txt contient la clé publique.

Changez le propriétaire de la clé privée en opendkim:


chown opendkim:opendkim mail.private

Ajouter la clé publique aux enregistrements DNS du domaine

Ouvrez mail.txt:

nano -$ mail.txt

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com

La clé publique est définie sous le paramètre p. N'utilisez pas l'exemple de clé ci-dessous, il ne s'agit que d'une illustration et ne fonctionnera pas sur votre serveur.

Ajoutez cette clef dans votre enregistrement DNS

.
nano /etc/bind/db.example.com

$TTL 1H
example.com.          IN      SOA     ns3022121.ip-123-123-123.eu. email.wanadoo.fr. (
                                2019030904 ; Serial
                                1H         ; Refresh
                                15M        ; Retry
                                2W         ; Expire
                                3M         ; Minimum TTL
                                )
example.com.  IN      NS  ns3022121.ip-123-123-123.eu.
example.com.  IN      NS  ns.kimsufi.com.
example.com.  IN      A   123.123.123.123
example.com.  IN      MX  10 mail.example.com.
www                IN      A   123.123.123.123
mail               IN      A   123.123.127.123

mail._domainkey         IN      TXT     ( "v=DKIM1; k=rsa; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" )

@              IN      TXT "v=spf1 a ~all"
;@              IN      TXT "v=spf1 ip4:123.123.123.123 ~all" ; identique

Veuillez noter que les modifications DNS peuvent prendre quelques heures à se propager.

Redémarrez Postfix et OpenDKIM:


service postfix restart
service opendkim restart

La configuration peut être testée en envoyant un email vide à [email protected] et une réponse sera reçue. Si tout fonctionne correctement, vous devriez voir:
SPF check: pass
DKIM check: pass

Vos commentaires

Laisser un commentaire

Votre commentaire sera en attente de modération, validation NON automatique

Votre nom (obligatoire) :


Email ou site internet (facultatif) (nécessaire si vous souhaitez être prévenu d'une réponse):


Image/photo (facultatif) (JPG, JPEG, PNG ou GIF) (image de partition concernant le question par exemple):

Javascript doit être activé