Signature DKIM avec Rspamd et Postfix sous Debian Stretch

Pré-requis

Pour cet article nous considérerons que vous disposez :

  • d’un serveur sous debian stretch ;
  • d’un serveur mail postfix opérationnel ;
  • de la possibilité de modifier la zone DNS du domaine concerné ;
  • seul l’aspect signature DKIM sera abordé (et pas l’aspect filtre anti-spam de rspamd).

Rspamd

Installation

Tout d’abord il faut ajouter le dépôt de rspamd dans apt car les versions inclues dans la distribution stretch (et buster et ubuntu) sont obsolètes et déconseillées par rspamd. Créer un fichier /etc/apt/sources.list.d/rspamd.list avec ce contenu :

echo "deb [arch=amd64] http://rspamd.com/apt-stable/ `lsb_release -cs` main" > /etc/apt/sources.list.d/rspamd.list
echo "deb-src [arch=amd64] http://rspamd.com/apt-stable/ `lsb_release -cs` main" >> /etc/apt/sources.list.d/rspamd.list

Ensuite, ajouter la clé GPG du dépôt, puis installer rspamd :

wget -O- https://rspamd.com/apt-stable/gpg.key | apt-key add -
apt update
apt install --no-install-recommends rspamd

Installation du cache Redis :

apt install redis-server

Configuration

Nous allons ici créer une paire de clé permettant de signer et vérifier les courriels envoyés par notre serveur.

Par défaut rspamd va chercher et charger les clés présentes dans /var/lib/rspamd/dkim selon un certain modèle de nom de fichier. Nous allons personnaliser ce modèle afin d’utiliser un sélecteur DKIM personnalisé. Ce qui permettra d’invalider une signature si besoin.

Création des clés

Tout d’abord créons le dossier dkim s’il n’est pas créé :

mkdir /var/lib/rspamd/dkim
chown _rspamd: /var/lib/rspamd/dkim
rspamadm dkim_keygen -d example.org -s 2019010401 -b 2048 -k /var/lib/rspamd/dkim/example.org.2019010401.key > /var/lib/rspamd/dkim/example.org.2019010401.txt
chown _rspamd: /var/lib/rspamd/dkim/*
chmod u=r,go= /var/lib/rspamd/dkim/*

La ligne de commande rspamadm permet avec ces options de créer directement les fichiers avec la clé privé (.key), les informations pour la zone DNS (.txt). L’option « b » permet d’augmenter la taille de la clé (qui par défaut est de 1024).

Zone DNS

Créer l’entrée dans la zone DNS du domaine example.org. Se référer ici à l’aide de votre registrar. L’entrée doit ressembler à ceci (où xxx est la valeur de la clé publique dans le fichier .txt) :

2019010401._domainkey.example.org v=DKIM1; k=rsa; p=xxxx

DKIM map

L’utilisation d’une map va permettre de personnaliser le format des clés privées recherchées par rspamd pour utiliser un autre sélecteur que celui par défaut (dkim). Cela se passe dans le fichier /etc/rspamd/local.d/dkim_signing.conf.

path = "/var/lib/rspamd/dkim/$domain.$selector.key";
selector_map = "/etc/rspamd/dkim_selectors.map";
### Active la signature DKIM pour les alias
allow_username_mismatch = true;
# pour gérer les signatures par sous-domaine (détails plus bas)
use_esld = false; 

Puis dans /etc/rspamd/dkim_selectors.map.

example.org 2019010401
sudb.domain.tld 2019070901

Les clés cherchées seront ainsi :

  • /var/lib/rspamd/dkim/example.org.2019010401.key pour @example.org
  • /var/lib/rspamd/dkim/subd.domain.tld.2019070901.key pour @subd.domain.tld

ARC

Pour activer la signature ARC copier le fichier dkim_signing.conf sous le nom arc.conf en conservant le même contenu.

Utilisation du cache Redis

# /etc/rspamd/local.d/redis.conf
servers = "127.0.0.1";

Recharger la configuration de rspamd

systemctrl reload rspamd.service

Une signature par sous-domaine

Par défaut rspamd normalise les adresses avec sous-domaine en ne conservant que le domaine de second et de premier niveau (SLD et TLD). Donc subd.domain.tld se trouve géré en domain.tld et rspamd cherchera la clé sous ce nom : domain.tld.dkim.key. Il faut donc ajouter à ./local.d/dkim_signing.conf

use_esld = false;