DKIM SPF Postfix
Installation d'une politique de sécurité des emails avec OpenDKIM et SPF
Il devient de plus en plus difficile de délivrer des emails convenablement auprès de ses contacts sans passer par la boite de spam lorsqu'on gère son propre MX. Avant, nous avions une politique de filtre de spam avec des filtres et des listes privées ou publiques. Puis est apparu SPF (Sender Policy Framework) et par la suite DKIM (DomainKeys Identified Mail). D'autres vont venir par la suite, n'en doutant pas...
Nous allons définir les deux les plus connus: DKIM et SPF.
SPF est relativement simple à mettre en activité, il suffit d'une entrée dans le DNS; Pour DKIM, c'est un peu plus compliqué, il faut un service tiers pour le serveur de mail (postfix, sendmail, opensmtpd, etc..), une clef privée et publique et une entrée DNS.
Voyons cela étape par étape:
Installation et configuration d'OpenDKIM
Selon Wikipedia: « 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. »
DKIM est utilisé par plusieurs opérateurs de messagerie, comme Google. Elle permet de filtrer les emails valides (ou plutôt les serveurs de mails envoyeurs). Un peu plus complexe que SPF, elle se trouve facilité avec l'outil OpenDKIM.
Installation
Sous Debian/Ubuntu :
Si vous êtes sous RedHat ou CentOS, vous trouverez aussi le package. D'une manière générale, installez le paquet de votre distribution suivant la méthode habituelle.
En cas de doute, reportez-vous au site d'OpenDKIM : http://opendkim.org.
Génération des clefs publiques/privées
Nous allons préparer le répertoire opendkim. Par défaut, le package opendkim sous debian/ubuntu installe le fichier de configuration dans /etc.
mkdir -p /etc/opendkim/ mv /etc/opendkim.conf /etc/opendkim/ ln -s /etc/opendkim/opendkim.conf /etc/opendkim.conf
Nous allons maintenant générer les clefs qui va être utiliser pour OpenDKIM et votre serveur DNS:
openssl genrsa -out /etc/opendkim/opendkim.key 1024 openssl rsa -in /etc/opendkim/opendkim.key -pubout -out /etc/opendkim/opendkim.pub.key chmod "u=rw,o=,g=" /etc/opendkim/opendkim.key chown opendkim:opendkim /etc/opendkim/opendkim.key
Configuration d'OpenDKIM
Editez le fichier /etc/opendkim/opendkim.conf
# This is a basic configuration that can easily be adapted to suit a standard # installation. For more advanced options, see opendkim.conf(5) and/or # /usr/share/doc/opendkim/examples/opendkim.conf.sample. # Log to syslog Syslog yes SyslogSuccess yes LogWhy yes # Required to use local socket with MTAs that access the socket as a non- # privileged user (e.g. Postfix) UMask 002 # Sign for example.com with key in /etc/mail/dkim.key using # selector '2007' (e.g. 2007._domainkey.example.com) Domain lea-linux.org KeyFile /etc/opendkim/opendkim.key Selector dkim # Commonly-used options; the commented-out versions show the defaults. Canonicalization simple Mode sv #SubDomains no #ADSPDiscard no X-Header yes # Always oversign From (sign using actual From and a null From to prevent # malicious signatures header fields (From and/or others) between the signer # and the verifier. From is oversigned by default in the Debian pacakge # because it is often the identity key used by reputation systems and thus # somewhat security sensitive. OversignHeaders From # List domains to use for RFC 6541 DKIM Authorized Third-Party Signatures # (ATPS) (experimental) #ATPSDomains example.com Socket inet:12345@localhost # Our KeyTable and SigningTable KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable # Trusted Hosts ExternalIgnoreList /etc/opendkim/TrustedHosts InternalHosts /etc/opendkim/TrustedHosts
Informations:
L'option "Mode" permet de définir la vérification (v) et la signature des emails (s). Gardez cette option si vous voulez avoir une vérification et un ajout de header DKIM valide et utile pour les autres fournisseurs de messagerie.
Edition du fichier /etc/default/opendkim
Petite édition du fichier /etc/default/opendkim, nous allons définir la socket:
# Command-line options specified here will override the contents of # /etc/opendkim.conf. See opendkim(8) for a complete list of options. #DAEMON_OPTS="" # # Uncomment to specify an alternate socket # Note that setting this will override any Socket value in opendkim.conf #SOCKET="local:/var/run/opendkim/opendkim.sock" # default #SOCKET="inet:54321" # listen on all interfaces on port 54321 SOCKET="inet:12345@localhost" # listen on loopback on port 12345 #SOCKET="inet:12345@192.0.2.1" # listen on 192.0.2.1 on port 12345
Effectuons un point sur les fichiers présents (ou non) dans votre répertoire /etc/opendkim/:
- opendkim.conf
- opendkim.key
- opendkim.pub.key
- KeyTable
- SigningTable
- TrustedHosts
Les fichiers vous manquant doivent être *KeyTable*, *SigningTable* et *TrustedHosts*. Ne vous inquiétez pas, nous allons maintenant les créer:
KeyTable
Tips: Le selector est le nom défini à la variable "Selector" dans opendkim.conf
# nom de domaine nom de domaine selector fichier clef priv lea-linux.org lea-linux.org:dkim:/etc/opendkim/opendkim.key autre-domaine.fr autre-domaine.fr:dkim:/etc/opendkim/opendkim.key
SigningTable
*@lea-linux.org lea-linux.org *@autre-domaine.fr autre-domaine.fr
TrustedHosts
127.0.0.1 localhost lea-linux.org mail.lea-linux.org mx.autre-domaine.fr mail-sortie.autre-domaine.fr
Modification de Postfix
Nous allons rajouter maintenant les quelques lignes pour prendre en compte OpenDKIM lors de l'envoi et la réception des emails:
Dans /etc/postfix/main.cf :
milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:localhost:12345 non_smtpd_milters = inet:localhost:12345
Modification des DNS
Pour finaliser l'installation d'OpenDKIM et de SPF, il faut maintenant se tourner vers nos DNS. Pour l'exemple ci-dessous, nous nous sommes basés sur l'interface Gandi. Avec un DNS, type Bind9, c'est pratiquement pareil.
N'oubliez pas que la référence à "dkim" dans "dkim._domainkey" est le nom défini dans le fichier de configuration "opendkim.conf" à la variable "Selector". Ne vous trompez pas.
Définissez l'adresse IP de votre MX de sortie à la place de "<MON-IPADDR-DE-SORTIE-MX>" (Attention, si vous avez plusieurs IP sur votre serveur, l'IP a définir ici est celle qui est sur la patte externe, ou dit plus directement: ce sera l'IP visible par les autres MX. Si vous n'avez qu'une adresse IP, oubliez ce message :)
Définissez "p=" avec votre clef publique qui se trouve dans /etc/opendkim/opendkim.pub.key. Ne prenez que le contenu entre "-----BEGIN PUBLIC KEY-----" et "-----END PUBLIC KEY-----" et mettez le tout sur une ligne. Puis intégrez-là dans votre entrée DNS dédiée.
Notez que vous pouvez utiliser l'outil "opendkim-genkey" (package opendkim-tools) pour générer la clef et un fichier comprenant le code DNS déjà tout intégré (opendkim-genkey -t -s dkim -d lea-linux.org)
Voici un extrait des entrées DNS :
mail 1000 IN A <MON-IPADDR-DE-SORTIE-MX> @ 10800 IN MX 10 mail @ 10800 IN SPF "v=spf1 a ip4:<MON-IPADDR-DE-SORTIE-MX> mx include:_spf.google.com ?all" @ 10800 IN TXT "v=spf1 a ip4:<MON-IPADDR-DE-SORTIE-MX> mx include:_spf.google.com ?all" dkim._domainkey 1000 IN TXT "v=DKIM1; k=rsa; t=y; p=<VOTRE CLEF OPENDKIM __PUBLIQUE__>;"
Pour résumer la ligne SPF: Nous définissons que l'ip4 défini, les MX du domaine et la liste spf de google sont valides pour ce domaine.
SPF est assez complexe, il faudrait un tutoriel rien que pour lui, nous vous conseillons de lire les documentations conseillées à ce sujet:
- http://www.elao.com/fr/blog/syntaxe-des-enregistrement-spf-sender-privacy-framework
- http://guides.ovh.com/DomainesChampSPF
- https://wiki.gandi.net/fr/dns/zone/spf-record
Sauvegardez le tout, redémarrez les services postfix et opendkim. Nous allons maintenant effectuer des tests.
Tests DNS
Vérifions si nos entrées sont bien prises en compte :
Vérifications DKIM :
$ dig dkim._domainkey.lea-linux.org TXT | grep ^dkim dkim._domainkey.lea-linux.org. 990 IN TXT "k=rsa\; p=****************************************************************\;"
Vérifications SPF:
$ dig lea-linux.org TXT |grep spf lea-linux.org. 686 IN TXT "v=spf1 a ip4:********** mx include:_spf.google.com ?all" $ dig lea-linux.org SPF lea-linux.org. 10800 IN SPF "v=spf1 a ip4:********** mx include:_spf.google.com ?all"
Si vous voyez ces entrées, c'est que tout se passe bien.
Note: Chez un prestataire comme Gandi, la prise en compte des modifications peut prendre du temps. Si au bout de 2h, il ne se passe toujours rien, revenez sur l'interface de votre prestataire et vérifiez si vous n'avez pas oublié un détail.
Pour tester SPF et DKIM
Il existe quelques outils en ligne pouvant vous aider à valider votre nouvelle configuration, voici les principaux et très utiles:
- Vérificateur DNS et SPF: http://www.kitterman.com/spf/validate.html
- Vérification SPF et DKIM via vos emails: https://www.mail-tester.com: Prenez l'email généré et envoyez un email à cette adresse.
- Très utile: envoyez un email à check-auth@verifier.port25.com: Vous recevrez un email de report pour corriger les problèmes.
Et si vous envoyez un mail depuis votre serveur vers une adresse externe (gmail par exemple), regardez les headers, vous verrez :
Received-SPF: pass (google.com: domain of votremail@votredomaine designates votre_ip_serveur_mx as permitted sender) client-ip=votre_ip_serveur_mx; Authentication-Results: mx.google.com; spf=pass (google.com: domain of votreemail@votredomaine designates votre_ip_serveur_mx as permitted sender) smtp.mail=votreemail@votredomaine; dkim=pass header.i=@votredomaine X-DKIM: OpenDKIM Filter v2.6.8 votredomaine 2310FDC8FED DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=votredomaine; s=dkim; t=1428582153; bh=**********************************=; h=Date:From:To:Subject:From; b=*****************************************************************=
Si vous passez par mail-tester.com, vous devriez voir ce magnifique message :
Félicitations et bienvenue dans le monde authentifié des mails :-)
Note:
Vous remarquez peut-être la ligne "Vous n'êtes pas parfaitement authentifié".
C'est parce que nous n'avons pas défini de paramètre pour DMARC. Ce n'est pas très grave. Si vous voulez être (presque) parfait, vous pouvez rajouter, en attendant, dans vos DNS.:
_dmarc 1000 IN TXT "v=DMARC1; p=none"
Cela désactivera les vérifications DMARC.
Update:
Si vous recevez un mail de Outlook.com (live.com, hotmail.com, ...) pour vous indiquer que l'adresse IP de votre serveur se trouve dans leur blacklist, utilisez cette adresse: Support MX Outlook.com et remplissez le formulaire avec le plus d'informations possibles. Vous aurez une réponse d'ici quelques heures et si cela est positif un deblacklistage "modéré".
Sécurité TLS/SSL renforcée
Pour rajouter (un peu) en sécurité :
# Paramètre TLS smtp_use_tls = yes smtpd_use_tls = yes smtp_tls_note_starttls_offer = yes smtpd_tls_security_level = may smtpd_tls_auth_only = no smtpd_tls_loglevel = 6 smtpd_tls_received_header = yes smtpd_tls_auth_only = yes smtp_tls_note_starttls_offer = yes tls_random_source = dev:/dev/urandom smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # Certificat et clé (possibilité de rajouter avec CA pour plus de sécurité) smtpd_enforce_tls = no smtpd_tls_loglevel = 2 smtpd_use_tls = yes smtpd_tls_key_file = /etc/postfix/ssl/postfix.key smtpd_tls_cert_file = /etc/postfix/ssl/postfix.crt
Il ne vous reste plus qu'à vérifier avec STARTTLS.info
Note très importante concernant la 'Désactivation de certains algorithmes': Comme le faisait remarquer [Aeris] sur Twitter, le fait de désactiver certains ciphers risquent de provoquer des fallbacks et vos données passeront en clair par défaut. La dernière partie - Désactivation de certains algorithmes ou procédés - est donc à prendre avec des pincettes, voire à ne pas appliquer si vous ne savez pas ce que vous faites ou bien vous ayez un doute, même minime.
A lire dans la documentation Postfix à ce sujet: [Opportunistic TLS]
@ Retour à la rubrique Réseau et sécurité
Copyright
© 2015 Léa-Linux
![]() ![]() ![]() |
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique 4.0 : https://creativecommons.org/licenses/by-sa/4.0/ |