Configurer DKIM (DomainKeys) pour Ubuntu, Postfix et Mailman

22

J'utilise Ubuntu 12.04 avec Postfix et Mailman. Je veux configurer DKIM . DomainKeys Identified Mail, ou DKIM, est le successeur des "DomainKeys" de Yahoo. Il intègre la messagerie identifiée de Cisco.

Quelles sont les étapes pour configurer cela?

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 si ce n'est qu'une confirmation des étapes de ce lien). En fait, je pense que les informations sur HowToForge sont obsolètes car elles mentionnent dkim-filter au lieu d'opendkim.

MountainX pour Monica Cellio
la source

Réponses:

39

openDKIM et Postfix sur Ubuntu Server 12.04LTS

Je vais essayer de revenir et de mieux formater cela. 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. Par manque de temps, j'ai enveloppé toute ma réponse dans une 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 root à 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 décider du «sélecteur» que vous souhaitez utiliser. Le sélecteur est essentiellement un mot pour décrire la touche que vous souhaitez utiliser. Ici, je vais utiliser le sélecteur 201205 car la clé est devenue valide 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é)
  • my_selector (2ème clé)

Mon domaine le sera example.com, mais j'utiliserai un sous-domaine pour mon deuxième exemple:

  • example.com (1ère clé)
  • mail.example.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 actuel, en utilisant le sélecteur et le domaine que vous avez choisis.

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

Vous devrez peut-être ou non changer de propriétaire. Voir les détails dans mon exemple pour la 2ème clé ci-dessous pour ce que la propriété et les autorisations doivent être.

Vous devez d'abord vérifier s'il y a un opendkimutilisateur (vos ID utilisateur / groupe peuvent être différents):

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

Et vous devez probablement le faire:

# chmod 700 /var/run/opendkim

REMARQUE: ces deux commandes suivantes ne sont PAS nécessaires sur Ubuntu 12.04. Mais si la commande ci-dessus n'a pas montré que l'utilisateur opendkim était correctement configuré, faites-le de la même manière:

# 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-----

Vérifiez maintenant la clé publique et notez qu'il y a un bogue (dans openDKIM 2.5.2 sur Ubuntu 12.04)! Où est contient ;=rsa;, il doit contenir ;k=rsa;. Le kest manquant. Veuillez l'insérer.

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

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

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

De plus, vous devez probablement échapper aux points-virgules comme celui-ci. Si vous ne voulez pas le dernier commentaire, supprimez-le. 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 activement. Vous vous retrouvez avec 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 quant à l'utilisation d'un enregistrement SPF ou des deux types. Après un peu de lecture, j'ai choisi de m'en tenir exclusivement au type d'enregistrement TXT, bien que je ne pense pas que ce soit le dernier mot sur ce sujet.

Vous devez utiliser un court TTL (durée de vie) afin de pouvoir modifier la clé sans attendre qu'elle se propage via DNS. J'ai utilisé 180 secondes.

Le deuxième exemple de génération d'une paire de clés a été 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 "example.com" même si la clé sera utilisée pour "mail.example.com". J'y suis arrivé par essais et erreurs. Cela fonctionne, tout en utilisant "mail.example.com" n'a pas fonctionné. Malheureusement, je ne connais pas les raisons de cela. C'est vraiment la seule différence que j'ai rencontrée, mais c'était suffisamment troublant pour que je pense que je devrais documenter mes expériences avec l'utilisation des 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 doit retourner 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 les heures de grande écoute, selon ma lecture.

Exemple avec 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 est lié au fait que DNSSEC n'est pas implémenté sur mon serveur DNS et théoriquement, quelqu'un pourrait intercepter la recherche DNS et la remplacer par sa propre clé.

Modifiez 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 deuxième exemple clé, avec le domaine ciblé "mail.example.com", l'entrée ne référencera toujours que le domaine principal:

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

Remarque 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 opendkim)

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

Ajoutez des domaines, des noms d'hôte et / ou des adresses IP qui devraient être gérés par OpenDKIM. N'oubliez pas 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.)

Modifier /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/KeyTableet ajoutez le domaine au KeyTable

Ajouter une ligne:

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

Créez ensuite un fichier avec votre éditeur de texte /etc/opendkim/SigningTableet ajoutez le domaine à la table de signature

Je montre les deux exemples. Notez que pour ma 2è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 être un problème.

Configurez postfix. Modifiez /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

Modifiez é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

La meilleure façon 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. Je les ai utilisés:

Chacun d'eux vous indiquera si les choses fonctionnent correctement et vous donnera des conseils sur le dépannage si nécessaire.

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

Une fois que vous êtes satisfait que tout va bien, vous pouvez supprimer l'indicateur de test dans l'enregistrement DNS TXT et augmenter TTL.

Terminé!

MountainX pour Monica Cellio
la source
Fonctionne parfaitement sur précis. Bonne procédure pas à pas, merci.
Aki
Utilisez -b 1024 pour générer des clés de 1024 bits. C'est un must pour me faire signer mon gmail!
Prashant Singh
1
Veuillez noter que dans opendkim.conf, les trois paramètres "Domain", "KeyFile" et "Selector" sont ignorés lors de l'utilisation de "SigningTable" et "KeyTable". Je ne sais pas si cela a changé à un moment donné, mais il convient de le mentionner ( opendkim.org/opendkim.conf.5.html )
billynoah
0

Ceci est un bon guide.

Il explique qu'opendkim est en effet recommandé et que les étapes pour implémenter votre signature dkim sont les mêmes qu'avec dkim-filter.

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

BTW Domainkeys est le prédécesseur obsolète de DKIM. Ajoutez des enregistrements TXT à votre zone DNS pour SPF et DKIM, mais il n'est plus nécessaire de s'occuper des clés de domaine.

iainH
la source
Cet article que vous avez lié est obsolète. opendkim est le package à utiliser maintenant. Je travaille sur sa mise en place ...
MountainX pour Monica Cellio
J'apprécierais une mise à jour de vos expériences alors que je suis sur le point de passer d'un serveur d'Exim4 à Postfix-Dovecot et je chercherai des conseils à jour.
iainH
J'ai posté ma solution mais je n'ai pas eu le temps de la formater. Vous (ou toute autre personne) pouvez le formater. Mais mes notes sont très détaillées, je voulais donc que vous y ayez accès sans délai. J'espère qu'ils sont serviables.
MountainX pour Monica Cellio
-1

http://wiki.zimbra.com/wiki/Configuring_for_DKIM_Signing

Je m'assure toujours de croiser quelques guides sur quoi que ce soit. Ce tut sur les travaux de mise en place, je viens de le vérifier et ça valide celui-ci. Mais, vous voudrez peut-être afficher un exemple TXT pour l'enregistrement de domaine à détailler. Les gens pourraient être confus et mettre explicitement tout la clé elle-même dans la valeur p, ce qui, je ne suis pas tout à fait sûr, est correct. c'est-à-dire ... y compris ----- BEGIN PUBLIC KEY ----- et ----- END PUBLIC KEY -----. Cela peut être source de confusion pour certains. Assurez-vous de ne mettre que la partie de cryptage et non les marqueurs.

À M
la source
3
Bienvenue sur Ask Ubuntu! Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
Braiam