Amavisd-new et DKIM

De Le Wiki de debian-fr.xyz
Aller à : navigation, rechercher

Je vous propose ici un tutoriel pour signer vos mails sortants avec DKIM

Signer ses mails avec DKIM

Définition de DKIM

DKIM (DomainKeys Identified Mail) est une norme d'authentification fiable du nom de domaine de l'expéditeur d'un courrier électronique. Elle constitue une protection efficace contre le spam et l'hameçonnage.

En effet, DKIM fonctionne par signature cryptographique du corps du message et d'une partie de ses en-têtes. Une signature DKIM vérifie donc l'authenticité du domaine expéditeur et garantit l'intégrité du message.

Cette technologie a été normalisée par l'IETF dans le RFC 4871.

Source: Wikipedia

Création de la clef

Nous créons le répertoire qui va recevoir la clef:

# mkdir /var/db && mkdir /var/db/dkim/

Nous générons la clef avec l'outil inclut dans amavisd-new

# amavisd-new genrsa /var/db/dkim/domaine.tld.pem
Private RSA key successfully written to file "/var/db/dkim/domaine.tld.pem" (1024 bits, PEM format) 

Rendez Amavis propriétaire de ce fichier:

chown -R amavis:amavis /var/db/dkim/ && chmod -R 700 /var/db/dkim/

Déclaration de la clef dans amavisd-new

# $editor /etc/amavis/conf.d/50-user
$interface_policy{'10024'} = 'DKIM_ALWAYS';
$policy_bank{'DKIM_ALWAYS'} = {
originating => 1,
};

$enable_dkim_verification = 1;
$enable_dkim_signing = 1;
 dkim_key('domaine.tld', 'mail', '/var/db/dkim/domaine.tld.pem');
 @dkim_signature_options_bysender_maps = (
  { '.' => { ttl => 21*24*3600, c => 'relaxed/simple' } } );
  @mynetworks = qw(ip/32 ip/32 127.0.0.0/8 ipv6/64 ::1/128 0.0.0.0/8);  # list your internal networks

La première partie (policy_bank) à été ajoutée pour forcer la signature DKIM de tous les mails sortants (c'est utile en cas d'erreur dans les logs de amavis:

dkim: not signing mail which is not originating from inside

Le seconde partie est la déclaration de la clef elle même. A changer: le nom de la clef, et votre réseau (liste de votre réseau)

Vérification de la déclaration dans amavis

# amavisd-new showkeys
; key#1, domain domaine.tld, /var/db/dkim/domaine.tld.pem
mail._domainkey.domaine.tld.	3600 TXT (
  "v=DKIM1; p="
  "xXxXxXxXxXqGSIb3DQEBAQUAA4GNADCBiQKBgQCzeoq0Dx9yBJDu7e+KOefOhEQ8"
  "mTqglSIRjSWxXxXxXxXxXyYyYymw7Q2mI+5n1whYWsmwT1oSijix5WYdo9l/OAEL"
  "0KtGAL322tqkSYudxXxXxXxXxXYyYyYfYJOtblAPUZ4JP/L3tUddFTTmuPXjGrNl"
  "Ww0U0oxXxXxXxXxXh+kZ2rxXxXxXxXxX")

Déclaration dans votre DNS (Bind9)

Amavis à besoin, pour tester la clef, que celle-ce soit déclarée dans votre DNS; Voici la configuration pour Bind9: Recopiez les lignes suivantes ans votre fichier de zone (la clef doit être recopiée sans espaces et sans guillemets).

/etc/bind/pri.domaine.tld
; DKIM
_domainkey.domaine.tld.        IN TXT  "t=y; o=-;"
mail._domainkey.domaine.tld.   IN TXT "k=rsa; t=s; p=votre_clef_super_longue_sans_guillemetsuPXjGrNlWw0U0oxXxXxXxXxXh+kZ2rxXxXxXxXxX"

Vous devriez maintenant être capable de tester la clef:

# amavisd-new testkeys
TESTING#1: mail._domainkey.domaine.tld      => pass

Si vous ne passez pas ce test, inutile d'aller plus loin, revérifiez votre configuration...

# amavisd-new testkeys
TESTING#1: mail._domainkey.domaine.tld      => invalid (public key: not available)

Déclaration dans votre DNS Externe

Si vous n'utilisez Bind9 que pour votre serveur et que votre DNS est géré par quelqu'un d'autre (votre Registrar par exemple) il faut déclarer la clef là-bas Voici un exemple dans le "manager de OVH":

Il suffit de créer une zone DKIM (ou tout simplement une zone texte), avec les infos suivantes:

v=DKIM1;
p=votre_clef_super_longue_sans_guillemets

Dkim ovh 1.jpeg

Dkim ovh 2.jpeg

Dkim ovh 3.jpeg

Vérifiez le bon fonctionnement avec service.dkim-reputation.org

Il existe un site en ligne qui propose de vérifier pour vous le bon fonctionnement de DKIM: service.dkim-reputation.org Enregistrez un compte, créez une boite mail spécialement pour la vérification (par ex dkim@domaine.tld) sur votre serveur mail, et testez!

Dkim-reputation.jpeg

Voir aussi: OpenDkim

Lol (discussion) 15 novembre 2012 à 15:47 (CET)