1"use strict";(self.webpackChunkrspamd_docs=self.webpackChunkrspamd_docs||[]).push([[3361],{12939:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>l,metadata:()=>r,toc:()=>c});const r=JSON.parse('{"id":"index","title":"About Rspamd","description":"Introduction","source":"@site/docs/index.md","sourceDirName":".","slug":"/","permalink":"/","draft":false,"unlisted":false,"editUrl":"https://github.com/rspamd/docs.rspamd.com/edit/master/docs/index.md","tags":[],"version":"current","frontMatter":{"title":"About Rspamd"},"sidebar":"docs","next":{"title":"Getting Started with Rspamd","permalink":"/getting-started/"}}');var i=s(74848),t=s(28453);const l={title:"About Rspamd"},a="About Rspamd",d={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Core Capabilities",id:"core-capabilities",level:3},{value:"How It Works",id:"how-it-works",level:3},{value:"Performance Profile",id:"performance-profile",level:3},{value:"Choose Your Path",id:"choose-your-path",level:2},{value:"\ud83c\udd95 New to Rspamd?",id:"-new-to-rspamd",level:3},{value:"\ud83c\udfaf Configuring Rspamd?",id:"-configuring-rspamd",level:3},{value:"\ud83d\udd27 Technical Reference",id:"-technical-reference",level:3},{value:"Quick Start Options",id:"quick-start-options",level:2},{value:"Docker Test Environment (5 minutes)",id:"docker-test-environment-5-minutes",level:3},{value:"Production Package Installation",id:"production-package-installation",level:3},{value:"Ubuntu/Debian",id:"ubuntudebian",level:4},{value:"CentOS/RHEL/Rocky Linux",id:"centosrhelrocky-linux",level:4},{value:"Next Steps After Installation",id:"next-steps-after-installation",level:4},{value:"Key Features at a Glance",id:"key-features-at-a-glance",level:2},{value:"Architecture Overview",id:"architecture-overview",level:2},{value:"Integration Examples",id:"integration-examples",level:2},{value:"Postfix (most common)",id:"postfix-most-common",level:3},{value:"Exim",id:"exim",level:3},{value:"Direct HTTP API",id:"direct-http-api",level:3},{value:"Performance Comparison",id:"performance-comparison",level:2},{value:"Common Use Cases",id:"common-use-cases",level:2},{value:"Migration from SpamAssassin",id:"migration-from-spamassassin",level:2},{value:"Community and Support",id:"community-and-support",level:2},{value:"Community Channels",id:"community-channels",level:3},{value:"Development and Issues",id:"development-and-issues",level:3},{value:"Commercial Support",id:"commercial-support",level:3},{value:"Security Vulnerabilities",id:"security-vulnerabilities",level:3},{value:"Documentation Structure",id:"documentation-structure",level:2},{value:"License and Legal",id:"license-and-legal",level:2},{value:"Project Status",id:"project-status",level:2}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",header:"header",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.header,{children:(0,i.jsx)(n.h1,{id:"about-rspamd",children:"About Rspamd"})}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Rspamd"})," is a high-performance email processing framework designed as an independent layer between your Mail Transfer Agent (MTA) and the internet. Operating outside MTA internal flows, Rspamd provides security isolation while delivering comprehensive message analysis, spam filtering, and policy enforcement."]}),"\n",(0,i.jsx)(n.h3,{id:"core-capabilities",children:"Core Capabilities"}),"\n",(0,i.jsxs)(n.p,{children:["Built on an ",(0,i.jsx)(n.strong,{children:"event-driven architecture"})," with a complete ",(0,i.jsx)(n.strong,{children:"Lua scripting framework"}),", Rspamd offers:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Advanced spam filtering"})," - Combines Bayesian statistics, neural networks, fuzzy hashing, and 60+ analysis modules"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Email authentication"})," - SPF, DKIM, DMARC, and ARC validation with cryptographic signing"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Policy enforcement"})," - Rate limiting, greylisting, reputation tracking, and custom rules"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Machine learning"})," - Neural networks and statistical classifiers that adapt to your mail patterns"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Exter
1nal integrations"})," - Antivirus scanning, URL filtering, AI/ML services, and custom backends"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"how-it-works",children:"How It Works"}),"\n",(0,i.jsx)(n.p,{children:"Each message is evaluated through multiple stages:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Pre-filters"})," - Whitelisting, basic policy checks (execute first, can skip further processing)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Main filters"})," - Parallel execution of authentication checks (SPF/DKIM/DMARC), content analysis, RBL lookups, statistical classifiers"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Post-filters"})," - Composites, neural networks, final scoring adjustments"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Action decision"})," - Based on cumulative score: pass, add headers, greylist, or reject"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Rspamd communicates results to your MTA via HTTP/JSON API or Milter protocol, recommending an action without directly handling mail delivery."}),"\n",(0,i.jsx)(n.h3,{id:"performance-profile",children:"Performance Profile"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Event-driven I/O"})," - Single worker handles 100+ concurrent messages"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Async operations"})," - Non-blocking DNS, Redis, HTTP requests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Typical scan time"})," - 50-200ms per message (including network operations)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Throughput"})," - 5-10 messages/sec per worker core (500K-1M messages/day single worker)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Memory footprint"})," - 50-100MB per worker process"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/developers/architecture",children:"Architecture documentation"})," for internal details and ",(0,i.jsx)(n.a,{href:"/about/features",children:"Features"})," for comprehensive capabilities list."]}),"\n",(0,i.jsx)(n.h2,{id:"choose-your-path",children:"Choose Your Path"}),"\n",(0,i.jsx)(n.p,{children:"This documentation is organized to help you succeed with Rspamd at any experience level:"}),"\n",(0,i.jsx)(n.h3,{id:"-new-to-rspamd",children:"\ud83c\udd95 New to Rspamd?"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Start here"}),": ",(0,i.jsx)(n.a,{href:"/getting-started/",children:"Getting Started Guide"})]}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/getting-started/understanding-rspamd",children:"Understanding Rspamd"})})," - Learn how Rspamd processes messages and makes decisions"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/getting-started/installation",children:"Installation"})})," - Choose the best installation method (package, Docker, Kubernetes)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/getting-started/first-setup",children:"First Setup"})})," - Configure working spam filtering in 30 minutes"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Time investment"}),": 2-3 hours from zero to production-ready configuration"]}),"\n",(0,i.jsx)(n.h3,{id:"-configuring-rspamd",children:"\ud83c\udfaf Configuring Rspamd?"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Go to"}),": ",(0,i.jsx)(n.a,{href:"/guides/configuration/",children:"Configuration Guides"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/guides/configuration/fundamentals",children:"Configuration Fundamentals"})})," - Understand the layered configuration system"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/guides/configuration/tool-selection",children:"Tool Selection Guide"})})," - Choose between multimap, regexp, Lua, or selectors"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Module-specific guides"})," - Detailed tutorials for common tasks"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Common tasks"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/tutorials/migrate_sa",children:"Migrating from SpamAssassin"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/tutorials/dkim_signing_guide",children:"DKIM signing setup"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/tutorials/multimap_guide",children:"Multimap usage"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/tutorials/integration",children:"Integration with your MTA"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"-technical-reference",children:"\ud83d\udd27 Technical Reference"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"For developers and advanced users"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/modules/",children:"Module Documentation"})})," - Complete parameter reference for all 60+ modules"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/lua/",children:"Lua API"})})," - Programming interface for custom rules and plugins"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/developers/",children:"Developer Guides"})})," - Architecture, protocol, writing rules, testing"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/developers/protocol",children:"Protocol Documentation"})})," - HTTP API and Milter protocol specifications"]}),"\n"]}
1),"\n",(0,i.jsx)(n.h2,{id:"quick-start-options",children:"Quick Start Options"}),"\n",(0,i.jsx)(n.h3,{id:"docker-test-environment-5-minutes",children:"Docker Test Environment (5 minutes)"}),"\n",(0,i.jsx)(n.p,{children:"Fastest way to explore Rspamd's web interface and test message scanning:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Run Rspamd container with web interface\ndocker run -d \\\n --name rspamd-test \\\n -p 11334:11334 \\\n -p 11333:11333 \\\n rspamd/rspamd:latest\n\n# Access web interface at http://localhost:11334\n# Default password: see container logs for generated password\ndocker logs rspamd-test 2>&1 | grep password\n"})}),"\n",(0,i.jsx)(n.p,{children:"Test message scanning:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# Scan a test message\necho -e "Subject: Test\\n\\nTest message body" | \\\n curl --data-binary @- http://localhost:11333/checkv2\n'})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Note"}),": Docker setup is for testing only. For production, use package installation with proper Redis integration."]}),"\n",(0,i.jsx)(n.h3,{id:"production-package-installation",children:"Production Package Installation"}),"\n",(0,i.jsx)(n.h4,{id:"ubuntudebian",children:"Ubuntu/Debian"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# Install prerequisites\nsudo apt install -y apt-transport-https ca-certificates curl gnupg\n\n# Add Rspamd repository (modern keyring method)\ncurl -fsSL https://rspamd.com/apt-stable/gpg.key | \\\n sudo gpg --dearmor -o /usr/share/keyrings/rspamd.gpg\n\necho "deb [signed-by=/usr/share/keyrings/rspamd.gpg] https://rspamd.com/apt-stable/ $(lsb_release -cs) main" | \\\n sudo tee /etc/apt/sources.list.d/rspamd.list\n\n# Install Rspamd and Redis\nsudo apt update\nsudo apt install -y rspamd redis-server\n\n# Start services\nsudo systemctl enable --now rspamd redis-server\n'})}),"\n",(0,i.jsx)(n.h4,{id:"centosrhelrocky-linux",children:"CentOS/RHEL/Rocky Linux"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Add Rspamd repository\ncurl -sSL https://rspamd.com/rpm-stable/centos-8/rspamd.repo | \\\n sudo tee /etc/yum.repos.d/rspamd.repo\n\n# Install Rspamd and Redis\nsudo dnf install -y rspamd redis\n\n# Start services\nsudo systemctl enable --now rspamd redis\n"})}),"\n",(0,i.jsx)(n.h4,{id:"next-steps-after-installation",children:"Next Steps After Installation"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Verify installation"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo systemctl status rspamd\nrspamd --version\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Set web interface password"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"rspamadm pw # Generate password hash\necho 'password = \"$2$your_hash_here\";' | sudo tee /etc/rspamd/local.d/worker-controller.inc\nsudo systemctl restart rspamd\n"})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Continue with"}),": ",(0,i.jsx)(n.a,{href:"/getting-started/first-setup",children:"First Setup Guide"})," for complete configuration"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For detailed installation instructions including Kubernetes, Docker Compose, and other platforms, see the ",(0,i.jsx)(n.a,{href:"/getting-started/installation",children:"Installation Guide"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"key-features-at-a-glance",children:"Key Features at a Glance"}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Feature"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Event-driven architecture"})}),(0,i.jsx)(n.td,{children:"Async I/O allows 100+ concurrent message scans per worker"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Email authentication"})}),(0,i.jsx)(n.td,{children:"SPF, DKIM (signing+validation), DMARC, ARC with caching"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Statistical learning"})}),(0,i.jsx)(n.td,{children:"Bayesian classifier + Neural networks + Fuzzy hashing"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Content analysis"})}),(0,i.jsx)(n.td,{children:"Regex rules (Hyperscan-optimized), MIME checks, language detection"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Real-time blacklists"})}),(0,i.jsx)(n.td,{children:"50+ preconfigured RBLs, SURBL, URIBL with parallel DNS queries"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Anti-abuse"})}),(0,i.jsx)(n.td,{children:"Rate limiting, greylisting, spamtrap detection"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Web UI"})}),(0,i.jsx)(n.td,{children:"Real-time monitoring, history, training, configuration validation"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Protocols"})}),(0,i.jsx)(n.td,{children:"HTTP/JSON, Milter, native Rspamd protocol"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Security"})}),(0,i.jsx)(n.td,{children:"HTTPCrypt encryption, localhost-only binding, minimal attack surface"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Scalability"})}),(0,i.jsx)(n.td,{children:"Horizontal scaling, load balancing, Redis HA support"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/about/features",children:"Features page"})," for comprehensive technical details."]}),"\n",(0,i.jsx)(n.h2,{id:"architecture-overview",children:"Architecture Overview"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Mail Transfer Agent \u2502\n\u2502 (Postfix/Exim/Sendmail/etc) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502 Milter/HTTP\n \u25bc\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Rspamd Proxy \u2502 \u25c4\u2500\u2500 Load balancing, protocol translation\n \u2502 Worker \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Rspamd Normal \u2502 \u25c4\u2500\u2500 Message analysis, scoring\n \u2502 Worker \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u25bc \u25bc \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Redis \u2502 \u2502 DNS \u2502 \u2502 External \u2502\n\u2502 \u2502 \u2502Resolver\u2502 \u2502 Services \u2502\n\u2502Statistics\u2502 \u2502 (RBLs)\u2502 \u2502(AV, URLs) \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Key components"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Proxy worker"})," - Protocol translation (Milter \u2194 HTTP), multiplexing, load balancing"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Normal worker"})," - Actual message scanning and rule execution"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Controller worker"})," - Web UI and management API"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Redis"})," - Statistics, learning data, rate limiting, caching"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"DNS resolver"})," - Critical for RBL checks; use local recursive resolver"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/developers/architecture",children:"Architecture documentation"})," for detailed process model and event-driven implementation."]}),"\n",(0,i.jsx)(n.h2,{id:"integration-examples",children:"Integration Examples"}),"\n",(0,i.jsx)(n.h3,{id:"postfix-most-common",children:"Postfix (most common)"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-nginx",children:"# /etc/postfix/main.cf\nsmtpd_milters = inet:localhost:11332\nnon_smtpd_milters = inet:localhost:11332\nmilter_default_action = accept\nmilter_protocol = 6\n"})}),"\n",(0,i.jsx)(n.h3,{id:"exim",children:"Exim"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-perl",children:"# ACL check\nwarn\n spam = nobody:true\n add_header = X-Spam-Score: $spam_score\n add_header = X-Spam-Report: $spam_report\n"})}),"\n",(0,i.jsx)(n.h3,{id:"direct-http-api",children:"Direct HTTP API"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# Scan message via HTTP\ncurl -X POST http://localhost:11333/checkv2 \\\n -H "Content-Type: message/rfc822" \\\n --data-binary @message.eml\n'})}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/tutorials/integration",children:"Integration guide"})," for complete MTA setup instructions."]}),"\n",(0,i.jsx)(n.h2,{id:"performance-comparison",children:"Performance Comparison"}),"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Solution"}),(0,i.jsx)(n.th,{children:"Messages/sec/core"}),(0,i.jsx)(n.th,{children:"Architecture"}),(0,i.jsx)(n.th,{children:"Memory/process"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Rspamd"})}),(0,i.jsx)(n.td,{children:"5-10"}),(0,i.jsx)(n.td,{children:"Event-driven, async"}),(0,i.jsx)(n.td,{children:"50-100MB"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"SpamAssassin"}),(0,i.jsx)(n.td,{children:"0.5-1"}),(0,i.jsx)(n.td,{children:"Process-per-message"}),(0,i.jsx)(n.td,{children:"30-50MB"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:"Amavis"}),(0,i.jsx)(n.td,{children:"1-2"}),(0,i.jsx)(n.td,{children:"Process pool"}),(0,i.jsx)(n.td,{children:"100-200MB"})]})]})]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Why Rspamd is faster"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Non-blocking I/O (single process handles many messages)"}),"\n",(0,i.jsx)(n.li,{children:"Optimized regex engine (Hyperscan on x86_64)"}),"\n",(0,i.jsx)(n.li,{children:"Efficient memory pools"}),"\n",(0,i.jsx)(n.li,{children:"Connection pooling for Redis/DNS/HTTP"}),"\n",(0,i.jsx)(n.li,{children:"Zero-copy message handling where possible"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/about/comparison",children:"Performance comparison"})," for detailed benchmarks."]}),"\n",(0,i.jsx)(n.h2,{id:"common-use-cases",children:"Common Use Cases"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"ISP/hosting providers"})," - High-volume mail filtering (millions of messages/day)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Enterprise mail servers"})," - Policy enforcement, DLP, advanced authentication"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Small business"})," - Simple spam filtering with minimal resources"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Mailing list operators"})," - ARC handling, reputation management"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Security team
1s"})," - Threat intelligence integration, custom detection rules"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"migration-from-spamassassin",children:"Migration from SpamAssassin"}),"\n",(0,i.jsx)(n.p,{children:"If you're currently using SpamAssassin:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Install Rspamd alongside SpamAssassin"})," (don't remove SA yet)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Configure both to add headers"})," (test mode, no rejection)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Compare results"})," for several days"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Retrain Bayesian classifier"})," with your mail corpus (SA Bayes data not compatible)"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Switch to Rspamd"})," once confident"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Key differences"}),":"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"10-100x faster processing"}),"\n",(0,i.jsx)(n.li,{children:"Different statistical model (must retrain)"}),"\n",(0,i.jsx)(n.li,{children:"Better modern spam handling (DMARC, ARC, neural nets)"}),"\n",(0,i.jsx)(n.li,{children:"Event-driven vs process-per-message"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"/tutorials/migrate_sa",children:"SpamAssassin migration guide"})," for step-by-step instructions."]}),"\n",(0,i.jsx)(n.h2,{id:"community-and-support",children:"Community and Support"}),"\n",(0,i.jsx)(n.h3,{id:"community-channels",children:"Community Channels"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/discussions",children:"GitHub Discussions"})})," - Questions, ideas, and general discussion"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://discord.gg/RsBM5KXtgX",children:"Discord"})})," - Real-time chat for quick questions and community support"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://t.me/rspamd",children:"Telegram"})})," - Alternative real-time chat"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://lists.rspamd.com",children:"Mailing Lists"})})," - Long-form technical discussions and announcements"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"development-and-issues",children:"Development and Issues"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://github.com/rspamd/rspamd",children:"GitHub Repository"})})," - Source code, issue tracking, pull requests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/issues",children:"Issue Tracker"})})," - Bug reports and feature requests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/blob/master/CONTRIBUTING.md",children:"Contributing Guide"})})," - How to contribute code or documentation"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"commercial-support",children:"Commercial Support"}),"\n",(0,i.jsxs)(n.p,{children:["Professional support, consulting, and custom development available from Rspamd developers and certified partners. See ",(0,i.jsx)(n.a,{href:"/support",children:"Support page"})," for details."]}),"\n",(0,i.jsx)(n.h3,{id:"security-vulnerabilities",children:"Security Vulnerabilities"}),"\n",(0,i.jsxs)(n.p,{children:["Report security issues privately to: ",(0,i.jsx)(n.a,{href:"mailto:[email protected]",children:"[email protected]"})]}),"\n",(0,i.jsx)(n.p,{children:"Do not open public GitHub issues for security vulnerabilities."}),"\n",(0,i.jsx)(n.h2,{id:"documentation-structure",children:"Documentation Structure"}),"\n",(0,i.jsx)(n.p,{children:"This documentation is organized into several sections:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/getting-started/",children:"Getting Started"})})," - Installation, configuration basics, first setup"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/about/",children:"About"})})," - Features, comparison, performance"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/configuration/",children:"Configuration"})})," - System-wide settings, UCL syntax, configuration layers"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/modules/",children:"Modules"})})," - Complete reference for all 60+ modules"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/workers/",children:"Workers"})})," - Worker types and their configuration"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/tutorials/",children:"Tutorials"})})," - Step-by-step guides for common tasks"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/developers/",children:"Developers"})})," - Architecture, protocol, writing rules, Lua API"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/lua/",children:"Lua API"})})," - Complete programming interface documentation"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"/faq",children:"FAQ"})})," - Frequently asked questions"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"license-and-legal",children:"License and Legal"}),"\n",(0,i.jsxs)(n.p,{children:["Rspamd is open source software licensed under the ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://www.apache.org/licenses/LICENSE-2.0",children:"Apache 2.0 License"})}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Key points:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Free to use, modify, and distribute"}),"\n",(0,i.jsx)(n.li,{children:"Commercial use permitted"}),"\n",(0,i.jsx)(n.li,{children:"Patent grant included"}),"\n",(0,i.jsx)(n.li,{children:"No warranty provided"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["See ",(0,i.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/blob/master/LICENSE",children:"LICENSE"})," file for complete terms."]}),"\n",(0,i.jsx)(n.h2,{id:"project-status",children:"Project Status"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Active development"})," - Regular releases with new features and improvements"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Production ready"})," - Used by ISPs, hosting providers, and enterprises worldwide"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Stable API"})," - Backwards compatibility maintained"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Security updates"})," - Prompt response to vulnerabilities"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Long-term support"})," - Project maintained since 2012"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Current stable version"}),": Check ",(0,i.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/releases",children:"GitHub releases"})," for latest version"]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Ready to start?"})}),"\n",(0,i.jsxs)(n.p,{children:["\u2192 New users: ",(0,i.jsx)(n.a,{href:"/getting-started/understanding-rspamd",children:"Understanding Rspamd"})," \u2192 ",(0,i.jsx)(n.a,{href:"/getting-started/installation",children:"Installation"})," \u2192 ",(0,i.jsx)(n.a,{href:"/getting-started/first-setup",children:"First Setup"})]}),"\n",(0,i.jsxs)(n.p,{children:["\u2192 Experienced users: ",(0,i.jsx)(n.a,{href:"/guides/configuration/fundamentals",children:"Configuration Fundamentals"})," \u2192 ",(0,i.jsx)(n.a,{href:"/modules/",children:"Module Reference"})]}),"\n",(0,i.jsxs)(n.p,{children:["\u2192 Developers: ",(0,i.jsx)(n.a,{href:"/developers/architecture",children:"Architecture"})," \u2192 ",(0,i.jsx)(n.a,{href:"/developers/writing_rules",children:"Writing Rules"})," \u2192 ",(0,i.jsx)(n.a,{href:"/lua/",children:"Lua API"})]})]})}function h(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(o,{...e})}):o(e)}},28453:(e,n,s)=>{s.d(n,{R:()=>l,x:()=>a});var r=s(96540);const i={},t=r.createContext(i);function l(e){const n=r.useContext(t);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),r.createElement(t.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.