Skip to content


Mettre en place DKIM avec Postfix sous Debian Squeeze (signer la provenance des courriels de votre Postfix)

Introduction

J'ai fait quelques articles sur comment sécuriser son Postfix et par là même rendre plus sûre la réception des courriels de vos utilisateurs :

http://monblog.system-linux.net/blog/2008/11/11/procmailrc-spamassassin-clamav/

http://monblog.system-linux.net/blog/2008/11/06/installation-de-postfix-avec-authentification-sasl-dovecot-imap/

Mais avez-vous imaginer sécuriser ceux qui réceptionnaient les courriels de vos utilisateurs... ? Oui ! Très bien !

Fut un temps où l'on rassurait les serveurs mail avec SPF, mais comme le fait remarquer Stéphane Bortzmeyer sur son blog (attention aucune fioriture n'est visible et il est d'une pointure toute autre que la mienne ou que celles des autres...) :

http://www.bortzmeyer.org/6376.html

sic : SPF (normalisé dans le RFC 4408) a été condamné par l'hostilité de la plupart des gros acteurs.

En bref c'est abandonné (pas par tous, exemple google l'utilise... Merci à emaildiff.com ) !

Implémenter DKIM

La méthode la plus prônée sur le net est à travers l'installation de dkim-filter, malheureusement celle-ci ne fonctionne pas sous Debian. En effet le processus dkim sur le port 8891 n'entend pas accepter de connexion ! 🙁 En bref il ne fait pas son travail !

Cependant il existe un paquet Debian appelé : opendkim qui lui fonctionne ! 🙂 (Non mais ! Salut Charlotte 😉 )

Il suffit de l'installer : apt-get install opendkim


# apt-get install opendkim
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants ont été installés automatiquement et ne sont plus nécessaires :
  libstring-crc32-perl libprelude2
Veuillez utiliser « apt-get autoremove » pour les supprimer.
Les paquets supplémentaires suivants seront installés :
  libev3 libldns1 libopendkim1 libunbound2
Les NOUVEAUX paquets suivants seront installés :
  libev3 libldns1 libopendkim1 libunbound2 opendkim
0 mis à jour, 5 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 694 ko dans les archives.
Après cette opération, 1 765 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?
Réception de : 1 http://http.us.debian.org/debian/ squeeze/main libev3 i386 1:3.9-1 [33,0 kB]
Réception de : 2 http://http.us.debian.org/debian/ squeeze/main libldns1 i386 1.6.6-2 [136 kB]
Réception de : 3 http://http.us.debian.org/debian/ squeeze/main libunbound2 i386 1.4.6-1 [284 kB]
Réception de : 4 http://http.us.debian.org/debian/ squeeze/main libopendkim1 i386 2.0.1+dfsg-1 [56,7 kB]
Réception de : 5 http://http.us.debian.org/debian/ squeeze/main opendkim i386 2.0.1+dfsg-1 [183 kB]
694 ko réceptionnés en 8s (80,3 ko/s)
Sélection du paquet libev3 précédemment désélectionné.
(Lecture de la base de données... 94867 fichiers et répertoires déjà installés.)
Dépaquetage de libev3 (à partir de .../libev3_1%3a3.9-1_i386.deb) ...
Sélection du paquet libldns1 précédemment désélectionné.
Dépaquetage de libldns1 (à partir de .../libldns1_1.6.6-2_i386.deb) ...
Sélection du paquet libldns1 précédemment désélectionné.
Dépaquetage de libldns1 (à partir de .../libldns1_1.6.6-2_i386.deb) ...
Sélection du paquet libunbound2 précédemment désélectionné.
Dépaquetage de libunbound2 (à partir de .../libunbound2_1.4.6-1_i386.deb) ...
Sélection du paquet libopendkim1 précédemment désélectionné.
Dépaquetage de libopendkim1 (à partir de .../libopendkim1_2.0.1+dfsg-1_i386.deb) ...
Sélection du paquet opendkim précédemment désélectionné.
Dépaquetage de opendkim (à partir de .../opendkim_2.0.1+dfsg-1_i386.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de libev3 (1:3.9-1) ...
Paramétrage de libldns1 (1.6.6-2) ...
Paramétrage de libunbound2 (1.4.6-1) ...
Paramétrage de libopendkim1 (2.0.1+dfsg-1) ...
Paramétrage de opendkim (2.0.1+dfsg-1) ...
insserv: script bind9.0: service bind9 already provided!
Starting OpenDKIM: opendkim: /etc/opendkim.conf: at least one selector and key required for signing mode opendkim

Puis éditer le fichier de configuration de opendkim :

nano /etc/opendkim.conf

Ce qui donne pour mon domaine......
# 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.
 
# Log to syslog
Syslog                  yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask                   002
 
# Sign for example.com with key in /etc/mail/dkim.key using
# selector '2007' (e.g. 2007._domainkey.example.com)
Domain                  system-linux.net
KeyFile                 /etc/dkim-filter/private.key
Selector                dkim
 
# Commonly-used options; the commented-out versions show the defaults.
#Canonicalization       simple
#Mode                   sv
#SubDomains             no
#ADSPDiscard            no

mkdir /etc/dkim-filter
cd  /etc/dkim-filter
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
chmod 640 private.key
chown opendkim private.key

Notez la clé publique :

cat public.key
 
-----BEGIN PUBLIC KEY-----
blabla .... blabla
-----END PUBLIC KEY-----

 

Editez le fichier /etc/default/opendkim :

nano /etc/default/opendkim

Cela donne :
# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
#SOCKET="local:/var/run/opendkim/opendkim.sock" # default
#SOCKET="inet:54321" # listen on all interfaces on port 54321
#SOCKET="inet:12345@localhost" # listen on loopback on port 12345
#SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345
SOCKET="inet:8891:localhost"

Il faut ensuite éditer le fichier principal de postfix :

nano /etc/postfix/main.cf

Ajouter :

# Filtres DKIM ...
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891
Redémarrez postfix et opendkim :

/etc/init.d/postfix restart && /etc/init.d/opendkim restart ; tail -f /var/log/mail.*

Modification de l'entrée de votre DNS

; DKIM
_domainkey.system-linux.net. IN TXT "t=y; o=-;"
dkim._domainkey.system-linux.net. IN TXT "k=rsa; t=s; p=blabla....blabla"

Incrémentez votre numéro de révision DNS et redémarrez votre DNS

Cela devrait fonctionner, faites le test en envoyant un courriel par votre serveur.... Dans l'entête du courriel vous devriez trouver :

DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=system-linux.net;
	s=dkim; t=1316846821;
	bh=Qow6S4suGylMIZcAP/N0t0X+rwuleC3aZPOn9JsOrLY=;
	h=Message-ID:Date:From:MIME-Version:To:Subject:Content-Type:
	 Content-Transfer-Encoding;
	b=iSZHEH4q0QOodWq9+IySwUbZK1Xvu/53OyQJxZmReiXKOADrWWJJgrmfXoIp7OlmW
	 vL7KehLsNFL5Feuv8xa/0GN9ePzhZ/wpY9YkD5TkwuTHL9Pjr+P7lD32QJr8h6JQPy
	 2HRjm50Ty6M8H5ABI0t//IdaGW2b9iaj2jRoxnm0=

Voilà !

Si vous avez un souci quant à la ligne avec un checkdns :

dkim._domainkey.system-linux.net. IN TXT "k=rsa; t=s; p=blabla....blabla"

Alors éditez votre fichier named.conf et dans la partie "options" mettez :

check-names master ignore; 
check-names slave  ignore;

Appliquez les changements :

/etc/init.d/bind9 restart

- Fin -

Print Friendly, PDF & Email

Posted in Debian, Important, Linux, Sécurité, Technique, Toutes. Tagged with , , , , , .

14 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. John said

    Bonjour,
    Merci pour cet article.
    Ça fonctionne très bien, mais lorsque le mail est envoyé par PHP, la signature ne semble pas fonctionner correctement :
    Authentication-Results: mx.google.com; [...] dkim=neutral (body hash did not verify) [...]

    Quand j’envoie un mail directement (avec mon logiciel de messagerie), j’obtiens :*
    Authentication-Results: mx.google.com; [...] dkim=pass header.i=[...]

    Y a-t-il une solution ?

    Merci !

  2. admin said

    Bonjour,

    quel processus utilisez-vous pour l'envoi de mail avec PHP ?
    mail ou un processus interne de PHP ?

  3. John said

    Bonjour,

    Merci pour votre réponse.

    Oui, c’est la fonction mail de PHP. Ces messages sont envoyés de la manière suivante lorsque quelqu’un s'inscrit sur mon forum :
    mail($to, $subject, $message, $headers, "-fforum@example.net");

    Lors d'une installation antérieure, j'avais réussi à signer ces mails correctement, mais j'ai récemment changé de serveur et je ne me rappelle plus quand j’avais fait.

  4. admin said

    Je pense que vous aviez peut-être installé PHP-DKIM ?

  5. MARINO Gerald said

    Bonjour,
    J'ai suivi cet excellent tutoriel à la lettre.
    Avec ce tuto, j'avais installé opendkim sur un autre serveur, je n'ai pas rencontré de problème. maias voila, j'ai du prendre une machine plus dimensionnée et patatrac, c'est l'horreur.
    Voici ce que me retourne Google : dkim=hardfail header.i=@mondomaine.com
    Quant à check-auth@verifier.port25.com il me dit : DKIM check: fail.

    Auriez-vous une piste car cela fait une semaine que je cherche.

    Merci d'avance.

  6. admin said

    Bonjour,

    As-tu généré de nouveau la clef ?
    mkdir /etc/dkim-filter
    cd /etc/dkim-filter
    openssl genrsa -out private.key 1024
    openssl rsa -in private.key -pubout -out public.key

    Sinon je ne vois pas !
    Regardes tout de même : http://www.hmailserver.com/forum/viewtopic.php?f=7&t=16290

  7. Juste pour corriger une erreur, concernant les SPF, c'est toujours d'actualité google par exemple vérifie bien se champ. : Received-SPF: pass (google.com: domain of .... )
    Donc il est vivement conseiller d'implanter ce champ dans vos dns les amis.
    Bien a vous

  8. chewie said

    bonjour,
    le paquet "dkim-tools" peut aussi être installé. On dispose alors de la commande opendkim-genkey qui simplifie le truc :

    opendkim-genkey -d domaine.com -s selecteur

  9. Bonjour,

    Super Tuto, je n'ai pas mis OpenDKIM mais dkim-filter, mais c'est très proche.
    J'ai eue 2 soucis donc je voulais vous les faire partager car j'ai bien galéré pour trouver la solution.

    JDésolé je fais le faignant mais c'est long à écrire et je ne vais pas faire un copier/coller tout de même 🙂

    donc voici les 2 liens où j'ai tout expliqué:

    http://blog.crifo.org/post/2010/01/28/Signer-ses-emails-avec-DKIM?pub=1#c2887

    ET

    http://forum.ubuntu-fr.org/viewtopic.php?pid=14206451#p14206451

    Enjoy !

  10. Patdenice said

    Tuto simple, efficace, qui a fonctionné du premier coup.
    Merci!

  11. hi said

    admin@serveur-5:/$ tail -f /var/log/mail.*
    ==> /var/log/mail.info /var/log/mail.log <==
    Dec 18 23:13:39 vm postfix/master[2119]: terminating on signal 15
    Dec 18 23:15:08 vm postfix/master[2483]: daemon started -- version 2.11.3, configuration /etc/postfix
    Dec 18 23:16:15 vm opendkim[3017]: OpenDKIM Filter v2.9.2 starting (args: -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p local:/var/run/opendkim/opendkim.sock)
    Dec 18 23:22:19 vm postfix/master[2483]: terminating on signal 15
    Dec 18 23:22:19 vm postfix/master[3263]: daemon started -- version 2.11.3, configuration /etc/postfix
    Dec 18 23:23:39 vm postfix/master[3263]: terminating on signal 15
    Dec 18 23:23:39 vm postfix/master[3516]: daemon started -- version 2.11.3, configuration /etc/postfix
    Dec 18 23:23:56 vm opendkim[3017]: OpenDKIM Filter: mi_stop=1
    Dec 18 23:23:56 vm opendkim[3017]: OpenDKIM Filter v2.9.2 terminating with status 0, errno = 0
    Dec 18 23:23:56 vm opendkim[3569]: OpenDKIM Filter v2.9.2 starting (args: -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891:localhost)

  12. lolotux said

    Oui et !?

Continuing the Discussion

  1. OpenDKIM pour Linux Debian Squeeze « Que le diable m'emporte! linked to this post on 1 mars 2012

    [...] http://monblog.system-linux.net/blog/2011/09/24/mettre-en-place-dkim-avec-postfix-sous-debian-sueeze...t; J'aimeJ'aime  « Le Dragon, c’est pour cette année. 新年快乐 [...]

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

Time limit is exhausted. Please reload CAPTCHA.


/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.