Configurer DKIM sur Postfix sur Debian

Installer OpenDKIM

Introduction

La frustration de se faire faussement signaler comme un spammeur n'est pas étrange pour la plupart des administrateurs du serveur de messagerie.

En excluant la possibilité d'un serveur compromis, un faux indicateur est généralement provoqué par l'un des éléments suivants:

  • le serveur est un relais de messagerie ouvert
  • l'adresse IP de l'expéditeur ou du serveur est sur liste noire
  • le serveur n'a pas de nom de domaine complet (FQDN) et d'enregistrement PTR
  • l'enregistrement DNS Sender Policy Framework (SPF) est manquant ou mal configuré
  • l'implémentation DKIM (DomainKeys Identified Mail) est manquante ou mal configurée

Ce sont quelques-unes des propriétés de base qui sont vérifiées par la majorité des filtres anti-spam propriétaires et open source (y compris SpamAssassin).

La réussite de ces tests est extrêmement importante pour un serveur de messagerie bien configuré.

Ce tutoriel se concentrera sur l'installation et la configuration d'OpenDKIM]: une implémentation open source du système d'authentification de l'expéditeur DKIM.

Il est supposé que le lecteur sait accéder au serveur via SSH, Postfix et Dovecot sont déjà installés et configurés (tutoriel), le nom d'hôte et le FQDN sont configurés (tutoriel, tutoriel) et l'enregistrement SPF est en place (tutoriel ).

À propos de DKIM

DKIM est une norme Internet qui permet à une personne ou une organisation d'associer un nom de domaine à un e-mail. Cela sert en fait de méthode pour revendiquer la responsabilité d'un message. À la base, DKIM est alimenté par une cryptographie asymétrique. L'agent de transfert de courrier (MTA) de l'expéditeur signe chaque message sortant avec une clé privée. Le destinataire extrait la clé publique des enregistrements DNS de l'expéditeur et vérifie si le corps du message et certains des champs d'en-tête n'ont pas été modifiés depuis la signature du message.

Installer OpenDKIM

Avant de commencer l'installation, une mise à jour du système est recommandée:

  sudo apt-get update sudo apt-get dist-upgrade

Installez OpenDKIM et ses dépendances:​

  sudo apt-get install opendkim opendkim-tools  

Les packages supplémentaires seront répertoriés en tant que dépendances, tapez yes et appuyez sur "Entrée" pour continuer.

Configurer OpenDKIM

Nano sera utilisé comme éditeur car il est installé par défaut sur les droplets DigitalOcean et il est simple à utiliser:

  • naviguer avec les touches fléchées
  • quitter sans enregistrer les modifications: appuyez sur CTRL + X puis sur N
  • quitter et enregistrer les modifications: appuyez sur CTRL + X puis sur Y, et enfin appuyez sur Entrée

Important: remplacez chaque instance d'exemple.com par votre propre domaine dans toutes les commandes et tous les fichiers de configuration. N'oubliez pas d'enregistrer vos fichiers après les avoir modifiés.

Commençons par le fichier de configuration principal:   sudo nano /etc/opendkim.conf

Ajoutez les lignes suivantes à la fin du fichier conf (chaque paramètre est expliqué ci-dessous). En option, vous pouvez choisir un numéro de port personnalisé pour le socket. Assurez-vous qu'il n'est pas utilisé par une autre application.

  AutoRestart Yes AutoRestartRate 10/1h UMask 002 Syslog yes 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
  • AutoRestart: redémarrage automatique du filtre en cas de panne
  • AutoRestartRate: spécifie le taux de redémarrage maximal du filtre, si les redémarrages commencent à se produire plus rapidement que ce taux, le filtre se terminera; 10 / 1h - 10 redémarrages / heure sont autorisés au maximum
  • UMask: donne toutes les autorisations d'accès au groupe d'utilisateurs défini par UserID et permet à d'autres utilisateurs de lire et d'exécuter des fichiers, dans ce cas, il permettra la création et la modification d'un fichier Pid.
  • Syslog, SyslogSuccess, * LogWhy: ces paramètres permettent une journalisation détaillée via les appels à syslog
  • Canonicalisation: définit les méthodes de canonisation utilisées lors de la signature des messages, la méthode simple ne permet presque aucune modification tandis que celle détendue tolère les changements mineurs tels que remplacement d'espaces blancs; détendu / simple - l'en-tête du message sera traité avec l'algorithme détendu et le corps avec le simple
  • ExternalIgnoreList: spécifie les hôtes externes qui peuvent envoyer du courrier 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é à la place
  • KeyTable: mappe les noms des clés aux clés de signature
  • SigningTable: répertorie les signatures à appliquer à un message en fonction de l'adresse trouvée dans le champ d'en-tête From:
  • Mode: déclare les modes de fonctionnement; dans ce cas, le milter agit en tant que signataire (s) et vérificateur (v)
  • PidFile: le chemin d'accès au fichier Pid qui contient le numéro d'identification du processus
  • SignatureAlgorithm: sélectionne l'algorithme de signature à utiliser lors de la création de signatures
  • UserID: le processus opendkim s'exécute sous cet utilisateur et ce groupe
  • Socket: le milter écoutera sur le socket spécifié ici, Posfix enverra des messages à opendkim pour signature et vérification via ce socket; 12301 @ localhost définit un socket TCP qui écoute sur localhost, port 12301

Cette configuration simple est destinée à permettre la signature de messages pour un ou plusieurs domaines, pour en savoir plus sur les autres options, rendez-vous ici.

Connectez le milter à Postfix:

sudo nano /etc/default/opendkim

Ajoutez la ligne suivante, modifiez le numéro de port uniquement si un numéro personnalisé est utilisé:

SOCKET="inet:12301@localhost"

Configurez postfix pour utiliser ce milter:

sudo nano /etc/postfix/main.cf

Assurez-vous que ces deux lignes sont présentes dans le fichier de configuration de Postfix et ne sont pas mises en commentaire:

milter_protocol = 2 milter_default_action = accept

Il est probable qu'un filtre (SpamAssasin, Clamav etc.) soit déjà utilisé par Postfix; si les paramètres suivants sont présents, ajoutez-leur simplement l'opendkim milter (les milters sont séparés par une virgule), le numéro de port doit être le même que dans opendkim.conf:

smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301 non_smtpd_milters = unix:/spamass/spamass.sock, inet:localhost:12301

Créez une structure de répertoires qui contiendra les hôtes de confiance, les tables de clés, les tables de signature et les clés de chiffrement:

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

Spécifiez les hôtes de confiance:

sudo nano /etc/opendkim/TrustedHosts

Nous utiliserons ce fichier pour définir à la fois ExternalIgnoreList et InternalHosts, les messages provenant de ces hôtes, domaines et adresses IP seront approuvés et signés.

Étant donné que notre fichier de configuration principal déclare TrustedHosts en tant que fichier d'expression régulière (refile), nous pouvons utiliser des caractères génériques, * .example.com signifie que les messages provenant des sous-domaines d'exemple.com seront également approuvés, pas seulement ceux envoyés depuis le domaine racine. .

Personnalisez et ajoutez les lignes suivantes au fichier nouvellement créé. Plusieurs domaines peuvent être spécifiés, ne modifiez pas les trois premières lignes:

127.0.0.1 localhost 192.168.0.1/24 *.example.com #*.example.net #*.example.org
Créez une table de clés:   sudo nano /etc/opendkim/KeyTable

Une table de clés contient chaque paire sélecteur / domaine et le chemin d'accès à leur clé privée. Toute chaîne alphanumérique peut être utilisée comme sélecteur, dans cet exemple, le courrier est utilisé et il n'est pas nécessaire de le modifier.

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private #mail._domainkey.example.net example.net:mail:/etc/opendkim/keys/example.net/mail.private #mail._domainkey.example.org example.org:mail:/etc/opendkim/keys/example.org/mail.private

Créez une table de signature:

sudo nano /etc/opendkim/SigningTable

Ce fichier est utilisé pour déclarer les domaines / adresses e-mail et leurs sélecteurs.

*@example.com mail._domainkey.example.com #*@example.net mail._domainkey.example.net #*@example.org mail._domainkey.example.org

Générez 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:

sudo mkdir example.com cd example.com
Générez les clés: sudo opendkim-genkey -s mail -d example.com

-s spécifie le sélecteur et -d le domaine, cette commande va créer 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:

sudo chown opendkim:opendkim mail.private

Ajoutez la clé publique aux enregistrements DNS du domaine

Ouvrez mail.txt:

sudo nano -$ mail.txt

La clé publique est définie sous le paramètre p. N'utilisez pas la clé d'exemple ci-dessous, ce n'est qu'une illustration et ne fonctionnera pas sur votre serveur.

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

Copiez cette clé et ajoutez un enregistrement TXT aux entrées DNS de votre domaine:   Name: mail._domainkey.example.com. 

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

broken image

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

Redémarrez Postfix et OpenDKIM:

sudo service postfix restart sudo service opendkim restart

Toutes nos félicitations! Vous avez correctement configuré DKIM pour votre serveur de messagerie!

La configuration peut être testée en envoyant un e-mail vide à check-auth@verifier.port25.com et une réponse sera reçue. Si tout fonctionne correctement, vous devriez voir la vérification DKIM: passez sous Résumé des résultats.

========================================================== Summary of Results ========================================================== SPF check: pass DomainKeys check: neutral DKIM check: pass Sender-ID check: pass SpamAssassin check: ham

Vous pouvez également envoyer un message à une adresse Gmail que vous contrôlez, afficher les en-têtes des e-mails reçus dans votre boîte de réception Gmail, dkim = pass doit être présent dans le champ d'en-tête Authentication-Results.

Authentication-Results: mx.google.com;

spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com;

dkim=pass header.i=@example.com;