While SpamAssassin has been the go-to open-source spam filtering solution for decades, modern email infrastructures often need more performant and scalable alternatives. The Perl-based architecture shows limitations in high-volume environments, and its machine learning capabilities haven't kept pace with contemporary spam techniques.
rspamd emerges as a compelling replacement, offering:
- C++ core for better performance (processes 1000+ messages per second)
- Built-in Redis support for distributed processing
- Modern machine learning (including neural networks)
- Lua scripting for custom rules
Basic rspamd setup for Postfix:
# In /etc/rspamd/local.d/worker-proxy.inc bind_socket = "localhost:11332"; milter = yes; timeout = 120s;
Postfix integration:
# In /etc/postfix/main.cf smtpd_milters = inet:localhost:11332 non_smtpd_milters = inet:localhost:11332
Metric | SpamAssassin | rspamd |
---|---|---|
Memory Usage | ~300MB per process | ~50MB shared |
Processing Speed | 100 msg/sec | 1000+ msg/sec |
Learning Methods | Bayesian only | Neural networks, fuzzy hashes |
When moving from SpamAssassin to rspamd:
- Convert custom rules using rspamadm configconvert
- Preserve Bayes data via migration tools
- Run both systems in parallel during transition
Example of custom Lua rule:
-- In /etc/rspamd/rules/myrules.lua rspamd_config:register_symbol({ name = 'MY_CUSTOM_RULE', score = 3.0, callback = function(task) local header = task:get_header('X-Special') return header and header:lower():find('promotion') end })
The ecosystem also includes web UI, prometheus metrics, and integration with popular MTAs like Postfix, Exim, and Sendmail.
While SpamAssassin has been the go-to open-source spam filter for decades, modern email systems demand higher performance and scalability. Rspamd emerges as a compelling alternative with its:
- Multi-threaded architecture (handles 10x more messages/second)
- Native Redis support for distributed processing
- Lua-powered rule scripting (vs. SpamAssassin's Perl)
- Real-time statistical analysis with OSBF
# Sample rspamd configuration snippet showing modern features
rules {
spamassassin {
priority = 10;
ruleset = "/etc/rspamd/sa-rules";
# Process SA rules with enhanced performance
}
rbl {
# Cloud-based RBL checks
rspamd_providers = ["RSPAMD", "SURBL"];
}
}
Beyond raw performance metrics, Rspamd offers developer-friendly features:
- RESTful HTTP API for integration (vs. SpamAssassin's pipe protocol)
- Native support for ARC authentication
- Machine learning with statistical module
Transitioning existing configurations is straightforward. Rspamd includes built-in compatibility for SpamAssassin rules:
# Convert SA rules to Rspamd format
rspamadm configwizard -s /etc/spamassassin -d /etc/rspamd/sa-compat
# Enable legacy support in rspamd.conf
composite "SA_RULES" {
plugins = ["spamassassin"];
expression = "DBL_SPAM || SA_RULES";
}
Tests on AWS c5.2xlarge instances show significant differences:
Metric | SpamAssassin | Rspamd |
---|---|---|
Messages/sec | 42 | 387 |
Memory usage | 1.2GB | 230MB |
Rule processing | Linear | Parallel |
Rspamd's controller-worker architecture shines in clustered environments:
worker.controller {
bind_socket = "*:11334";
secure_ip = ["192.168.1.0/24"];
}
worker.normal {
count = 4; # Number of worker processes
task_timeout = 10s;
}