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.
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
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
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
Name: mail._domainkey.example.com.
Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"
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;