Introduction
Rspamd :
- Daemon C/Lua, 30x plus rapide que SpamAssassin
- Filtres : SPF, DKIM, DMARC, ARC, DNSBL, regex, regles Lua
- Apprentissage bayesien (per-user ou global)
- Greylisting integre
- Web UI pour debug et stats
- API REST
- Plug-and-play avec Postfix, Exim, Sendmail
Note : si vous utilisez Mailcow, Rspamd est deja installe et configure. Ce tuto est pour une installation standalone (Postfix + Dovecot + Rspamd manuel).
Prerequis
- VPS Linux avec Postfix deja installe (voir tuto 38)
- Acces root
- Redis (pour stats et bayesien)
Etape 1 : Installation
# Repo officiel Rspamd
curl https://rspamd.com/apt-stable/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/rspamd.gpg
echo "deb [signed-by=/usr/share/keyrings/rspamd.gpg] https://rspamd.com/apt-stable/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rspamd.list
sudo apt update
sudo apt install -y rspamd redis-server
rspamadm --version
Etape 2 : Premier demarrage
sudo systemctl enable --now rspamd redis-server
sudo systemctl status rspamd
Rspamd ecoute par defaut sur :
- 11332 : milter (interface avec Postfix)
- 11333 : worker normal
- 11334 : web UI
Etape 3 : Mot de passe pour l'UI
Generez un hash :
rspamadm pw
Tapez un mdp, le hash apparait.
/etc/rspamd/local.d/worker-controller.inc :
password = "$2$abc123hashdumdp...";
bind_socket = "0.0.0.0:11334";
sudo systemctl restart rspamd
Visitez http://IP:11334. Login : laisser vide, mdp = celui choisi.
Etape 4 : Integration Postfix
/etc/postfix/main.cf :
smtpd_milters = inet:localhost:11332
non_smtpd_milters = inet:localhost:11332
milter_default_action = accept
milter_protocol = 6
sudo systemctl restart postfix
Maintenant tous les mails entrants passent par Rspamd.
Etape 5 : Tester
Envoyez-vous un mail piege (GTUBE = pattern de test reconnu) :
echo "Subject: Test spam
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Test message body" | sendmail -t [email protected]
Le mail doit etre marque comme spam. Dans l'UI Rspamd > History, vous voyez le scoring.
Etape 6 : Bayesien (apprentissage)
Configurez les actions pour entrainer :
sudo nano /etc/rspamd/local.d/classifier-bayes.conf
servers = "127.0.0.1";
backend = "redis";
new_schema = true;
expire = 8640000;
autolearn = true;
users_enabled = false; # global bayesien (true pour per-user)
sudo systemctl restart rspamd
Apprentissage manuel :
# Apprendre comme spam
rspamc learn_spam /path/to/spam.eml
# Apprendre comme ham (non-spam)
rspamc learn_ham /path/to/ham.eml
Apres ~200 spam + 200 ham, le bayesien commence a etre efficace.
Pour ré-apprendre depuis Dovecot quand l'utilisateur deplace un mail vers le dossier Junk (Sieve script) : voir step 11.
Etape 7 : Greylisting
Bloque temporairement les emails de senders inconnus, puis accepte au 2eme essai (les spammers re-essaient rarement).
/etc/rspamd/local.d/greylist.conf :
servers = "127.0.0.1:6379";
expire = 1d;
timeout = 5m;
ipv4_mask = 19;
ipv6_mask = 64;
Active par defaut. Pour desactiver :
enabled = false;
Etape 8 : Reglages des scores
/etc/rspamd/local.d/actions.conf :
reject = 15.0; # rejette si score >= 15
add_header = 6.0; # ajoute "X-Spam: Yes" si score >= 6
greylist = 4.0; # greyliste si score >= 4
Pour adapter le scoring d'une regle specifique :
/etc/rspamd/local.d/metric.conf :
symbol "SPF_FAIL" {
weight = 4.0;
}
symbol "DKIM_INVALID" {
weight = 3.0;
}
symbol "MISSING_TO" {
weight = 2.0;
}
Etape 9 : DNSBL personnalisees
/etc/rspamd/local.d/rbl.conf :
rbls {
spamhaus {
symbol = "RBL_SPAMHAUS";
rbl = "zen.spamhaus.org";
ipv6 = true;
}
barracuda {
symbol = "RBL_BARRACUDA";
rbl = "b.barracudacentral.org";
}
}
Etape 10 : Whitelist / Blacklist
/etc/rspamd/local.d/maps.d/local_bl.map :
[email protected]
*@spammer-domain.com
/etc/rspamd/local.d/maps.d/local_wl.map :
[email protected]
@verycloud.fr # tout mon domaine
/etc/rspamd/local.d/multimap.conf :
LOCAL_BL_FROM {
type = "from";
map = "/etc/rspamd/local.d/maps.d/local_bl.map";
score = 15.0;
symbol = "LOCAL_BL_FROM";
}
LOCAL_WL_FROM {
type = "from";
map = "/etc/rspamd/local.d/maps.d/local_wl.map";
score = -10.0;
symbol = "LOCAL_WL_FROM";
}
Etape 11 : Auto-learning via Sieve
Pour que l'utilisateur entraine Rspamd en deplacant des mails vers "Junk", configurez Dovecot Sieve :
sudo apt install -y dovecot-sieve dovecot-managesieved
Script /etc/dovecot/sieve/learn-spam.sieve :
require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "learn-spam.sh" ["${mailbox}"];
Et le script /etc/dovecot/sieve/learn-spam.sh :
#!/bin/sh
exec /usr/bin/rspamc -h 127.0.0.1:11334 learn_spam
Configurez l'event Dovecot :
sudo nano /etc/dovecot/conf.d/90-sieve.conf
plugin {
sieve_plugins = sieve_imapsieve
imapsieve_mailbox1_name = Junk
imapsieve_mailbox1_causes = COPY APPEND
imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve
imapsieve_mailbox2_name = *
imapsieve_mailbox2_from = Junk
imapsieve_mailbox2_causes = COPY
imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve
}
Quand un user deplace un mail vers Junk -> Rspamd l'apprend comme spam. Inversement, quand il le sort de Junk -> appris comme ham.
Etape 12 : Cluster Rspamd (HA)
Pour scaler ou faire de la HA :
# /etc/rspamd/local.d/redis.conf
servers = "10.0.0.1:6379,10.0.0.2:6379";
Stats et bayesien partages entre nodes. Multiple worker behind un load balancer.
Depannage
Aucun mail n'est filtre
Verifiez l'integration Postfix :
sudo postconf -n | grep milter
Doit pointer vers inet:localhost:11332. Verifiez les logs :
sudo tail -f /var/log/rspamd/rspamd.log
sudo tail -f /var/log/mail.log
"Cannot connect to Redis"
sudo systemctl status redis-server
redis-cli ping
# PONG attendu
Verifiez le port Redis dans worker-controller.inc.
Web UI inaccessible
Verifiez bind_socket et que le port 11334 est ouvert. Si vous voulez l'exposer publiquement, mettez-le derriere un reverse proxy Nginx avec auth basic en plus.
Trop de faux positifs
Reduisez les scores des regles qui se declenchent en regardant l'UI > Symbols > frequency :
rspamc stat
Whitelist les domains de confiance.
Bayesien ne se forme pas
Verifiez le nombre d'echantillons :
rspamc stat | grep learned
Il faut au moins 200 spam + 200 ham pour des resultats stables.
Commandes utiles
# Service
sudo systemctl status rspamd
sudo systemctl restart rspamd
# Logs
sudo tail -f /var/log/rspamd/rspamd.log
# Stats
rspamc stat
rspamc symbols
rspamc counters
# Apprendre
rspamc learn_spam /path/to/file.eml
rspamc learn_ham /path/to/file.eml
rspamc -h localhost:11334 learn_spam < message.eml
# Tester un mail
rspamc < message.eml
# Reload sans restart
sudo systemctl reload rspamd
# Config check
sudo rspamadm configtest
# Reset stats
rspamc statreset
Conclusion
Rspamd est le state-of-the-art anti-spam :
- Performant (jusqu'a 30k msg/s)
- Modulable (Lua scripting)
- UI complete pour debug
- Apprentissage bayesien efficace
Pour aller plus loin :
- Combinez avec ClamAV pour le filtrage de virus
- Integrez OpenDMARC pour la validation DMARC stricte
- Pour Mailcow, Rspamd est deja la et accessible via
/rspamd/dans l'UI
Ressources
- Documentation officielle : https://www.rspamd.com/doc/
- Github : https://github.com/rspamd/rspamd
- Configuration examples : https://rspamd.com/doc/configuration/
- Wiki ArchLinux : https://wiki.archlinux.org/title/Rspamd


















