Goal of this guide
This guide builds on the grommunio 2026.06.1 installation and shows step by step how you understand, verify, test, train and operate grommunio-antispam with Rspamd. It is deliberately practical: you get commands, checkpoints, screenshots from a validated grommunio 2026.06.1 installation and guidance on which values you should not copy blindly into production.
You identify which Rspamd processes run inside grommunio.
You test the mail filter with a safe GTUBE test message.
You read score, action, symbols and history correctly.
You train spam and ham in a controlled way.
You understand which features matter in production: SPF, DKIM, DMARC, RBL/SURBL, fuzzy checks, greylisting, rate limits, neural/Bayes, multimap and monitoring.
The baseline installation is here: install grommunio 2026.06.1.
Validated reference installation
This guide was validated against an isolated grommunio appliance. Hostname, domain and messages are synthetic. The Rspamd web interface was not exposed publicly; it was tested through an SSH tunnel to the local controller port.
hostname -fcat /etc/os-release | grep -E '^(PRETTY_NAME|VARIANT|ID_LIKE)='rpm -qa | grep -Ei 'grommunio-antispam|rspamd|postfix|redis' | sortrspamd --version
The validated reference installation used grommunio 2026.06.1 with grommunio-antispam 4.1.5, Postfix 3.10.2 and Redis 8.2.3. Important: this appliance used XFS for the root filesystem and systemd-networkd for network configuration . That is a validated appliance state, not a general statement about every SUSE or SLES installation.
Architecture: Postfix, Rspamd and Redis
grommunio-antispam is based on Rspamd. Rspamd is a modular mail filter: a message is evaluated by multiple independent checks. Each check produces a symbol and optionally a score. The accumulated score results in an action such as no action, add header, greylist or reject.
Postfix receives mail and passes it to Rspamd via milter.
The proxy worker listens locally on port 11332.
Normal workers scan messages on port 11333.
The controller with web UI and API listens locally on port 11334.
Redis stores state such as Bayes, history, greylisting, rate limits and other learning data.
ss -ltnp | grep -E ':(25|587|11332|11333|11334)\b'postconf -n | grep -Ei 'milter|content_filter'systemctl list-units --type=service --all | grep -Ei 'redis|valkey'
In the validated installation, `smtpd_milters = inet:localhost:11332` was configured. The controller was reachable only on localhost. That is the right production model as well: publish mail services as needed, but keep the antispam controller inside a management network, behind VPN or behind explicit IP rules.
Step 1: Verify services and configuration
Always start with a state check. If services are not running or configuration does not parse, every functional filter analysis is meaningless.
systemctl is-active grommunio-antispam postfix redis@grommuniorspamadm configtestrspamc statjournalctl -u grommunio-antispam --since "30 minutes ago" --no-pager
Expected output is `syntax OK`, an active antispam service and plausible `rspamc stat` output. Evaluate warnings carefully: DNS failures, missing maps or broken local includes are often operational issues, while a fresh installation naturally has little statistical data.
Step 2: Open the web interface safely
An SSH tunnel is enough for administration and screenshots. You do not need to expose port 11334 publicly. This protects the controller API and reduces attack surface.
ssh -L 11334:127.0.0.1:11334 root@mail.example.test# Danach lokal im Browser öffnen:# http://127.0.0.1:11334/
Screenshot: Dashboard of a grommunio 2026.06.1 installation with grommunio-antispam 4.1.5.
Step 3: Understand actions, scores and symbols
Rspamd does not make a magical yes/no decision. It collects symbols, adds scores and recommends an action. In the validated baseline configuration, the thresholds were greylist 4, add header 6 and reject 15. In production, change these values only after observing real mail flows.
Screenshot: Actions and maps in the Rspamd configuration; local overrides should be controlled and documented.
rspamadm configdump actionsrspamadm configdump spfrspamadm configdump dkimrspamadm configdump dmarc
Do not edit shipped defaults directly. Add local files in `local.d` and always run `rspamadm configtest` afterwards. In the grommunio appliance, the configuration path is `/etc/grommunio-antispam`; generic Rspamd documentation often uses `/etc/rspamd`.
Step 4: Scan a first message
Create a harmless test message first and scan it with `rspamc symbols`. Do not look only at the action; look at the reasoning: missing Received headers, test domains or DNS issues can cause higher scores in synthetic tests than in a real mail flow.
cat > /tmp/ham.eml <<'EOF'From: Alex Example <alex@example.test>To: Admin Example <admin@example.test>Subject: Lab Termin fuer MailfilterDate: Mon, 7 Sep 2026 10:00:00 +0200Message-ID: <ham-001@example.test>MIME-Version: 1.0Content-Type: text/plain; charset=UTF-8Hallo,das ist eine harmlose interne Testnachricht fuer die Antispam-Validierung.EOFrspamc symbols < /tmp/ham.eml
In the validated test run, this message was classified as `add header` because of synthetic characteristics. This is a useful example: the technology works, but the data basis is not identical to a real production message.
Step 5: Test spam safely with GTUBE
Use GTUBE for reproducible tests. It is a harmless test signature that spam filters are expected to classify as spam. This avoids storing or forwarding real spam.
cat > /tmp/gtube.eml <<'EOF'From: Sender Example <sender@example.net>To: Alex Example <alex@example.test>Subject: GTUBE Lab TestDate: Mon, 7 Sep 2026 10:05:00 +0200Message-ID: <spam-gtube-001@example.net>MIME-Version: 1.0Content-Type: text/plain; charset=UTF-8This is a safe spam-filter test message.XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34XEOFrspamc symbols < /tmp/gtube.eml
The GTUBE test returned `Action: reject`, `Score: 15.00 / 15.00` and the `GTUBE` symbol. This validates the filter path from client to Rspamd action.
Screenshot: Scan/Learn with GTUBE: the interface shows reject, score and triggering symbol.
Step 6: Use Bayes learning carefully
Bayes learning is valuable, but only with clean training data. Train clear spam examples as spam and clear false positives as ham. If users report everything without review, you can make filtering worse.
rspamc learn_spam /tmp/gtube.emlrspamc learn_ham /tmp/ham.emlrspamc stat
After learning, the dashboard showed a ham learn entry. In production, add a reporting workflow, sample review, backup of state data and regular false-positive checks.
Step 7: Read history and concrete causes
History is the fastest path from a user complaint to the cause. Open the concrete message and check sender, recipient, subject, action, score, scan time and symbols. Only then decide whether DNS, reputation, content, attachment, URL, Bayes or a local rule caused the classification.
Screenshot: History after the GTUBE test with action, score, symbols and scan time.
journalctl -u postfix --since "2 hours ago" --no-pagerjournalctl -u grommunio-antispam --since "2 hours ago" --no-pagermailq
Step 8: Use symbols as tuning input
The symbols view shows which checks exist and how they are scored. This is a better starting point than blindly raising thresholds. If a symbol repeatedly produces wrong results, first check DNS, local maps, authentication and real examples.
Screenshot: Symbols show which individual checks Rspamd includes in the overall score.
Step 9: Plan allowlists, denylists and multimap cleanly
Exceptions are useful, but dangerous when too broad. Use specific senders, partner domains or technical relay IP addresses. Do not globally allow large freemail or cloud domains.
cat > /etc/grommunio-antispam/local.d/multimap.conf <<'EOF'TRUSTED_SENDER_DOMAIN {type = "from";filter = "email:domain";map = "/etc/grommunio-antispam/local.d/trusted_sender_domain.map";score = -5.0;description = "Trusted sender domains reviewed by mail operations";}EOFprintf '%s\n' 'partner.example' > /etc/grommunio-antispam/local.d/trusted_sender_domain.maprspamadm configtestsystemctl reload grommunio-antispam
Production changes need a review process: who may add exceptions, how long do they last, which samples justify the exception and when is it reviewed again?
Step 10: Understand test selectors
Selectors extract fields from messages. They help you verify whether a rule sees the value you expect: SMTP sender, recipient, headers, subject, IP, MIME structure or URL components.
Screenshot: Test selectors with a synthetic message; useful before adding custom rules and maps.
Important feature areas in grommunio-antispam
SPF, DKIM, DMARC and ARC validate identity and authenticity of mail flows.
RBL and SURBL evaluate IPs, domains and URLs through reputation data.
Fuzzy checks detect known or similar spam content.
Bayes and neural improve classification through training and learning models.
Greylisting and rate limits slow suspicious delivery patterns.
Multimap, force actions and local maps implement controlled exceptions and rules.
Milter headers can make results visible in message headers.
External services and antivirus integration are extension points, but they need deliberate planning and monitoring.
Screenshot: Throughput and actions support operations, especially after policy or DNS changes.
Place SPF, DKIM, DMARC and ARC correctly
These checks are not cosmetic extras; they are the trust chain of your mail domains. SPF validates whether the sending server belongs to the domain. DKIM validates the message signature. DMARC combines SPF and DKIM with a domain policy. ARC helps when messages pass through forwarders or mailing lists.
dig TXT example.com +shortdig TXT _dmarc.example.com +shortdig TXT default._domainkey.example.com +short# DMARC fuer neue Domains zuerst beobachten:# v=DMARC1; p=none; rua=mailto:dmarc@example.com# Erst nach Auswertung verschaerfen:# v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com# v=DMARC1; p=reject; rua=mailto:dmarc@example.com
For production domains, usually start DMARC in observation mode. Once legitimate senders, forwarders, newsletter systems and partner mail servers are understood, you can move deliberately to `quarantine` or `reject`.
Evaluate RBL, SURBL and URL checks
RBLs evaluate sending IPs or networks, while SURBL and URL checks evaluate domains and links inside the message. These hits are often strong signals, but should not be interpreted in isolation. For false positives, check whether a legitimate service is compromised, misconfigured or only temporarily listed.
rspamadm configdump rblrspamadm configdump surblrspamc symbols < /tmp/gtube.eml | grep -E 'RBL|SURBL|URL|PHISH|Action|Score' || true
Validate fuzzy, phishing and content patterns
Fuzzy checks detect known or similar content without requiring every message to be identical. Phishing and URL modules evaluate suspicious targets, redirects and patterns. In production, DNS must work reliably and external lookups must not be slowed down by firewall, proxy or resolver issues.
rspamadm configdump fuzzy_checkrspamadm configdump phishingjournalctl -u grommunio-antispam --since "1 hour ago" --no-pager | grep -Ei 'fuzzy|phishing|surbl|resolve|timeout' || true
Enable greylisting and rate limits deliberately
Greylisting delays suspicious delivery attempts, and rate limits restrict unusual sending patterns. Both features can be effective, but they intentionally introduce friction. Do not enable them blindly; operate them with monitoring, exceptions for legitimate systems and clear communication.
rspamadm configdump greylistrspamadm configdump ratelimitrspamc stat | grep -Ei 'greylist|reject|add header|no action'
Operate Bayes, neural and training data
Bayes and neural are learning mechanisms. They need clean data, time and control. A fresh system already catches a lot through rules, reputation and authentication; learning becomes important when real false positives and false negatives are classified cleanly.
rspamadm configdump classifier-bayes 2>/dev/null || rspamadm configdump statisticsrspamadm configdump neuralrspamc stat
Treat training data as operational data. If Redis, Bayes or maps are lost, the filter does not start from zero technically, but important local experience is missing.
Integrate antivirus and external services consciously
grommunio-antispam provides interfaces for antivirus and external checks. Whether you enable them depends on operating model, privacy, latency, licensing and existing security architecture. The key point: external checks must be monitored so timeouts do not damage mail flow.
rspamadm configdump antivirusrspamadm configdump external_servicesjournalctl -u grommunio-antispam --since "1 hour ago" --no-pager | grep -Ei 'antivirus|external|timeout|error' || true
Monitoring and Day-2 operations
In daily operations, rejects are not the only signal. Monitor scan time, queue length, DNS resolution, Redis state, mail volume, error log, certificates, disk space, updates and unusual action shifts. This is where dashboard, throughput, history and logs become valuable together.
systemctl is-active grommunio-antispam postfix redis@grommuniomailqrspamc statdf -hjournalctl -u grommunio-antispam --since "24 hours ago" --no-pager | tail -200
Production checklist
Expose controller port 11334 only internally through VPN, bastion or IP restriction.
Validate SPF, DKIM and DMARC for all sending domains and harden gradually.
Verify Postfix milter integration and set `milter_default_action` deliberately.
Include Redis instance, Bayes data, history and local maps in backup and restore.
Adjust actions only after observing real mail flows.
Monitor greylisting, rate limits and rejects during rollout.
Define a false-positive and false-negative process.
Run updates with maintenance window, snapshot/backup and rollback plan.
Monitor logs, queue, DNS, certificates, disk space and scan times.
Document which local overrides exist and why.
Order in the grommunio series
If you are building grommunio from scratch, start with the installation guide. This antispam article is the next Day-2 step. For SSO and central authentication, continue with grommunio-auth.
More product context is available on the grommunio-antispam page.
Sources and validated basis
grommunio documentation: architecture and the role of grommunio-antispam in the suite.
Rspamd documentation: symbols, score model, actions, worker model and core features.
Validated reference installation: grommunio 2026.06.1, grommunio-antispam 4.1.5, Postfix milter, Redis, GTUBE scan, Bayes learning and WebUI screenshots.
Operate grommunio antispam in production
ForgeOne plans and operates grommunio as a collaboration platform including licensing, mail flow, DNS, Rspamd tuning, monitoring, backup and support. If you want to use grommunio as an Exchange alternative or mail security platform, we can review architecture, licensing and rollout with you.






