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 opendkim
utilisateur (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 k
est 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/KeyTable
et 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/SigningTable
et 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:
- Brandon Checketts Email Validator - http://www.brandonchecketts.com/emailtest.php (mon préféré)
- Envoyez un email signé à: check-auth@verifier.port25.com (mon préféré aussi)
Envoyez un e-mail signé à: sa-test@sendmail.net (vous pouvez mettre toutes les adresses e-mail de test dans le champ À: d'un seul message sortant à tester)
Envoyez un e-mail signé à: autorespond+dkim@dk.elandsys.com <--- BROKEN !!! N'utilisez pas celui-ci.
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é!