DKIM Proxy : Différence entre versions

De Wiki NCad
Aller à : navigation, rechercher
(Compilation)
(Signature des messages sortants)
Ligne 105 : Ligne 105 :
 
{{ Box Console | objet=openssl rsa -in private.key -out public.key -pubout -outform PEM }}
 
{{ Box Console | objet=openssl rsa -in private.key -out public.key -pubout -outform PEM }}
  
=== Signature des messages sortants ===
+
=== Signer tous les messages quelques soit le domaine ===
 
+
* Le fichier '''/opt/dkimproxy/etc/dkimproxy_out.conf''' permet de configurer la signature des messages sortants. Pour que ce système soit fonctionnel, il faudra renseigner notre '''nom de domaine''' ainsi que le fichier de '''clé privé''' utilisé pour la signature.
+
 
+
* On fait une copie du fichier de configuration par défaut '''/opt/dkimproxy/etc/dkimproxy_out.conf.example''' en '''/opt/dkimproxy/etc/dkimproxy_out.conf''' :
+
 
+
{{ Box Console | objet=cp /opt/dkimproxy/etc/dkimproxy_out.conf.example /opt/dkimproxy/etc/dkimproxy_out.conf }}
+
 
+
* Ce fichier contient les paramètres du '''relayage SMTP''' ''(informations de connexion à Postfix)'' ainsi que les informations nécessaires à la signature des messages destinés à être envoyés :
+
# specify what address/port DKIMproxy should listen on
+
listen    127.0.0.1:10027
+
+
# specify what address/port DKIMproxy forwards mail to
+
relay    127.0.0.1:10028
+
 
+
* D'après les lignes ci-dessus, '''Postfix''' soumettra les messages à signer à '''DKIM Proxy''' sur le port '''10027''' depuis son '''IP local''' ''(cas où Postfix et DKIM Proxy sont installé sur la même machine)''. Une fois signés, les messages seront retournés à '''Postfix''' sur le port '''10028'''. Il faudra que '''Postfix''' écoute sur ce port.
+
 
+
==== Signer tous les messages quelques soit le domaine ====
+
  
 
* Dans ce premier cas de configuration, le serveur proxy '''dkimproxy''' devra signer tous les messages sans distinction du nom de domaine de messagerie. Dans notre exemple, notre serveur de messagerie gère les domaines de messagerie '''geocoucou.eu''', '''ncad.fr''' et '''cachelou.fr'''.
 
* Dans ce premier cas de configuration, le serveur proxy '''dkimproxy''' devra signer tous les messages sans distinction du nom de domaine de messagerie. Dans notre exemple, notre serveur de messagerie gère les domaines de messagerie '''geocoucou.eu''', '''ncad.fr''' et '''cachelou.fr'''.
Ligne 194 : Ligne 177 :
 
</div>
 
</div>
  
==== Signer les messages pour les domaines sélectionnés ====
+
=== Signer les messages pour les domaines sélectionnés ===
  
 
* Cette fois-ci nous allons signer les messages des domaines de messagerie '''@geocoucou.eu''' et '''@cachelou.fr'''. Si des messages se présentent avec d'autres domaines, ils ne seront pas signés.
 
* Cette fois-ci nous allons signer les messages des domaines de messagerie '''@geocoucou.eu''' et '''@cachelou.fr'''. Si des messages se présentent avec d'autres domaines, ils ne seront pas signés.

Version du 5 juillet 2014 à 12:00

.:[ Serveur de Messagerie ]:.

Installation >> Postfix avec MySQL

Anti-Spam SpamAssassin | Anti-Virus Clamav


Plateforme de filtrage Amavis >> Amavis avec MySQL


Ajouter un Disclaimer


Configurer Thundirbird | Configurer Roundcube


Commandes messagerie | DNSBL | MX Backup
ICON Build.png
article en construction

Cette article doit être complétée.

Présentation

Architecture

Installation

Installation des dépendances

  • Les dépendances suivantes sont nécessaires pour la compilation du programme :
ICON Terminal.png

apt-get install libmail-dkim-perl build-essential gcc

  • Connexion au shell Perl pour l'installation des modules Perl Error, Net::Server et Mail::DKIM :
ICON Terminal.png

perl -MCPAN -e shell


ICON Information.png

Lors de la première connexion un assistance se lance automatiquement. Valider les réponses par défaut et le shell se mettra à jour (paquets, dépôts et dépendances). Relancez le shell perl une fois la mise à jour terminée.

  • Installation du module Perl Error :
ICON Terminal.png

install Error

  • Installation du module Perl Net::Server :
ICON Terminal.png

install Net::Server

  • Installation du module Perl Mail::DKIM :
ICON Terminal.png

install Mail::DKIM

Préparation

  • Le service sera installé sous le répertoire racine OPTionnel :
ICON Terminal.png

cd /opt

  • Dans ce répertoire on va créer le dossier dkimproxy qui contiendra le programme finale :
ICON Terminal.png

mkdir dkimproxy

  • On va également créer l'utilisateur UNIX dkim :
ICON Terminal.png

adduser dkim --no-create-home --disabled-password --disabled-login

Compilation

  • Téléchargement des sources depuis le site du développeur dans la racine /opt/ :
ICON Terminal.png

wget http://downloads.sourceforge.net/dkimproxy/dkimproxy-1.4.1.tar.gz


ICON Light.png
Vérifiez la dernière version à disposition depuis le site du développeur à l'adresse http://dkimproxy.sourceforge.net/
  • Dépaquetage des sources précédement téléchargées :
ICON Terminal.png

tar -xzvf dkimproxy-1.4.1.tar.gz

  • On se place dans le répertoire des sources de DKIM Proxy :
ICON Terminal.png

cd dkimproxy-1.4.1

  • On lance le script de configuration. Si toutes les dépendances sont satisfaites, aucune erreur ne doit être retournée :
ICON Terminal.png

./configure --prefix /opt/dkimproxy


ICON Light.png
le paramètre --prefix est obligatoire et indique au script de configuration dans quel répertoire se situera le script final dkimproxy.
  • On procède à la compilation et à l'installation de dkimproxy :
ICON Terminal.png

make install

  • On place une copie du script de démarrage et d'arrêt fournit depuis les sources dans le répertoire d'exécution /etc/init.d/ :
ICON Terminal.png

cp /opt/dkimproxy-1.4.1/sample-dkim-init-script.sh /etc/init.d/dkimproxy

Configuration

Le répertoire courant du service dkimproxy se trouve à la racine /opt/dkimproxy. On y trouvera 4 répertoire :

  • etc : contenant les fichiers de configuration du service.
  • bin : contenant les scripts d'exécution de dkimproxy.
  • lib : librairies et dépendances.
  • share : contient l'aide de dkmiproxy (man).

Génération des clés

  • On va créer le dossier keys dans le dossier /opt/dkimproxy/etc/. Ce dossier contiendra la clé privée et la clé publique pour signer / vérifier les messages soumis à dkim proxy :
ICON Terminal.png

mkdir /opt/dkimproxy/etc/keys

  • On se place dans ce nouveau dossier pour y générer nos clés privé et publique à l'aide d'OpenSSL :
ICON Terminal.png

cd /opt/dkimproxy/etc/keys

  • On génère la clé privée :
ICON Terminal.png

openssl genrsa -out private.key 1024

  • Ainsi que la clé publique :
ICON Terminal.png

openssl rsa -in private.key -out public.key -pubout -outform PEM

Signer tous les messages quelques soit le domaine

  • Dans ce premier cas de configuration, le serveur proxy dkimproxy devra signer tous les messages sans distinction du nom de domaine de messagerie. Dans notre exemple, notre serveur de messagerie gère les domaines de messagerie geocoucou.eu, ncad.fr et cachelou.fr.
  • Toujours dans le fichier /opt/dkimproxy/etc/dkimproxy_out.conf, on va indiquer le domaine de messagerie du serveur Postfix qui est dans notre cas geocoucou.eu :
domain    geocoucou.eu
  • On signe les messages avec DomainKeys et DKIM :
signature dkim(c=relaxed)
signature domainkeys(c=nofws)
  • On va indiquer l'emplacement de la clé privé pour procéder à la signature des messages :
keyfile   /opt/dkimproxy/etc/keys/private.key
  • On remarquera la valeur du paramètre selector à postfix qui sera important dans la configuration du DNS :
selector  postfix

  • On démarre dkimproxy :
ICON Terminal.png

service dkimproxy start

Pour mieux comprendre
  • Nous allons étudier le comportement de dkimproxy en effectuant deux tests d'envois. Le premier sera avec une adresse de messagerie se terminant par @geocoucou.eu et la seconde en @cachelou.fr.
  • On envoi un mail à partir de cacheln@geocoucou.eu et on observe dans /var/log/mail.log le comportement de dkimproxy :
Jul  5 01:20:01 coyotte dkimproxy.out[13438]: DKIM signing - signed; message-id= 
<be3cc1aa63343d7c1175bae8771cd24f@geocoucou.eu>, signer=<cacheln@geocoucou.eu>, from=
<cacheln@geocoucou.eu>
  • Le mail a été signé par dkimproxy. On peut également le constater dans les en-têtes mails :
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=geocoucou.eu; h=
  mime-version:content-type:date:from:to:subject:message-id; s=
  postfix; bh=DswaGNF6Ys163qqLTy/Rb1PgwQ4=; b=n6Gor/6CacHCwSAW1BlO
  oVoYZ+f3oGyiUPg7CME8pPlICGNtNb1kpL/3jYAdLHRe6bmNdHYRwZymo/uorECJ
  KU4zsoMw+yCWYoZsQuEwvBWEbP5Yg7SOTeL6nJIkHFjQLgN6eTyINJiRtikfr6qb
  gfnnsSlOGj/xtOcxZo9u2Qo=

DomainKey-Signature: a=rsa-sha1; c=nofws; d=geocoucou.eu; h=mime-version
  :content-type:date:from:to:subject:message-id; q=dns; s=postfix; b=
  lbTqsJ0aB+q6/3fhPI0KujK3jTKbVRRoVEW+ieqV2rbZ1I9b7fGl2a90dtKawcNZ
  OanlbroaVMlCRlUZZFF/LhqmFdoJHa0FszkC9Jf8akcNBlQ7oNBXgyRckpenzFmZ
  jlpHKFhgbSPCbdWy8hwehHo2I7SFEicseVdpCD6J3zY=
  • Maintenant, on va envoyer un mail à partir de nicolas@cachelou.fr et on observe dans /var/log/mail.log le comportement de dkimproxy :
Jul  5 01:25:48 coyotte dkimproxy.out[13439]: DKIM signing - signed; message-id=
<6b238567bb2bc1b0725bf4e86015c28b@geocoucou.eu>, signer=<@geocoucou.eu>, from=
<nicolas@cachelou.fr>
  • Le mail a été également signé par dkimproxy. On peut également le constater dans les en-têtes mails :
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=geocoucou.eu; h=
  mime-version:content-type:date:from:to:subject:message-id; s=
  postfix; bh=zyYAr5rgDCRi7dLRvfScsHfHqgU=; b=UdI/pTKvge07+gAuVybE
  Tn0CYL3v4un7QQ/BIZpCxLiVZ/dx3BEFgdlhRal1l5+Hvn2C7DOjdJvMS5VT+5Qi
  FUv0OhHAJfGdd3eFL3qBRXlcqYkI9PpnbpyjQffcgXmOXvL/uVUnsj88BGdtztfK
  JuGgRwoPzwomT6269WNsMLo=
ICON Light.png
On remarquera que dans ce cas de configuration, la signature du message envoyé depuis le domaine @cachelou.fr porte la signature du domaine geocoucou.eu.

Signer les messages pour les domaines sélectionnés

  • Cette fois-ci nous allons signer les messages des domaines de messagerie @geocoucou.eu et @cachelou.fr. Si des messages se présentent avec d'autres domaines, ils ne seront pas signés.
  • Il faudra tout d'abord déclarer les domaines à signer dans le paramètre domain du fichier de configuration /opt/dkimproxy/etc/dkimproxy_out.conf :
domain geocoucou.eu,cachelou.fr
  • Ensuite, il faudra commenter les lignes suivantes :
#signature dkim(c=relaxed)
#signature domainkeys(c=nofws)
#keyfile   /opt/dkimproxy/etc/keys/private.key
  • On remarquera la valeur du paramètre selector à postfix qui sera important dans la configuration du DNS :
selector  postfix
  • Nous allons mapper les paramètres de configuration de la signature DKIM en fonction du nom de domaine de messagerie. Pour cela, nous indiqueront le chemin du fichier ou se trouvera la table de correspondance nom de domaine et paramètres de signature :
sender_map /opt/dkimproxy/etc/sender_map
  • Nous allons donc créer le fichier /opt/dkimproxy/etc/sender_map et y inscrire les données suivantes :
geocoucou.eu dkim(s=postfix,d=geocoucou.eu,c=simple,a=rsa-sha256,key=/opt/dkimproxy/etc/keys/private.key)
cachelou.fr dkim(s=postfix,d=cachelou.fr,c=relaxed,a=rsa-sha256,key=/opt/dkimproxy/etc/keys/private.key)
ICON Information.png

Nous inscrivons les paramètres de signatures DKIM pour les deux noms de domaine geocoucou.eu et cachelou.fr. Un nom de domaine par ligne.

  • On redémarre dkimproxy pour appliquer les changements :
ICON Terminal.png

service dkimproxy restart

Pour mieux comprendre
  • Nous allons étudier le comportement de dkimproxy en effectuant trois tests d'envois. Le premier sera avec une adresse de messagerie se terminant par @geocoucou.eu, la seconde en @cachelou.fr et la dernière avec @ncad.fr.
  • On envoi un mail à partir de cacheln@geocoucou.eu et on observe dans /var/log/mail.log le comportement de dkimproxy :
Jul  5 01:46:49 coyotte dkimproxy.out[13494]: DKIM signing - signed; message-id=
<e4208652d46a7605ae5e0d2d52ec1807@geocoucou.eu>, signer=<@geocoucou.eu>, from=
<cacheln@geocoucou.eu>
  • Le mail a été signé par dkimproxy. On peut également le constater dans les en-têtes mails :
DKIM-Signature: v=1; a=rsa-sha256; c=simple;  d=geocoucou.eu; h=
  mime-version:content-type:date:from:to:subject:message-id; s=
  postfix; bh=GlSsmbMLgIxjZrrG2KTJ7//MOo4afRUxQ4LTIccq6mM=; b=jpRj
  tV+5gHoQsnnpuY22xaEYyYKCDLSvzylk/3hqTDc5TDlpmBQndj+SURnu4yy1syhh
  4aDSuyAljt6XvF8S/0iCxCtoT8VjosLygsFYOoe3+Uw//eJNwAD+42Jko9fegfqV
  ckz2kwt7Q5mXFw2p0kDQFAuiSau+UztYVsThiNs=
  • Maintenant, on va envoyer un mail à partir de nicolas@cachelou.fr et on observe dans /var/log/mail.log le comportement de dkimproxy :
Jul  5 01:51:41 coyotte dkimproxy.out[13495]: DKIM signing - signed; message-id= 
<f8f9e7d1b3724a1c9455aaabb39d9c7b@geocoucou.eu>, signer=<@cachelou.fr>, from=
<nicolas@cachelou.fr>
  • Le mail a été également signé par dkimproxy. On peut également le constater dans les en-têtes mails :
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=cachelou.fr; h=
  mime-version:content-type:date:from:to:subject:message-id; s=
  postfix; bh=t6ZXYeN8uK0dNkiNRU0tJOuHhnWkswDb3IIT3w3mZSc=; b=XK5X
  eK3naXGY24vpnkJCvn6U4qS+Pel7DOGuFDi2/MR2wUwlUysrmQcdyrEZFG57ZCv7
  XqPhIE+j3ld0FmgW3IV0wi6cUO3Pj/hytWkaZxoGx5KwUJ9fOvKiOO5Cl7xwtE2w
  si+iW+ZEJS8nOtRioioAjCkBaBiaqG5dSZxQRPA=
ICON Light.png
On remarquera que cette fois-ci le nom du domaine inscrit dans le paramètre d de la signature DKIM est bien respecté.
  • On effectue le troisième et dernier teste avec l'adresse tech@ncad.fr dont le domaine n'a pas été déclaré dans la configuration de dkimproxy :
Jul  5 02:03:29 coyotte dkimproxy.out[13498]: DKIM signing - skipped; message-id=
<f90f97a9d1f263d3a370a5a1de2796b8@geocoucou.eu>, from=<tech@ncad.fr>
ICON Light.png
Le message n'a pas été signé et dans le mail on ne remarque aucune en-tête DKIM-Signature.

Configuration DNS

  • Pour la configuration DNS on prendra pour exemple d'illustration le nom de domaine geocoucou.eu.
  • Dans la zone, il faudra créer deux enregistrement :
_domainkey     IN TXT "k=rsa; t=s; o=-;"
postfix._domainkey IN TXT "k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOoiiQ8nyId0Liww7goJZJyJoIn7ddCtNdQWSi2SeWDBzFZQQGQQ3Ub3ie2mJwUWuZQJwn409cfhENtICxLSA0UXxWCp5Rpzj+y4AJqvRqh85PIQo5YofauH1IH5+TNunhhCH5PE42Iqs5iNFvWYK+2hJ+n5CSXoNmAy2sxih8xQIDAQAB"
  • La chaîne de caractères en bleu correspond à la valeur affectée au paramètre selector dans /opt/dkimproxy/etc/dkimproxy_out.conf et la chaîne de caractères rouge correspond à la clé privée contenu dans le fichier /opt/dkimproxy/etc/keys/public.key.

Vérification

  • On se connecte à dkimproxy sur le port 10027 en local :
ICON Terminal.png

telnet 127.0.0.1 10027
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
421 Internal error (Next hop is down)
Connection closed by foreign host.

  • On remarque que la connexion est interrompu. En faite dkimproxy cherche à contacter Postfix mais ce dernier n'a pas encore été configuré et la connexion est donc par défaut refusée.

Intégration dans Postfix

Postfix va devoir interroger dkimproxy pour procéder à la signature des messages qu'il souhaite envoyer. Pour se faire, nous allons devoir modifier les règles de routage des courriels sortants. Il va donc falloir agir sur le fichier /etc/postfix/master.cf.

Signature des courriers sortants

Vérification des courriers entrants

Liens