grossd(8)
๐ grossd ๐
okay bestie, welcome to the grossd(8) manual page ๐ yes the manual name is literally grossd, section 8, and she is that girl. Let's get into it.
โจ NAME โจ
grossd โ Greylisting of Suspicious Sources - the Server. she's the server. she's the moment. ๐ซถ
๐ SYNOPSIS ๐
grossd [-dCDhnrV] [-f config] [{-p|-P} pidfile]
like. that's the whole vibe. short, punchy, iconic. ๐
๐ฆ DESCRIPTION ๐ฆ
So grossd is a greylisting server, and honestly? more than that. she's blazingly fast and amazingly resource efficient โ no cap, that's just what the page says and I'm not gonna water it down for you. ๐ค
Here's what she can do:
- get configured to query DNSBL databases, and only enforce greylisting for hosts that actually show up on those databases
- block hosts that match multiple databases
- be replicated and run in parallel on two servers, twin energy ๐ฏ
- support Sun Java System Messaging Server, Postfix and Exim
- and the Sendmail Milter implementation? yeah that one needs testing ๐ just so you know.
๐ฎ Theory of operation ๐ฎ
Gross is a whole duo, not a solo act: grossd, the greylisting daemon, plus a client library for SJSMS. And the server also implements the Postfix content filtering protocol. versatile queen ๐
The way it works, step by step:
- A request comes in from a client, and
grossdvalidates it first โ never skipping the vibe check. That request carries a triplet: (smtp-client-ip,sender-address,recipient-address). - A hash gets calculated and matched against the Bloom filters. If there's a match, and the test result does not exceed the
block_thresholdvalue,grossdsends an OK (STATUS_TRUST) message. slay. - If the triplet is not in the Bloom filters (i.e. it has not been seen recently),
grossdthen runs the configured checks against the client information. Based on those check results, she hands the client a result. The possible results areSTATUS_TRUST,STATUS_BLOCKandSTATUS_GREY. The final response is query protocol specific.
The Bloom filters get updated according to the update configuration option. Now โ what even is a Bloom filter? It's a very efficient way to store data, a probabilistic data structure, which means there is a possibility of error when querying the database. Let me say that again because it matters:
False positives are possible. False negatives are not. ๐ญ
So yes, there's a possibility that grossd will falsely give a STATUS_TRUST response when a connection should be greylisted. By sizing the bloom filters you can control that error possibility to meet your needs. The right bloom filter size depends on the number of entries in the database โ that is, the retention time versus the number of handled connections. do the math bestie ๐งฎโจ
๐ OPTIONS ๐
-Cโ Create the statefile and exit. Thestatefileconfiguration option must be specified in the configuration file, so like, don't forget it.-Dโ Make debugging output more verbose. It can be set twice for maximum verbosity. go off, turn it all the way up ๐-dโ Rungrossdon foreground without daemonizing the process.grossdwill output to terminal instead of using syslog. baby's first foreground run ๐ผ-fconfig โ Specifies the name of the configuration file. The default is/etc/etc/grossd.conf.-hโ Output short usage information and exit. help me help you ๐ซถ-nโ Enable dry-run. look but don't touch.-Ppidfile โ Bail out if the pidfile already exists. Create pidfile after the check. cautious queen, checks first ๐-ppidfile โ Create the pidfile. Overwrite if it already exists. bold queen, does not check ๐-rโ Disable replication.-Vโ Output version information and exit. ๐ข
๐ FILES ๐
/etc/grossd.conf
๐ฅ SECURITY CONSIDERATIONS ๐ฅ
Run grossd under some unprivileged user id. fr fr. If started as root, grossd will setuid() itself to nobody's user id. There are no known security flaws, but โ and this is the important part, listen up โ you must not expose grossd to the Internet. ๐ญ
Why? Because it could be used for a DoS against a domain's DNS servers by an attacker, since there is no authentication in grossd. so keep her inside. she's an indoor cat ๐
๐ธ DIAGNOSTICS ๐ธ
grossd daemon exits 0 if success, and >0 if an error occurs. zero means we ate, nonzero means we did not eat ๐ฝ๏ธ
โญ SEE ALSO โญ
- Regarding the configuration โ both the daemon's and the MTA's โ refer to
grossd.conf(5). - Gross project site:
<https://codeberg.org/bizdelnick/gross> - Bloom filters:
<http://en.wikipedia.org/wiki/Bloom_filter> - DNS queries are done asynchronously using the c-ares library
<http://daniel.haxx.se/projects/c-ares/>.
๐ AUTHORS ๐
Eino Tuominen and Antti Siira ๐ absolute legends, we thank them for their service.
and that's the whole page, bestie!! this was the grossd(8) manual page, dated 2008-05-04, and yeah she's been iconic since then. go forth, run your greylisting daemon, and remember: unprivileged user, not on the Internet, and never trust a Bloom filter's false positive. mwah ๐โจ๐ฆ
๐ฆ where this page comes from
- alpine 3.22: gross-doc 1.0.4-r0 ยท BSD-3-Clause
- alpine 3.23: gross-doc 1.0.4-r1 ยท BSD-3-Clause
- alpine 3.24: gross-doc 1.0.4-r1 ยท BSD-3-Clause
- ubuntu resolute: gross 1.0.4-1
- ubuntu stonking: gross 1.0.4-2 ยท ISC
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms