<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.grafactory.net/blog/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>L'appartement - amavis</title>
  <link>http://www.grafactory.net/blog/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Sun, 24 Aug 2008 20:09:44 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Installer la signature DKIM sur Postfix avec DKIMproxy</title>
    <link>http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new</link>
    <guid isPermaLink="false">urn:md5:7f7842a3ebe511cd881299d33d7a7014</guid>
    <pubDate>Wed, 12 Mar 2008 10:00:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le pingouin</category>
        <category>amavis</category><category>dkim</category><category>dkimproxy</category><category>domainkeys</category><category>postfix</category>    
    <description>&lt;p&gt;Je vous propose dans ce billet l'installation de la signature &lt;a href=&quot;http://dkim.org/&quot;&gt;DKIM&lt;/a&gt; sur vos mails &lt;em&gt;sortants&lt;/em&gt;. Ceci fait suite à mon billet concernant l'implémentation de &lt;a href=&quot;http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new&quot; hreflang=&quot;fr&quot;&gt;DomainKeys avec Postfix et Amavis via Dkfilter&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://jason.long.name/dkfilter/&quot;&gt;Dkfilter&lt;/a&gt; ne gère en effet que le protocole DomainKeys de Yahoo! maintenant remplacé par &lt;a href=&quot;http://www.dkim.org/&quot; hreflang=&quot;en&quot;&gt;DKIM&lt;/a&gt; (DomainKeys Identified Mail) , un protocole plus &lt;em&gt;avancé&lt;/em&gt; et standardisé par la &lt;a href=&quot;http://www.ietf.org/rfc/rfc4871.txt&quot; hreflang=&quot;en&quot;&gt;RFC 4871&lt;/a&gt;. Très très brièvement, DKIM permet de «&amp;nbsp;renforcer&amp;nbsp;» l'identité des expéditeurs.&lt;/p&gt;


&lt;p&gt;En remplacement de dkfilter, l'auteur de ce programme nous propose &lt;a href=&quot;http://dkimproxy.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;DKIMproxy&lt;/a&gt; pour gérer la signature DKIM et/ou DomainKeys.&lt;/p&gt;


&lt;p&gt;Si vous utilisez &lt;a href=&quot;http://www.ijs.si/software/amavisd/&quot;&gt;Amavis&lt;/a&gt;, comme c'est mon cas, sachez quelques petites choses&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Il semble que Amavisd-new gère la signature DKIM des mails sortants à partir de la version 2.6.0. Mais sur Debian Etch, nous en sommes à la version 2.4. C'est donc l'intérêt de ce billet. Je n'ai pas testé la version 2.6.0. je ne peux donc pas vous en dire plus.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;DKIMproxy permet également une vérification des mails entrants. Cette vérification ne nous intéresse pas forcément puisque Amavis propose déjà cette fonctionnalité via Spamassassin qui utilise la librairie perl Mail::DKIM.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Comme pour mon précédent billet, c'est un &lt;/em&gt;howto&lt;em&gt; «&amp;nbsp;copié/collé&amp;nbsp;» pour les informaticiens &lt;del&gt;fainéants&lt;/del&gt; pressés. J'ai également fais pas mal de copié/collé de l'ancien billet puisque la configuration est sensiblement la même sur de nombreux points.&lt;/em&gt;&lt;/p&gt;    &lt;h3&gt;Installer DKIMproxy&lt;/h3&gt;


&lt;p&gt;Placez-vous dans /usr/src et téléchargez &lt;a href=&quot;http://dkimproxy.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;DKIMproxy&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;
cd /usr/src
wget http://kent.dl.sourceforge.net/sourceforge/dkimproxy/dkimproxy-1.0.1.tar.gz
&lt;/pre&gt;


&lt;p&gt;Décompressez l'archive et placez-vous dans le nouveau répertoire&lt;/p&gt;

&lt;pre&gt;
tar zxvf dkimproxy-1.0.1.tar.gz
cd dkimproxy-1.0.1
&lt;/pre&gt;


&lt;p&gt;Si vous n'avez pas encore le module perl Mail::Dkim, il faut l'installer via CPAN pour disposer d'une version suffisamment récente la version Debian Etch est trop ancienne).&lt;/p&gt;

&lt;pre&gt;
perl -MCPAN -e shell
install Mail::DKIM
exit
&lt;/pre&gt;


&lt;p&gt;Préparez l'installation de dkimproxy dans /usr/local/dkimproxy&lt;/p&gt;

&lt;pre&gt;
mkdir /usr/local/dkimproxy
./configure --prefix=/usr/local/dkimproxy
&lt;/pre&gt;


&lt;p&gt;Compilez et installez&lt;/p&gt;

&lt;pre&gt;
make install
&lt;/pre&gt;


&lt;p&gt;Déplacez-vous dans le répertoire dkimproxy et renommez les fichiers de configuration des daemons&lt;/p&gt;

&lt;pre&gt;
cd /usr/local/dkimproxy
mv etc/dkimproxy_in.conf.example etc/dkimproxy_in.conf
mv etc/dkimproxy_out.conf.example etc/dkimproxy_out.conf
&lt;/pre&gt;


&lt;h3&gt;Créer l'utilisateur et le groupe dkim&lt;/h3&gt;

&lt;pre&gt;
adduser dkim --no-create-home --disabled-password --disabled-login
&lt;/pre&gt;


&lt;h3&gt;Installer le script de démarrage de dkimproxy&lt;/h3&gt;


&lt;p&gt;Copiez le script de démarrage proposé dans les sources de dkimproxy dans /etc/init.d/&lt;/p&gt;

&lt;pre&gt;
cp /usr/src/dkimproxy-1.0.1/sample-dkim-init-script.sh /etc/init.d/dkimproxy
&lt;/pre&gt;


&lt;p&gt;Editez-le. Normalement, il n'y a rien a changer dans ce fichier si on utilise les paramètres «&amp;nbsp;standards&amp;nbsp;»&lt;/p&gt;

&lt;pre&gt;
vi /etc/init.d/dkimproxy
&lt;/pre&gt;


&lt;h3&gt;Créer une clé publique/privée&lt;/h3&gt;


&lt;p&gt;Chaque domaine possèdera sa propre clé. On crée un dossier dans lequel on stockera les clés.&lt;/p&gt;

&lt;pre&gt;
mkdir /usr/local/dkimproxy/keys
cd /usr/local/dkimproxy/keys
&lt;/pre&gt;


&lt;p&gt;On suppose que vous avez le paquet OpenSSL installé et que votre domaine est exemple.tld&lt;/p&gt;


&lt;p&gt;La clé privée&lt;/p&gt;

&lt;pre&gt;
openssl genrsa -out exempletld.key 1024
&lt;/pre&gt;


&lt;p&gt;La clé publique&lt;/p&gt;

&lt;pre&gt;
openssl rsa -in exempletld.key -pubout -out exempletld_pub.key
&lt;/pre&gt;


&lt;p&gt;Changer les droits sur la clé privée pour la rendre uniquement accessible à l'utilisateur dkim&lt;/p&gt;

&lt;pre&gt;
chown dkim:dkim exempletld.key
chmod 640 exempletld.key
&lt;/pre&gt;


&lt;h3&gt;Ajouter l'enregistrement TXT à la zone DNS&lt;/h3&gt;


&lt;p&gt;Une fois la clé générée, il va falloir ajouter un enregistrement TXT à la zone de chaque domaine. Prenons encore l'exemple du domaine exemple.tld&lt;/p&gt;


&lt;p&gt;On édite le fichier de zone /var/cache/bind/exemple.tld.hosts et on ajoute l'enregistrement TXT suivant. La valeur de &quot;p=&quot; correspond à la clé publique sur une seule ligne. Notez également le nom exempletld qui sera utile pour la suite (nous l'appellerons &quot;sélecteur&quot;). Le t=y; signifie que votre installation est en test. Vous pourrez retirer cette information quand tout sera opérationnel&lt;/p&gt;

&lt;pre&gt;
; DKIM
_domainkey.exemple.tld.                  IN TXT  &amp;quot;t=y; o=-;&amp;quot;
exempletld._domainkey.exemple.tld.    IN TXT &amp;quot;k=rsa; t=s; p=ici_la_cle_publique_hyper_longue&amp;quot;
&lt;/pre&gt;


&lt;p&gt;N'oubliez pas d'incrémenter le numéro de série de votre zone pour que les changements soient pris en compte et relancer bind&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/bind9 restart
&lt;/pre&gt;


&lt;h3&gt;Créer le fichier de configuration de DKIM&lt;/h3&gt;


&lt;p&gt;Il faut maintenant créer le fichier de configuration qu'utilisera DKIMproxy au lancement du service. Celui ci contient les différentes informations pour chacun des domaines signés.&lt;/p&gt;

&lt;pre&gt;
vi /usr/local/dkimproxy/sender_map
&lt;/pre&gt;


&lt;p&gt;Toujours l'exemple avec exemple.tld. Ici, on demande la signature DKIM &lt;strong&gt;et&lt;/strong&gt; la signature DomainKeys. Il est possible de choisir l'un ou l'autre uniquement. Je vous renvois sur les spécifications de DKIM pour les autres paramètres&amp;nbsp;! Sachez simplement que le paramètre «&amp;nbsp;s&amp;nbsp;» correspond au nom du sélecteur utilisé dans votre fichier de zone.&lt;/p&gt;

&lt;pre&gt;
exemple.tld dkim(c=simple,s=exempletld,a=rsa-sha1,key=/usr/local/dkimproxy/keys/exemple.tld.key), domainkeys(c=nofws,s=exempletld,key=/usr/local/dkimproxy/keys/exempletld.key) 
&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;A lire avant de continuer&lt;/strong&gt;&amp;nbsp;: un «&amp;nbsp;problème&amp;nbsp;» subsiste dans mon &lt;em&gt;howto&lt;/em&gt;. En effet, je lance toujours dkimproxy.in qui s'occupe de l'analyse de messages entrants alors que ce travail est déjà effectué par SpamAssasin via Amavis comme je le précise au début de ce billet. Je n'ai simplement pas pris le temps de modifier le script de démarrage et mon implémentation dans Postfix. Je modifierais ce billet dés que j'aurais nettoyé tout ça&amp;nbsp;! Ami lecteur, si tu l'as fais pour ta configuration, n'hésites pas à me le signaler &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;


&lt;p&gt;Ceci étant, la signature fonctionne tout de même... alors on continue&amp;nbsp;!&lt;/p&gt;


&lt;h3&gt;Lancer DKIMproxy&lt;/h3&gt;


&lt;p&gt;Avant d'envisager la configuration de Postfix, il faut vérifier que DKIMproxy se lance correctement&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/dkimproxy start
&lt;/pre&gt;


&lt;p&gt;Si il n'y a pas d'erreur on vérifie que le service est fonctionnel&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ps aux | grep dkim
&lt;/pre&gt;


&lt;p&gt;Il doit y avoir des lignes avec dkimproxy.in et des lignes avec dkimproxy.out.&lt;/p&gt;


&lt;p&gt;Maintenant que la zone est modifié, DKIMproxy installé et fonctionnel, passons enfin à la configuration de Postfix.&lt;/p&gt;


&lt;h3&gt;Configurer de Postfix&lt;/h3&gt;


&lt;p&gt;&lt;em&gt;La configuration n'est pas différente de celle pour dkfilter. Je colle ici le contenu de mon précédent billet.&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Dans ma configuration, avant l'installation de DKIM et DomainKeys, j'utilise déjà Amavisd-new pour le filtrage antivirus (clamav) et antispam (spamassassin et dspam). J'ajoute donc DKIMproxy dans le process avant l'analyse par Amavis.&lt;/p&gt;


&lt;p&gt;Dans le main.cf, je remplace&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
content_filter = amavis:[127.0.0.1]:10024
&lt;/pre&gt;


&lt;p&gt;par&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
content_filter = dksign:[127.0.0.1]:12027
&lt;/pre&gt;


&lt;p&gt;[Je ne sais pas pourquoi mais si je ne précise pas le content_filter dans le main.cf, les mails envoyés par des processus locaux (par exemple, la fonction mail de PHP) ne passe pas par amavis et dksign]&lt;/p&gt;


&lt;p&gt;Dans le master.cf, voici la configuration&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Au début du fichier&lt;/p&gt;

&lt;pre&gt;
# relayer sur dksign sur le port 10028
smtp      inet  n       -       -       -       200     smtpd
        -o receive_override_options=no_address_mappings
        -o content_filter=dksign:[127.0.0.1]:12027

# Le smtp securise SSL
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o content_filter=dksign:[127.0.0.1]:12027
  -o receive_override_options=no_address_mappings
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

# envoyer directement a dksign
submission  inet  n     -       n       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o content_filter=dksign:[127.0.0.1]:12027
    -o receive_override_options=no_address_mappings
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
    #-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
&lt;/pre&gt;


&lt;p&gt;A la fin&lt;/p&gt;

&lt;pre&gt;
# Pour amavis
amavis  unix    -   -   -   -   20  smtp
        -o smtp_helo_timeout=300 
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1
    -o disable_dns_lookups=yes

#
# signature dkim/domainkeys
#
dksign    unix  -       -       n       -       10      smtp
    -o smtp_send_xforward_command=yes
    -o smtp_discard_ehlo_keywords=8bitmime

#
# signature dkim/domainkeys
#
127.0.0.1:12028 inet  n  -      n       -       10      smtpd
    -o content_filter=amavis:[127.0.0.1]:10024
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8
&lt;/pre&gt;


&lt;p&gt;Vous pouvez ensuite relancer postfix&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/postfix restart
&lt;/pre&gt;


&lt;h3&gt;Vérifier la signature&lt;/h3&gt;


&lt;p&gt;Envoyez un mail et regardez dans les logs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
tail -f /var/log/mail.info
&lt;/pre&gt;


&lt;p&gt;Vous devez avoir pour un message envoyé par une adresse de exemple.tld&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
... DKIM signing - signed; message-id=&amp;lt;47D7961B.6060505@exemple.tld&amp;gt;, signer=&amp;lt;yves@exemple.tld&amp;gt;, from=&amp;lt;yves@exemple.tld&amp;gt; 
&lt;/pre&gt;


&lt;p&gt;Pour les autres&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
... DKIM signing - skipped; from=&amp;lt;test@autredomain.tld
&lt;/pre&gt;


&lt;p&gt;Vous pouvez également vérifier votre configuration en envoyant un mail à l'adresse&amp;nbsp;: &lt;strong&gt;check-auth ici_le_chez verifier.port25.com&lt;/strong&gt;. Cette adresse vous renvoi les informations sur l'installation des différents protocoles d'authentification des mails sur votre domaine. Ainsi, si vous avez également configuré correctement SPF vous devez avoir tout bon&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
==========================================================
Summary of Results
==========================================================
SPF check:          pass
DomainKeys check:   pass
DKIM check:         pass
Sender-ID check:    pass
SpamAssassin check: ham
&lt;/pre&gt;


&lt;p&gt;Vous devez aussi avoir les informations sur DKIM et DomainKeys dans l'entête du message signé&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DKIM-Signature: v=1; a=rsa-sha1; c=simple; d=exemple.tld; h=
	message-id:date:from:mime-version:to:subject:content-type:
	content-transfer-encoding; q=dns/txt; s=exempletld; bh=clepublique=
DomainKey-Signature: a=rsa-sha1; c=nofws; d=exemple.tld; h=message-id:
	date:from:mime-version:to:subject:content-type:
	content-transfer-encoding; q=dns; s=exemple.tld; b=clepublique=
&lt;/pre&gt;


&lt;p&gt;Il me reste encore à comprendre complètement les différentes options de la spécification DKIM mais c'est un bon début &lt;img src=&quot;/blog/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/157</wfw:commentRss>
      </item>
    
  <item>
    <title>Installer DomainKeys sur Postfix (Debian Etch, Amavisd-new...)</title>
    <link>http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new</link>
    <guid isPermaLink="false">urn:md5:b3d3901baee1b8cfd722b82e08824f6c</guid>
    <pubDate>Sun, 04 Nov 2007 13:58:00 +0100</pubDate>
    <dc:creator>Yves Tannier</dc:creator>
        <category>Le pingouin</category>
        <category>amavis</category><category>dkim</category><category>domainkeys</category><category>mail</category><category>postfix</category>    
    <description>&lt;p&gt;&lt;strong&gt;Mise à jour le 12 mars 2008&lt;/strong&gt;&amp;nbsp;: le même billet adapté pour DKIM est disponible&amp;nbsp;: &lt;a href=&quot;http://www.grafactory.net/blog/post/2008/03/12/Installer-la-signature-DKIM-sur-Postfix-Debian-Etch-Amavisd-new&quot; hreflang=&quot;fr&quot;&gt;Installer la signature DKIM sur Postfix avec DKIMproxy&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Dans ma lutte incessante pour que mes messages n'aient pas comme destination finale les dossiers &quot;courrier indésirable&quot; des &quot;grands&quot; fournisseurs tels que Yahoo!, Hotmail/MSN, Gmail ect... Je vous propose aujourd'hui l'installation de la signature Domainkeys sur vos mails.&lt;/p&gt;


&lt;p&gt;DomainKeys est un protocole de communication créé par Yahoo! (et défini par une RFC 4870). Wikipedia vous donnera un plus d'informations sur le sujet&amp;nbsp;: &lt;a href=&quot;http://en.wikipedia.org/wiki/DomainKeys&quot; hreflang=&quot;en&quot;&gt;DomainKeys&lt;/a&gt; sur Wikipedia&lt;/p&gt;


&lt;p&gt;Même s'il fonctionne totalement et est déployé sur de nombreux serveurs, sachez qu'il est maintenant &lt;em&gt;remplacé&lt;/em&gt; par une RFC plus &quot;globale&quot;&amp;nbsp;: &lt;a href=&quot;http://www.ietf.org/rfc/rfc4871.txt&quot; hreflang=&quot;en&quot;&gt;DKIM&lt;/a&gt;  (Domain Keys Identified Mail). J'aborderais les différences et l'implémentation de DKIM dans un autre post.&lt;/p&gt;


&lt;p&gt;D'autres liens&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://fr.docs.yahoo.com/mail/spamguard_domainkeys.html&quot; hreflang=&quot;fr&quot;&gt;Prouver et sécuriser l'identité des expéditeurs&lt;/a&gt; par Yahoo!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://domainkeys.sourceforge.net/&quot; hreflang=&quot;en&quot;&gt;DomainKey Implementor's Tools and Library for email servers &amp;amp; clients&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DomainKeys bien reconnu chez Yahoo! (forcément ;))
&lt;img src=&quot;http://www.grafactory.net/blog/public/images/domain_keys.jpg&quot; alt=&quot;DomainKeys&quot; /&gt;&lt;/p&gt;



&lt;p&gt;Voici la configuration du serveur de messagerie sur lequel se base ce tutoriel&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distribution Linux &lt;a href=&quot;http://www.debian.org/&quot; hreflang=&quot;fr&quot;&gt;Debian&lt;/a&gt; Etch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.postfix.org/&quot; hreflang=&quot;en&quot;&gt;Postfix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amavis.org/&quot; hreflang=&quot;en&quot;&gt;Amavis&lt;/a&gt; (antivirus+antispam)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nous allons mettre en place la configuration suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
postfix -&amp;gt; dkfilter -&amp;gt; postfix -&amp;gt; amavis -&amp;gt; postfix
&lt;/pre&gt;


&lt;p&gt;&lt;a href=&quot;http://jason.long.name/dkfilter/&quot; hreflang=&quot;en&quot;&gt;Dkfilter&lt;/a&gt; est un proxy de signature et de vérification des signatures pour DomainKeys.&lt;/p&gt;


&lt;p&gt;Ceci peut paraitre un peu lourd en regardant le schéma, mais postfix gère ce type de configuration très bien via les &lt;a href=&quot;http://www.postfix.org/FILTER_README.html&quot; hreflang=&quot;en&quot;&gt;content filter&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;em&gt;Comme je suis gentil et que l'informaticien est souvent fainéant, j'ai écris ce howto avec plein de copier/coller &lt;img src=&quot;/blog/themes/default/smilies/wink.png&quot; alt=&quot;;)&quot; class=&quot;smiley&quot; /&gt;&lt;/em&gt;&lt;/p&gt;    &lt;h2&gt;Installer dkfilter&lt;/h2&gt;


&lt;p&gt;Il n'existe, à l'heure où j'écris ces lignes, pas de paquet Debian Etch pour dkfilter mais l'installation est relativement simple.&lt;/p&gt;


&lt;h3&gt;Installez les modules perl suivant (ici, via cpan)&amp;nbsp;:&lt;/h3&gt;

&lt;pre&gt;
perl -MCPAN -e shell

install Crypt::OpenSSL::RSA
install Mail::Address
install MIME::Base64
install Net::DNS
install Net::Server
install Test::More
install AppConfig::File
&lt;/pre&gt;


&lt;p&gt;Placez vous dans /usr/src/&lt;/p&gt;

&lt;pre&gt;
cd /usr/src/
&lt;/pre&gt;


&lt;h3&gt;Téléchargez dkfilter&lt;/h3&gt;

&lt;pre&gt;
wget http://jason.long.name/dkfilter/dkfilter-0.11.tar.gz
&lt;/pre&gt;


&lt;p&gt;Décompressez l'archive&lt;/p&gt;

&lt;pre&gt;
tar zxvf dkfilter-0.11.tar.gz
&lt;/pre&gt;


&lt;h3&gt;Patcher pour l'utilisation de dkfilter sur plusieurs domaines&lt;/h3&gt;


&lt;p&gt;Pour mon installation, j'ai besoin que &lt;strong&gt;Domain Keys&lt;/strong&gt; soit utilisable pour &lt;strong&gt;plusieurs domaines&lt;/strong&gt; sur le même serveur.&lt;/p&gt;


&lt;p&gt;Ca tombe bien, un gentil contributeur nous propose un &lt;em&gt;patch&lt;/em&gt; de dkfilter pour gérer les différentes clés et paramètres par domaine depuis un simple fichier de configuration.&lt;/p&gt;


&lt;p&gt;Téléchargez donc le patch en question&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
wget -P /usr/src/dkfilter-0.11/scripts/ http://jason.long.name/dkfilter/config_file.patch
&lt;/pre&gt;


&lt;p&gt;Patchez le programme&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
cd /usr/src/dkfilter-0.11/scripts/
patch &amp;lt; config_file.patch
&lt;/pre&gt;


&lt;p&gt;Ensuite, créez le répertoire d'installation de dkfilter dans /usr/local par exemple&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
mkdir /usr/local/dkfilter
&lt;/pre&gt;


&lt;p&gt;Lancez le &quot;configure&quot; en précisant dans l'option votre répertoire d'installation&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
./configure --prefix=/usr/local/dkfilter
&lt;/pre&gt;


&lt;p&gt;Installez&lt;/p&gt;

&lt;pre&gt;
make install
&lt;/pre&gt;


&lt;p&gt;Si il n'y a pas d'erreur, vous pouvez continuer. Vous devez voir dans /usr/local/dkfilter, un dossier lib/ et un dossier bin/&lt;/p&gt;

&lt;pre&gt;
ls -l /usr/local/dkfilter
&lt;/pre&gt;


&lt;h2&gt;Créer l'utilisateur et le groupe dkfilter&lt;/h2&gt;

&lt;pre&gt;
adduser dkfilter --no-create-home --disabled-password --disabled-login
&lt;/pre&gt;


&lt;h2&gt;Installer le script de démarrage de dkfilter&lt;/h2&gt;


&lt;p&gt;Un script d'exemple est fourni dans l'archive de dkfilter. On le copie dans /etc/init.d/.&lt;/p&gt;

&lt;pre&gt;
cp /usr/scr/dkfilter-0.11/sample-dkfilter-init-script.sh /etc/init.d/dkfilter
&lt;/pre&gt;


&lt;p&gt;Il faut ensuite modifier le script pour l'adapter à votre configuration et au patch de gestion multi-domaines. On édite donc le script.&lt;/p&gt;

&lt;pre&gt;
vi /etc/init.d/dkfilter
&lt;/pre&gt;


&lt;p&gt;Voici la partie modifiée du fichier&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
...
DKFILTERUSER=dkfilter
DKFILTERGROUP=dkfilter
DKFILTERDIR=/usr/local/dkfilter

HOSTNAME=`hostname -f`
DOMAIN=`hostname -d`
DKFILTER_IN_ARGS=&amp;quot;
    --hostname=$HOSTNAME
    127.0.0.1:12025 127.0.0.1:12026&amp;quot;
DKFILTER_OUT_ARGS=&amp;quot;
        --configfile=/etc/dkfilter.conf
    --headers
    127.0.0.1:12027 127.0.0.1:12028&amp;quot;
...
&lt;/pre&gt;


&lt;p&gt;Soyez vigilant sur&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;les ports de dkfilter.ini (vérification des signatures des mails entrants)&lt;/li&gt;
&lt;li&gt;les ports de dkfilter.out (signature des mails sortants)&lt;/li&gt;
&lt;li&gt;le chemin vers le fichier de configuration.&lt;/li&gt;
&lt;li&gt;le groupe et l'utilisateur dkfilter créés précédemment&lt;/li&gt;
&lt;li&gt;la modification de l'argument --configfile pour prendre en compte votre fichier de configuration qui sera créé plus bas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Créer une clé publique/privée&lt;/h2&gt;


&lt;p&gt;Chaque domaine possèdera sa propre clé. On crée un dossier dans lequel on stockera les clés.&lt;/p&gt;

&lt;pre&gt;
mkdir /urs/local/dkfilter/keys
cd /urs/local/dkfilter/keys
&lt;/pre&gt;


&lt;p&gt;&lt;em&gt;On suppose que vous avez le paquet openssl installé et que votre domaine est exemple.tld&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;La clé privée&lt;/p&gt;

&lt;pre&gt;
openssl genrsa -out exempletld.key 1024
&lt;/pre&gt;


&lt;p&gt;La clé publique&lt;/p&gt;

&lt;pre&gt;
openssl rsa -in exempletld.key -pubout -out exempletld_pub.key
&lt;/pre&gt;


&lt;p&gt;Changer les droits sur la clé privée pour la rendre uniquement accessible à l'utilisateur dkfilter&lt;/p&gt;

&lt;pre&gt;
chown dkfilter; exempletld.key
chmod 640 exempletld.key
&lt;/pre&gt;


&lt;h2&gt;Ajouter l'enregistrement TXT à la zone DNS&lt;/h2&gt;


&lt;p&gt;Une fois la clé générée, il va falloir ajouter un enregistrement TXT à la zone de chaque domaine. Prenons l'exemple du domaine exemple.tld&lt;/p&gt;


&lt;p&gt;On édite le fichier de zone &lt;em&gt;/var/cache/bind/exemple.tld.hosts&lt;/em&gt; et on ajoute l'enregistrement TXT suivant. La valeur de &quot;p=&quot; correspond à la clé publique sur une seule ligne.  Notez également le nom exempletld qui sera utile pour la suite (nous l'appellerons &quot;selecteur&quot;).&lt;/p&gt;

&lt;pre&gt;
; DomainKeys
_domainkey.exemple.tld.            IN TXT  &amp;quot;t=y; o=-;&amp;quot;
exempletld._domainkey.exemple.tld.    IN TXT  &amp;quot;g=; k=rsa; p=ici_la_cle_publique_hyper_longue;&amp;quot;
&lt;/pre&gt;


&lt;p&gt;N'oubliez pas d'incrémenter le numéro de série de votre zone pour que les changements soient pris en compte et relancer bind&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/bind9 restart
&lt;/pre&gt;


&lt;p&gt;Vous pouvez vérifier la bonne configuration de votre zone sur le site officiel de DomainKeys&amp;nbsp;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://domainkeys.sourceforge.net/selectorcheck.html&quot; hreflang=&quot;en&quot;&gt;testez avec le nom du sélecteur&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://domainkeys.sourceforge.net/policycheck.html&quot; hreflang=&quot;en&quot;&gt;testez l'implémentation de DomainKeys sur la zone&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Créer le fichier de configuration de dkfilter&lt;/h2&gt;


&lt;p&gt;Il faut maintenant créer le fichier de configuration qu'utilisera dkfilter au démarrage du service dans &lt;em&gt;/ect/dkfilter.conf&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
# ------------------------------------------
# exemple.tdl
[domain]
name        = exemple.tdl
method      = simple
selector    = exempletld
private_key = /usr/local/dkfilter/keys/exempletld.key
&lt;/pre&gt;


&lt;p&gt;La ligne &lt;em&gt;selector&lt;/em&gt; correspond au sélecteur indiqué dans la zone.&lt;/p&gt;


&lt;h2&gt;Lancer dkfilter&lt;/h2&gt;


&lt;p&gt;Avant d'envisager la configuration de Postfix, il faut vérifier que dkfilter se lance correctement&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/dkfilter start
&lt;/pre&gt;


&lt;p&gt;Si il n'y a pas d'erreur on vérifie que le service est fonctionnel&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
ps aux | grep dkfilter
&lt;/pre&gt;


&lt;p&gt;Il doit y avoir des lignes avec dkfilter.in et des lignes avec dkfilter.out. Vérifier également que les options sont correctes. Notamment l'appel au fichier de configuration.&lt;/p&gt;


&lt;p&gt;Maintenant que la zone est modifié, dkfilter installé et fonctionnel, nous pouvons enfin passer à la configuration de postfix.&lt;/p&gt;


&lt;h2&gt;Configurer de Postfix&lt;/h2&gt;


&lt;p&gt;Dans ma configuration, avant l'installation de DomainKeys, j'utilise déjà Amavisd-new pour le filtrage antivirus (clamav) et antispam (spamassassin et dspam).&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Edit le 25 février&lt;/strong&gt;&amp;nbsp;: &lt;em&gt;on me demande comment s'effectue la vérification de la signature des mails entrants dans ma configuration. C'est en fait Amavis via SpamAssassin et l'intégration du module CPAN Mail::Dkim qui effectue cette vérification. Si vous utilisez déjà SpamAssassin via Amavis, Il suffit d'activer et de configurer le module DKIM dans le fichier /etc/spamassassin/v312.pre. On peux donc, dans ce cas, se poser la question de l&quot;utilité de lancer également le process dkfilter.in dans cette configuration...&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;J'ajoute donc dkfilter dans le process avant l'analyse par Amavis.&lt;/p&gt;


&lt;p&gt;Dans le main.cf, je remplace&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
content_filter = amavis:[127.0.0.1]:10024
&lt;/pre&gt;


&lt;p&gt;par&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
 content_filter = dksign:[127.0.0.1]:12027
&lt;/pre&gt;


&lt;p&gt;[Je ne sais pas pourquoi mais si je ne précise pas le content_filter dans le main.cf, les mails envoyés par des process locaux (par exemple, la fonction &lt;em&gt;mail&lt;/em&gt; de PHP) ne passe pas par amavis et dkfilter]&lt;/p&gt;


&lt;p&gt;Dans le master.cf, voici la configuration&amp;nbsp;:&lt;/p&gt;


&lt;p&gt;Au début du fichier&lt;/p&gt;

&lt;pre&gt;
# relayer sur dksign sur le port 10028
smtp      inet  n       -       -       -       200     smtpd
        -o receive_override_options=no_address_mappings
        -o content_filter=dksign:[127.0.0.1]:12027

# Le smtp securise SSL
smtps     inet  n       -       -       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o content_filter=dksign:[127.0.0.1]:12027
  -o receive_override_options=no_address_mappings
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

# envoyer directement a dksign
submission  inet  n     -       n       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o content_filter=dksign:[127.0.0.1]:12027
    -o receive_override_options=no_address_mappings
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
    #-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
&lt;/pre&gt;


&lt;p&gt;A la fin&lt;/p&gt;

&lt;pre&gt;
# Pour amavis
amavis  unix    -   -   -   -   20  smtp
        -o smtp_helo_timeout=300 
        -o smtp_data_done_timeout=1200
        -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - - - - smtpd
        -o content_filter=
        -o local_recipient_maps=
        -o relay_recipient_maps=
        -o smtpd_restriction_classes=
        -o smtpd_client_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_sender_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject
        -o mynetworks=127.0.0.0/8
        -o strict_rfc821_envelopes=yes
        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
        -o smtpd_bind_address=127.0.0.1
    -o disable_dns_lookups=yes

#
# signature domainkeys
#
dksign    unix  -       -       n       -       10      smtp
    -o smtp_send_xforward_command=yes
    -o smtp_discard_ehlo_keywords=8bitmime

#
# signature domainkeys
#
127.0.0.1:12028 inet  n  -      n       -       10      smtpd
    -o content_filter=amavis:[127.0.0.1]:10024
    -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
    -o smtpd_helo_restrictions=
    -o smtpd_client_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o smtpd_authorized_xforward_hosts=127.0.0.0/8
&lt;/pre&gt;


&lt;p&gt;Vous pouvez ensuite relancer postfix&lt;/p&gt;

&lt;pre&gt;
/etc/init.d/postfix restart
&lt;/pre&gt;


&lt;h2&gt;Vérifier la signature&lt;/h2&gt;


&lt;p&gt;Envoyez un mail et regardez dans les logs&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
tail -f /var/log/mail.info
&lt;/pre&gt;


&lt;p&gt;Vous devez avoir pour un message envoyé par une adresse de exemple.tld&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DomainKeys signing - signed; from=&amp;lt;yves@exemple.tld&amp;gt;, message-id=...
&lt;/pre&gt;


&lt;p&gt;Pour les autres&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DomainKeys signing - skipped (wrong sender domain); from=&amp;lt;test@autredomain.tld
&lt;/pre&gt;


&lt;p&gt;Vous pouvez également vérifier votre configuration en envoyant un mail à l'adresse&amp;nbsp;: &lt;strong&gt;check-auth ici_le_chez verifier.port25.com&lt;/strong&gt;. Cette sympathique adresse vous renvoi les informations sur l'installation des différents protocoles d'authentification des mails sur votre domaine.&lt;/p&gt;


&lt;p&gt;Vous devez également avoir les informations sur DomainKeys dans l'entête du message signé&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
DomainKey-Signature : a=rsa-sha1; h=Received:Message-ID:Date:From:Organization:User-Agent:MIME-Version:To:Subject:Content-Type:Content-Transfer-Encoding; b=LhoN2HSlL...6mkkDXfIw=; c=simple; d=exemple.tld; q=dns; s=exempletld
&lt;/pre&gt;


&lt;p&gt;Voilà, peut-être que vos messages ne finiront plus dans les spambox ;). n'hésitez pas à me signaler les erreurs présentent dans ce howto.&lt;/p&gt;</description>
    
    
    
          <comments>http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</comments>
      <wfw:comment>http://www.grafactory.net/blog/post/2007/11/04/Installer-DomainKeys-sur-Postfix-Debian-Etch-Amavisd-new#comment-form</wfw:comment>
      <wfw:commentRss>http://www.grafactory.net/blog/feed/rss2/comments/152</wfw:commentRss>
      </item>
    
</channel>
</rss>