Aller au contenu

Configuration de Rspamd

Par défaut, Rspamd se configure automatiquement lors de l'installation et il n'est pas toujours nécessaire de modifier ses paramètres pour qu'il fonctionne comme il faut avec nos composants. Pour autant, on peut le personnaliser et lui ajouter une interface Web qui peut être pratique pour la maintenance quotidienne et un module DKIM pour gérer directement nos clés DKIM sans passer par un autre outil.
Nous allons donc vérifier les principaux paramètres de notre installation et ensuite configurer ces deux modules.

Vérifier les paramètres par défaut

Adresse d'écoute

Le fichier /etc/rspamd/local.d/worker-normal.inc ne doit écouter que sur l'interface locale (localhost) par défaut :

bind_socket = "localhost:11333";

Indiquer les adresses locales et le DNS à utiliser

Le fichier /etc/rspamd/local.d/options.inc doit contenir les adresses locales (en cas de souci au niveau de Rspamd pour les détecter) et l'adresse du serveur DNS qui sera utilisé par Rspamd :

local_addrs = "127.0.0.0/8, ::1";
dns {
    nameserver = ["80.67.169.12:53:10"];
}

Options pour le système de filtrage

Le fichier /etc/rspamd/local.d/worker-proxy.inc doit contenir les informations nécessaires pour activer le système de filtrage et le service qui se chargera d'analyser les mails avant de les renvoyer à Postfix :

bind_socket = "localhost:11332";
milter = yes;
timeout = 120s;
upstream "local" {
    default = yes;
    self_scan = yes;
}

Utilisation de Redis

Le dernier fichier à vérifier est celui concernant le stockage des infos extraites des mails indésirables pour améliorer le filtrage au fil du temps. Il est nécessaire de vérifier que Redis est bien sélectionné comme système de stockage dans le fichier /etc/rspamd/local.d/classifier-bayes.conf :

backend = "redis";

Une fois ces vérifications faites, nous pouvons passer à la configuration de DKIM et de l'interface Web.

Ajouter et configurer une clé DKIM

La grande force de Rspamd est qu'il est capable de générer et gérer des clés DKIM en interne, sans passer par un autre outil. Cela nous permet ainsi de centraliser la gestion du spam et de ne pas avoir besoin d'un logiciel comme OpenDKIM pour gérer cet aspect.
Pour information, DKIM est un système qui permet d'authentifier tout le courrier envoyé par un serveur et de vérifier à l'aide d'une paire de clés si le courrier envoyé depuis un domaine vient bien du serveur mail rattaché à lui. Chaque mail sortant se voit attribuer une en-tête contenant une clé publique qui est comparée avec celle publiée dans le registre DNS du domaine. Si les deux correspondent, alors le courrier est authentifié et délivré sans problème, sinon il est marqué comme spam automatiquement et peut-être refusé. Cela explique donc l'intérêt de le gérer directement dans Rspamd.

Génération de la clé DKIM

Pour générer la clé DKIM de notre domaine, on peut utiliser l'outil fourni par Rspamd et taper la commande suivante :

rspamadm dkim_keygen -s 'dkim' -b 2048 -d votredomaine.xyz -k /var/lib/rspamd/dkim/votredomaine.xyz.dkim.key > /root/dns.txt

L'option -k va enregistrer notre clé dans le dossier par défaut de Rspamd et lui donner les bonnes permissions pour que Rspamd puisse la consulter. Cette clé étant privée, elle ne doit pas être visible ou accessible par un autre utilisateur.
Le fichier /root/dns.txt contient directement l'enregistrement DNS à ajouter dans votre zone pour que la clé DKIM publique soit diffusée à travers votre registre et pour qu'elle soit analysable par les autres systèmes de spam. Il vous sera nécessaire d'ajouter un nouvel enregistrement dans votre zone pour ajouter ses informations (voir la section domaine pour cela).

Configuration du module DKIM Signing

Pour ajouter notre clé DKIM dans Rspamd, on va créer le fichier /etc/rspamd/local.d/dkim_signing.conf pour activer le module de signature DKIM et indiquer où trouver la clé privée pour permettre d'ajouter l'en-tête sur tout le courrier sortant de notre serveur (la clé privée permettant de générer à volonté la clé publique) et ajouter les informations nécessaires pour faire la comparaison avec notre enregistrement DNS.

Son contenu sera similaire à celui-ci :

domain {
    votredomaine.xyz {
        selector = "dkim";
        path = "/var/lib/rspamd/dkim/votredomaine.xyz.dkim.key";
    }
}
allow_hdrfrom_mismatch = true;
allow_hdrfrom_mismatch_sign_networks = true;
allow_username_mismatch = true;
use_domain = "header";
auth_only = true;
use_esld = true;

L'option allow_username_mismatch = true; sert entre autres à autoriser l'usage d'alias mail et permet aussi d'utiliser uniquement le nom d'utilisateur sans le @votredomaine.xyz, notamment pour le courrier dit local (entre deux comptes d'un même serveur mail).

Activer l'accès à l'interface Web

Rspamd embarque avec lui une interface Web complète qui vous permettra de le paramétrer au niveau de ses filtres (pour notamment changer la notation des courriers) et d'avoir des statistiques précises sur les courriers rejetés (adresse IP d'origine, adresse de destination, sujet du mail analysé, raisons du rejet). Cela peut être pratique pour savoir si certains mails sont bloqués en particulier.
Néanmoins, cette interface est désactivée par défaut, car elle ne possède pas de mécanisme de sécurité. Pour l'activer, nous devons d'abord générer un mot de passe avec l'outil fourni par Rspamd, pour le stocker en toute sécurité avec un hash :

$ rspamadm pw
Enter passphrase:
$2$g95ywihfinjqx4r69u6mgfs9cqbfq1ay$1h4bm5uod9njfu3hdbwd3w5xf5d9u8gb7i9xnimm5u8ddq3c5byy

La commande vous renvoie alors une clé que l'on doit ajouter dans le fichier /etc/rspamd/local.d/worker-controller.inc. C'est également là que vous pouvez configurer les options pour l'interface web de Rspamd. Le contenu de ce fichier doit alors ressembler à ceci :

count = 1;
password = "$2$g95ywihfinjqx4r69u6mgfs9cqbfq1ay$1h4bm5uod9njfu3hdbwd3w5xf5d9u8gb7i9xnimm5u8ddq3c5byy";
secure_ip = "127.0.0.1";
secure_ip = "::1";
static_dir = "/usr/share/rspamd/www/";
bind_socket = "localhost:11334";

Après redémarrage, Rspamd écoutera alors sur le port 11334 et vous demandera un mot de passe à la connexion. Plutôt que d'ouvrir ce port sur l'extérieur, deux solutions pratiques s'offrent à vous :

  • Utiliser un tunnel SSH (comme ici dans la rubrique Accès au WebUI)
  • Utiliser Nginx comme reverse proxy vers ce port

Dans mon cas, j'ai choisi d'utiliser Nginx pour donner accès à l'interface web. Vu que nous avons mis en place un sous-domaine réservé à l'administration du serveur mail dans notre exemple, on peut très bien utiliser un alias sous la forme d'un dossier. C'est personnellement ce que je fais sur Automario et c'est plutôt simple à mettre en place.
On reprend alors notre fichier exemple et on ajoute une section juste en dessous de location ~ \.php$ qui ressemble alors à cela :

# Redirection RSpamd
location /rspamd/ {
    proxy_pass       http://localhost:11334/;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For "";
}

Après rechargement de Nginx (via sudo systemctl reload nginx), il suffit alors d'aller à l'adresse https://admin.votredomaine.xyz/rspamd/ et de taper le mot de passe choisi pour accéder à l'interface de Rspamd.

Activation et lancement de Rspamd

Pour lancer Rspamd et activer son démarrage automatique, on utilise les deux commandes suivantes : sudo systemctl enable redis rspamd && sudo systemctl start redis rspamd

On peut éventuellement relancer Postfix avec sudo systemctl reload postfix pour être sûr que les deux logiciels communiquent bien entre eux.