web-dev-qa-db-fra.com

Configurer DKIM (DomainKeys) pour Ubuntu, Postfix et Mailman

J'utilise Ubuntu 12.04 avec Postfix et Mailman. Je veux mettre en place DKIM . DomainKeys Identified Mail, ou DKIM, est le successeur de "DomainKeys" de Yahoo. Il intègre le courrier identifié de Cisco.

Quelles sont les étapes pour mettre cela en place?

Opendkim est-il recommandé?

La seule référence que j'ai est HowToForge , mais je préfère obtenir de l'aide ici (même s'il ne s'agit que d'une confirmation des étapes sur ce lien). En fait, je pense que les informations sur HowToForge sont obsolètes car elles mentionnent dkim-filter au lieu de opendkim.

22
MountainX

openDKIM et Postfix sur Ubuntu Server 12.04LTS

Je vais essayer de revenir et de formater cela mieux. Mais comme il y avait une demande d'afficher ma réponse, je voulais l'afficher maintenant plutôt que d'attendre d'avoir le temps de la formater correctement. En raison du manque de temps, j'ai enveloppé toute ma réponse dans un bloc-citation. J'espère que cette solution est utile.

Ce sont mes références:

et Wikipedia a une bonne entrée sur le sujet

Au minimum, vous aurez besoin de:

  • Accès racine à votre serveur de messagerie
  • Accès pour mettre à jour les enregistrements DNS de votre domaine

Installez opendkim à partir des référentiels:

# Sudo apt-get install opendkim opendkim-tools

Vous devez choisir le "sélecteur" que vous souhaitez utiliser. Le sélecteur est essentiellement un mot pour décrire la clé que vous souhaitez utiliser. Ici, je vais utiliser le sélecteur 201205 car la clé est entrée en vigueur en mai 2012 (ruse hein?). Je donne deux exemples de variété qui, espérons-le, ajouteront de la clarté. Il vous suffit de générer UNE clé. Cependant, je donne les deux exemples afin que vous puissiez les comparer.

  • 201205 (1ère clé)
  • mon_sélecteur (2ème clé)

Mon domaine sera example.com, mais je vais utiliser un sous-domaine pour mon deuxième exemple:

  • example.com (1ère clé)
  • mail.exemple.com (2ème clé)

J'ai décidé de travailler dans le répertoire suivant:

# mkdir /etc/opendkim/
# cd /etc/opendkim

Générez les clés dans le répertoire en cours, à l'aide du sélecteur et du domaine choisis.

# opendkim-genkey -s 201205 -d example.com

Vous pouvez ou non avoir besoin de changer de propriétaire. Voir les détails dans mon exemple pour la 2e clé ci-dessous pour connaître la propriété et les autorisations.

Vous devez d’abord vérifier s’il existe un utilisateur opendkim (vos identifiants d’utilisateur/de groupe peuvent être différents):

# grep opendkim /etc/passwd
opendkim:x:108:117::/var/run/opendkim:/bin/false

Et vous devez probablement faire ceci:

# chmod 700 /var/run/opendkim

NOTE: Ces deux commandes suivantes ne sont PAS nécessaires sur Ubuntu 12.04. Mais si la commande ci-dessus ne montre pas que l'utilisateur opendkim a été configuré correctement, procédez comme suit:

# useradd -r -g opendkim -G mail -s /sbin/nologin -d /var/run/opendkim -c "OpenDKIM" opendkim
# chown opendkim:opendkim 201205.private   
# cat 201205.private 
-----BEGIN RSA PRIVATE KEY-----
ABCCXQ...[long string]...SdQaZw9
-----END RSA PRIVATE KEY-----

Maintenant, vérifiez la clé publique et notez qu’il ya un bogue (dans openDKIM 2.5.2 sur Ubuntu 12.04)! Où est contient, ;=rsa;, il devrait contenir ;k=rsa;. Le k est manquant. S'il vous plaît insérez-le.

# cat 201205.txt
201205._domainkey IN TXT "v=DKIM1;=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

Après avoir été corrigé, cela ressemblera à ceci:

201205._domainkey IN TXT "v=DKIM1;k=rsa; p=WIGfM..[snip]..QIDIAB" ; ----- DKIM 201205 for example.com

En outre, vous devez probablement échapper aux points-virgules comme celui-ci. Si vous ne voulez pas le dernier commentaire, supprimez-le simplement. Notez également que vous devez ajouter l'indicateur t = y pour indiquer aux serveurs de réception que vous testez DKIM mais ne l'utilisez pas encore pour le moment. Il vous reste un enregistrement de ressource viable:

201205._domainkey IN TXT "v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Vous devez publier le contenu de la clé publique ci-dessus sur votre serveur DNS faisant autorité. Je recommande d'utiliser un enregistrement TXT. Il semble y avoir un peu de controverse sur l’utilisation d’un enregistrement SPF ou des deux types. Après un peu de lecture, j'ai choisi de rester exclusivement avec le type d'enregistrement TXT, bien que je ne crois pas qu'il s'agisse du dernier mot sur ce sujet.

Vous devez utiliser un court paramètre TTL (durée de vie) afin de pouvoir modifier la clé sans attendre que sa propagation se fasse via DNS. J'ai utilisé 180 secondes.

Le deuxième exemple de génération d'une paire de clés était un peu plus compliqué pour moi. Je vais décrire ce que j'ai fait. Le premier élément est que j'ai utilisé la valeur de domaine "exemple.com" même si la clé sera utilisée pour "mail.example.com". Je suis arrivé à cela par essais et erreurs. Cela fonctionne, l'utilisation de "mail.example.com" ne fonctionnait pas. Malheureusement, je ne suis pas au courant des raisons derrière cela. C’est vraiment la seule différence que j’ai rencontrée, mais c’était assez troublant de penser que je devrais documenter mes expériences en matière d’utilisation de sous-domaines. Aucun des autres didacticiels de niveau débutant que j'ai trouvés ne l'a fait. Générez une deuxième clé:

opendkim-genkey -s my_selector -d example.com

vérifiez la propriété et les autorisations de la clé privée, comme ci-dessus. Voici à quoi ils devraient ressembler:

# ls -la /etc/opendkim
-rw-------  1 opendkim opendkim  891 May 10 07:44 my_selector.private

Après avoir publié l'enregistrement DNS, vérifiez-le avec Dig. Il devrait renvoyer exactement ce que vous avez entré dans l'enregistrement de ressource (RR).

$ Dig 201205._domainkey.example.com txt +short
"v=DKIM1\;k=rsa\;t=y\;p=WIGfM..[snip]..QIDIAB"

Maintenant, testez la clé. Les commandes ci-dessous supposent que vous êtes dans le répertoire où réside la clé (/ etc/opendkim pour moi).

# opendkim-testkey -d example.com -s 201205 -k 201205.private -vvv
opendkim-testkey: key loaded from /etc/opendkim/201205.private
opendkim-testkey: checking key '201205._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Ces résultats sont attendus. La "clé non sécurisée" n'indique pas une erreur. C'est une conséquence attendue de ne pas utiliser DNSSSEC. DNSSEC arrive, mais il n'est pas encore prêt pour le prime time, d'après mes lectures.

Exemple avec la 2ème clé:

# opendkim-testkey -d example.com -s my_selector -k /etc/opendkim/my_selector.private -vvvv
opendkim-testkey: key loaded from /etc/opendkim/my_selector.private
opendkim-testkey: checking key 'my_selector._domainkey.example.com'
opendkim-testkey: key not secure
opendkim-testkey: key OK

Notez qu'opendkim signale que la clé n'est pas sécurisée. Cela tient au fait que DNSSEC n'est pas implémenté sur mon serveur DNS et que théoriquement, quelqu'un pourrait intercepter la recherche DNS et la remplacer par sa propre clé.

Editez le fichier de configuration OpenDKIM:

# nano /etc/opendkim.conf
# cat /etc/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
#
Domain                  example.com
KeyFile                 /etc/opendkim/201205.private
Selector                201205
#
# Commonly-used options
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              yes
# Log to syslog
Syslog                  yes
LogWhy                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   022
UserID                  opendkim:opendkim
#
KeyTable                /etc/opendkim/KeyTable
SigningTable            /etc/opendkim/SigningTable
ExternalIgnoreList      /etc/opendkim/TrustedHosts
InternalHosts           /etc/opendkim/TrustedHosts
#
Socket                  inet:8891@localhost
#EOF

Si vous utilisez mon exemple de 2ème clé, avec le domaine ciblé "mail.example.com", l'entrée ne fera toujours référence qu'au domaine principal:

Domain                  example.com
KeyFile                 /etc/dkim/my_selector.private
Selector                my_selector 
-----

Note de l’une de mes sources: Si vous exécutez plusieurs instances de Postfix, vous devez l’ajouter au fichier opendkim.conf pour chaque instance (ou celles que vous souhaitez utiliser avec opendkim).

Créez un fichier avec votre éditeur de texte /etc/opendkim/TrustedHosts:

Ajoutez les domaines, noms d’hôte et/ou ip qui doivent être gérés par OpenDKIM. Ne pas oublier localhost.

127.0.0.1
localhost
example.com
mail.example.com
192.168.1.100 #(IP address of your server, if applicable)

(La dernière ligne ci-dessus ne sera probablement pas nécessaire. Si vous avez une adresse IP à ajouter, assurez-vous d'utiliser la vôtre, pas l'exemple ci-dessus.)

Éditer /etc/default/opendkim:

Décommentez cette ligne et utilisez le port 8891:

SOCKET="inet:8891@localhost" # listen on loopback on port

Assurez-vous que votre pare-feu (iptables) autorise le bouclage sur localhost:

Sudo iptables -A INPUT -i lo -j ACCEPT

Ensuite, créez un fichier avec votre éditeur de texte /etc/opendkim/KeyTable et ajoutez le domaine à la KeyTable

Ajouter une ligne:

#EXAMPLE showing my 2nd key:
my_selector._domainkey.example.com example.com:my_selector:/etc/opendkim/my_selector.private

Next Créez un fichier avec votre éditeur de texte /etc/opendkim/SigningTable et ajoutez le domaine à SigningTable.

Je montre les deux exemples. Notez que pour ma deuxième clé, je dois maintenant utiliser le nom de domaine complet "mail.example.com":

example.com 201205._domainkey.example.com
mail.example.com my_selector._domainkey.example.com

Notez que dans OpenDKIM 2.0.1, les noms de domaine sont sensibles à la casse. Dans cet exemple, nous utilisons une version plus récente d'OpenDKIM et cela ne semble pas poser de problème.

Configurez postfix. Éditez /etc/postfix/main.cf et ajoutez les lignes à la fin

milter_default_action = accept
milter_protocol = 2
smtpd_milters=inet:localhost:8891
non_smtpd_milters=inet:localhost:8891

Changez également le nom d'hôte:

#myhostname = localhost         #original
myhostname = mail.example.com

Vous devez également modifier l'entrée correspondante dans/etc/hosts. Ces modifications sont effectives après un redémarrage (bien que vous puissiez le définir immédiatement avec la commande: hostname NEW_NAME).

Redémarrez postfix et opendkim si vous n’avez pas redémarré:

# service opendkim restart
Restarting OpenDKIM: opendkim.
# service postfix restart
 * Stopping Postfix Mail Transport Agent postfix   [ OK ]
 * Starting Postfix Mail Transport Agent postfix   [ OK ] 

Essai

Le meilleur moyen de vérifier que votre courrier signé est authentifié et que vos enregistrements DNS sont correctement configurés consiste à utiliser l'un des services de test gratuits. J'ai utilisé ceux-ci:

Chacune de celles-ci vous dira si les choses fonctionnent correctement et vous donnera des indications sur le dépannage si nécessaire.

Si vous avez un compte Gmail, vous pouvez également envoyer un message signé pour un test rapide et facile.

Une fois que tout va bien, vous pouvez supprimer l'indicateur de test de l'enregistrement DNS TXT et augmenter la durée de vie.

Terminé!

38
MountainX

This est un bon guide.

Il explique qu'opendkim est effectivement recommandé et que les étapes pour implémenter votre signature de dkim sont identiques à celles de dkim-filter.

dkim-milter n'est plus en développement. Son auteur original a bifurqué la source et développe maintenant opendkim. Pour les versions ultérieures de Lucid, opendkim est préférable à dkim-filter. Les instructions sur cette page doivent être les mêmes (avec juste les noms de paquets ajustés si nécessaire).

BTW Domainkeys est le prédécesseur déconseillé de DKIM. Ajoutez TXT enregistrements à votre zone DNS pour SPF et DKIM, mais il n'est plus nécessaire de se soucier de Domainkeys.

0
iainH