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+