Opendkim multidomaines

Création de l'utilisateur et de son environnement de travail

# pw useradd -n opendkim -g mail -c " Virtual Account dkim" -s /usr/sbin/nologin -d /var/db/opendkim -w no -m

Lancer le service automatiquement au démarrage du serveur avec le compte utilisateur qui vient d'être créer.

# echo 'milteropendkim_enable="YES"' >> /etc/rc.conf
# echo 'milteropendkim_uid="opendkim"' >> /etc/rc.conf

Intégration du service dans postfix

/usr/local/etc/postfix/main.cf
----------------------- smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters milter_default_action = accept -----------------------

Générer des clés pour la signature

Générer une clé privée et une clé publique pour chacun des domaines avec lesquels il est souhaité de signer du courrier électronique. La clé privée sera stockée à l'abri des regards indiscrets sur le serveur, tandis que la clé publique sera publiée dans les enregistrements DNS du domaine de telle sorte que les serveurs de messagerie de réception puissent vérifier le courrier DKIM-signé.

Avant d'exécuter ce script, choisir un nom pour le sélecteur. Un sélecteur est un mot-clé unique qui est associé aux deux clés (publique et privée), inclus dans toutes les signatures, et publié dans les enregistrements DNS.

Pour plus de simplicité, utiliser le mot "default" comme sélecteur par défaut.
Ne pas hésiter à choisir un mot différent, tout en sachant qu'il y aura besoin d'adapter de manière cohérente les modifications à l'exemple ci-dessous ainsi qu' utiliser le nom de domaine de messagerie défini au lieu de "example.com".

Créer une clé pour un domaine
Dans cet exemple, les options sont : -D (répertoire), -d (domaine), et -s (sélecteur).

# mkdir -p /var/db/opendkim/keys/example.com
# opendkim-genkey -D /var/db/opendkim/keys/example.com/ -d example.com -s default
# chown -R opendkim:mail /var/db/opendkim/keys/example.com
# mv /var/db/opendkim/keys/example.com/default.private /var/db/opendkim/keys/example.com/default

Il est nécessaire de créer et d'éditer ces quatre fichiers :
    • /usr/local/etc/opendkim.conf – OpenDKIM’s main configuration file
      /var/db/opendkim/KeyTable – a list of keys available for signing
      /var/db/opendkim/SigningTable - a list of domains and accounts allowed to sign
      /var/db/opendkim/TrustedHosts – a list of servers to “trust” when signing or verifying
  • Utiliser le sample du fichier de configuration pour OpenDKIM :

    # cp /usr/local/share/doc/opendkim/opendkim.conf.simple /usr/local/etc/opendkim.conf

    Editer le fichier de configuration, en modifiant les options ci-dessous et en conservant celles définies par défaut.

    /usr/local/etc/opendkim.conf
    ----------------------- Canonicalization relaxed/relaxed ExternalIgnoreList refile:/var/db/opendkim/TrustedHosts InternalHosts refile:/var/db/opendkim/TrustedHosts KeyTable refile:/var/db/opendkim/KeyTable LogWhy Yes ReportAddress "DKIM Error Postmaster" <Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.> Selector my-selector-name SigningTable refile:/var/db/opendkim/SigningTable Socket inet:8891@localhost Syslog Yes SyslogSuccess Yes TemporaryDirectory /var/tmp -----------------------

    Editer les trois fichiers qui sont mentionnés dans le fichier de configuration principal

    /var/db/opendkim/KeyTable
    default._domainkey.example.com example.com:default:/var/db/opendkim/keys/example.com/default.private default._domainkey.domain.tld domain.tld:default:/var/db/opendkim/keys/domain.tld/default.private

    Chaque entrée dans ce fichier est une ligne unique représentant un domaine associé à une clé ayant comme sélecteur le mot "default". S' il est nécessaire d'utiliser plusieurs clés (pour signer du courrier pour des domaines virtuels, par exemple), il faudra créer une ligne distincte par domaine.

    /var/db/opendkim/SigningTable
    *@example.com default._domainkey.example.com *@domain.tld default._domainkey.domain.tld

    Dans l'exemple ci-dessus, tout le monde (*) envoie les messages à partir du serveur "example.com", utilise le sélecteur nommé "default"". Il est important de noter que le symbole * générique ne fonctionnera que si les utilisations d'options "SigningTable refile:" préfixe avant le nom du fichier (voir la documentation de opendkim.conf pour plus de détails).

    /var/db/opendkim/TrustedHosts
    127.0.0.1 smtp.example.com mail.example.com example.com imap.domain.tld domain.tld

    La directive ExternalIgnoreList liste les hôtes à ignorer pour OpenDKIM lors de la vérification du courrier entrant.
    La directive InternalHosts indique les hôtes qui seront considérés comme "internes", et OpenDKIM signera leurs courriers sortants.

    Attribuer les droits sur le répertoire

    # chown -R opendkim:mail /var/db/opendkim
    # chmod -R go-wrx /var/db/opendkim/keys

    Configurer la zone DNS pour pouvoir signer le courrier

    # cat /var/db/opendkim/keys/example.com/default.txt
    default._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
    	  "p=MIGfMA0GCSqGSIb3DQEBAQUBB4GNADCBiQKBgQDGNPG4nNOHRAN2WWsX481tqOsHOYAbfdHpAqF7WRXrTelG6eTcgPIiPrTP5adNQC3MwNS/WRNdGhsBiAQiLZ1/rU7M0QP/I5m25iO/ZOtWMF9rHTNcjvsbfkgHlDHXUTe3M3e39eWiJh/z+Mj0/DAThAAIYVSrqQFxRw/zo38OhQIDAQAB" )  ; ----- DKIM key default for example.com
    

    Ajouter au fichier de configuration dans la zone du domaine les lignes figurant ci-dessous :

    _adsp._domainkey          IN TXT    "dkim=unknown"
    default._domainkey	IN	TXT	"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUBB4GNADCBiQKBgQDGNPG4nNOHRAN2WWsX481tqOsHOYAbfdHpAqF7WRXrTelG6eTcgPIiPrTP5adNQC3MwNS/WRNdGhsBiAQiLZ1/rU7M0QP/I5m25iO/ZOtWMF9rHTNcjvsbfkgHlDHXUTe3M3e39eWiJh/z+Mj0/DAThAAIYVSrqQFxRw/zo38OhQIDAQAB"  ; ----- DKIM key default for example.com

    Tester la signature

    # opendkim-testkey -vvv -d example.com -s default -k /var/db/opendkim/keys/example.com/default.private
    opendkim-testkey: using default configfile /usr/local/etc/opendkim.conf
    opendkim-testkey: key loaded from /var/db/opendkim/keys/example.com/default.private
    opendkim-testkey: checking key 'default._domainkey.example.com'
    opendkim-testkey: key not secure
    opendkim-testkey: key OK