Mise en place d'un relais Postfix utilisant DKIM

Dans cet article nous allons voir comment mettre en place un relais de messagerie Postfix qui va signer les mails avec DKIM. Cela a pour but de prouver la provenance de vos Emails.

Comment fonctionne DKIM ?

DKIM fonctionne avec une clé publique et une clé privé. La clé publique est ajouté dans un champ TXT ou DKIM sur votre nom de domaine et donc accessible de tous. Tous les messages envoyés seront signés numériquement par votre serveur de messagerie en utilisant la clé privé. Lors de la réception d'un email, le serveur pourra vérifié la signature numérique via la clé publique et validé sa provenance.

Mise en place

Dans mon exemple, j'utilise une machine virtuelle vierge tournant sous Debian. Je souhaite signé numériquement les mails en provenance du domaine adminpasbete.fr. Les serveurs utilisant le relais Postfix ont pour IP : 192.168.100.1 et 192.168.100.11

1) Installation des paquets nécessaire

# apt-get install opendkim opendkim-tools postfix

Lors de l'installation des paquets, inutile de procéder à la configuration de Postfix, nous remplaceront l’intégralité de la configuration

2) Editer la configuration de Postfix et remplacer tout le contenu par cette configuration

# nano /etc/postfix/main.cf
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = SRV-DKIM.adminpasbete.fr
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = 
relayhost = smtp.sfr.fr:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.100.1 192.168.100.11
mailbox_size_limit = 0
recipient_delimiter = +
smtpd_sasl_security_options =
smtpd_recipient_restrictions = permit_mynetworks permit_inet_interfaces

milter_protocol = 6
milter_default_action = accept
smtpd_milters = unix:/opendkim/opendkim.sock
non_smtpd_milters = unix:/opendkim/opendkim.sock

Il est peut être nécessaire d'adapter la configuration suivant votre environnement (relais externe,  IP autorisé à utiliser le serveur Postfix...)

Pour ajouter une authentification sur le serveur SMTP distant, ajouter les lignes suivantes à /etc/postfix/main.cf

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous

Créer le fichier /etc/postfix/sasl/sasl_passwd et le remplir de la façon suivante :

# nano/etc/postfix/sasl/sasl_passwd

smtp.sfr.fr:587       moncompte@sfr.fr:PASSWORD

Création du hash pour postfix

# cd /etc/postfix/sasl
# postmap sasl_passwd

Vérifier la présence d'un nouveau fichier sasl_passwd.db

# ls

3) Création du répertoire stockant le socket de opendkim

# mkdir -p /var/spool/postfix/opendkim
# chown opendkim:opendkim /var/spool/postfix/opendkim/
# usermod -a -G opendkim postfix

4) Configuration de opendkim

# nano /etc/opendkim.conf
OversignHeaders From
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes

Canonicalization relaxed/simple

ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable

Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256

UserID opendkim:opendkim

Socket local:/var/spool/postfix/opendkim/opendkim.sock

5) Configuration des serveurs autorisé à utiliser opendkim

# nano /etc/opendkim/TrustedHosts
127.0.0.1
192.168.100.4
localhost

192.168.100.1
192.168.100.11

Modifier les IPs mise en rouge suivant votre environnement

6) Création du fichier SigningTable. Ce fichier est utilisé pour déclarer les domaines / adresses électroniques et leurs sélecteurs

# nano /etc/opendkim/SigningTable
*@adminpasbete.fr mail._domainkey.adminpasbete.fr

Vous pouvez indiquer plusieurs nom de domaine

7) Création du fichier KeyTable. Ce fichier indique chaque paire de sélecteur / domaine et le chemin d'accès à leur clé privée

# nano /etc/opendkim/KeyTable
mail._domainkey.adminpasbete.fr adminpasbete.fr:mail:/etc/opendkim/keys/adminpasbete.fr/mail.private

8) Création de ou des clés privé pour votre ou vos domaines

# cd /etc/opendkim/keys
# mkdir adminpasbete.fr
# cd adminpasbete.fr/
# opendkim-genkey -s mail -d adminpasbete.fr
# chown opendkim:opendkim mail.private

Vous obtenez deux fichiers :
- mail.private : Contient votre clé privée (fichier à ne surtout pas divulguer)
- mail.txt : Contient votre clé publique

Il est nécessaire d'ajouter votre clé publique à votre zone DNS. Le fichier mail.txt contient l'enregistrement TXT à ajouter.

Cette étape est à répéter autant de fois que vous avez de nom de domaine

9) Redémarrer les services Postfix et Opendkim

/etc/init.d/postfix restart/etc/init.d/opendkim restart

10) Ajouter dans votre zone DNS le nom DNS de votre relais Postfix et son IP externe.
La valeur à renseigner est la variable myhostname du fichier /etc/postfix/main.cf (ici  SRV-DKIM.adminpasbete.fr)

11) Indiquer sur vos serveurs de messagerie votre relais (votre serveur DKIM), dans mon cas, les serveur 192.168.100.1 et 192.168.100.11. Il n'y a pas d'authentification à indiquer, postfix/opendkim va filtrer sur les IP renseignées dans la configuration

Vous pouvez vérifier les logs de votre serveur Postfix pour valider que vous signez bien vos emails

# tail -f /var/log/mail.info
Dec 21 13:36:54 SRV-DKIM postfix/smtpd[31384]: connect from unknown[192.168.100.11]
Dec 21 13:36:56 SRV-DKIM postfix/smtpd[31384]: 5506B240301: client=unknown[192.168.100.11]
Dec 21 13:36:56 SRV-DKIM postfix/cleanup[31387]: 5506B240301: message-id=<2feb74edf10e480ebb9b8bdaacd4bae9@SRV-EXCH.apb.local>
Dec 21 13:36:56 SRV-DKIM opendkim[31360]: 5506B240301: DKIM-Signature field added (s=mail, d=adminpasbete.fr)
Dec 21 13:36:56 SRV-DKIM postfix/smtpd[31384]: disconnect from unknown[192.168.100.11]

Vous pouvez tester votre signature en envoyant un email sur une adresse Gmail

Finalement, en affichant l'original de l'email, vous pouvez constaté l'ajout de la signature DKIM

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=adminpasbete.fr; s=mail; t=1482323816; bh=UXL7pz1jTWHBsQnlWPO6i7rVkHN0CEIJj+

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *