Conteneurisation de l'anti-spam rspamd.
  • Go Template 35.4%
  • Dockerfile 26.4%
  • Shell 18.8%
  • PHP 9.4%
  • C++ 6.3%
  • Other 3.7%
Find a file
Marie f40ef167f3 feat: expose controller service for baysesian learning
This allows Dovecot to notify to rspamd mails that are added / removed
of spam folder.

refers to collectivit/collectivit#126
2026-10-26 14:33:11 +01:00
config feat: expose controller service for baysesian learning 2026-10-26 14:33:11 +01:00
scripts feat: expose controller service for baysesian learning 2026-10-26 14:33:11 +01:00
.pre-commit-config.yaml feat: install rspamd in alpine container 2026-09-26 14:21:07 +02:00
.workspace.lua feat: configure rspamd 2026-10-25 21:39:28 +01:00
Dockerfile feat: configure rspamd 2026-10-25 21:39:28 +01:00
README.md feat: expose controller service for baysesian learning 2026-10-26 14:33:11 +01:00

docker-rspamd

Aperçu

Ce dépôt contient la déclaration d'un container Docker qui exécute le service anti-spam rspamd1.

Un serveur Postfix lui soumet les mails via le protocole milter2 sur le port 11332. Pour ça, il faut ajouter inet:<hôte rspamd>:11332 aux milters de Postfix (variable MILTERS du container docker-postfix). Le proxy milter n'est pas authentifié : il ne doit être accessible que depuis le réseau interne (dans un cluster Kubernetes par exemple).

Selon le score attribué à un mail (C.F config/local.d/actions.conf) :

  • Au delà de 15, le mail est rejeté pendant l'échange SMTP.
  • Au delà de 6, l'en-tête X-Spam: Yes est ajouté au mail. C'est au serveur qui distribue les mails (Dovecot) de le classer dans le dossier spam.

Les en-têtes Authentication-Results, X-Spamd-Bar et X-Spamd-Result sont ajoutés aux mails pour comprendre le score attribué.

Un serveur Redis (ou compatible, comme Valkey) est nécessaire pour les modules qui stockent des données : classifieur bayésien, entraîné automatiquement avec les mails au score très haut ou très bas, et par les signalements des utilisataires (C.F ci-dessous), greylisting (les mails au score supérieur à 4 sont refusés temporairement la première fois qu'ils sont reçus), limitation de débit...

Les listes noires DNS (Spamhaus, SURBL, URIBL...) refusent les requêtes venant des gros résolveurs DNS partagés ou publics. rspamd utilise donc le résolveur récursif unbound3 sur 127.0.0.1:53 (C.F config/local.d/options.inc). unbound est installé dans l'image mais n'est pas démarré par le point d'entrée : il faut lancer un second container avec la même image et la commande dumb-init -- unbound -d, qui partage le réseau du container rspamd (dans le même pod Kubernetes par exemple).

Apprentissage

Le contrôleur de rspamd4 écoute sur le port 11334. Il permet notamment d'entraîner le classifieur bayésien en lui soumettant des mails via POST /learnspam et POST /learnham, avec le mot de passe CONTROLLER_PASSWORD dans l'en-tête Password. Dovecot l'utilise pour signaler les mails que les utilisataires déplacent dans ou hors du dossier Spam (C.F docker-dovecot). Comme le proxy milter, il ne doit être accessible que depuis le réseau interne.

Variables d'environnement

  • REDIS_HOST (requis) : Nom d'hôte du serveur compatible Redis (Valkey...).

  • REDIS_PORT (requis) : Port du serveur compatible Redis.

  • REDIS_DB (défaut : 1) : Index de la base de données Redis à utiliser. Une base différente de celle des autres services partageant le même serveur Redis permet d'éviter les collisions de clés.

  • CONTROLLER_PASSWORD (requis) : Mot de passe du contrôleur, nécessaire pour entraîner le classifieur bayésien.

Ports

  • 11332 : le proxy milter, auquel Postfix soumet les mails. Il écoute sur toutes les interfaces (C.F config/local.d/worker-proxy.inc).

  • 11334 : le contrôleur, auquel Dovecot signale les spams et les mails légitimes. Il écoute sur toutes les interfaces (C.F config/local.d/worker-controller.inc.tpl).