grossd(8)

๐Ÿ“ฆ
version 1.0.4 ยท 2 versions
, in alpine 3.22, alpine 3.23, alpine 3.24, ubuntu resolute, ubuntu stonking

๐ŸŽ€ 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:

  1. A request comes in from a client, and grossd validates it first โ€” never skipping the vibe check. That request carries a triplet: (smtp-client-ip, sender-address, recipient-address).
  2. A hash gets calculated and matched against the Bloom filters. If there's a match, and the test result does not exceed the block_threshold value, grossd sends an OK (STATUS_TRUST) message. slay.
  3. If the triplet is not in the Bloom filters (i.e. it has not been seen recently), grossd then runs the configured checks against the client information. Based on those check results, she hands the client a result. The possible results are STATUS_TRUST, STATUS_BLOCK and STATUS_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. The statefile configuration 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 โ€” Run grossd on foreground without daemonizing the process. grossd will output to terminal instead of using syslog. baby's first foreground run ๐Ÿผ
  • -f config โ€” 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.
  • -P pidfile โ€” Bail out if the pidfile already exists. Create pidfile after the check. cautious queen, checks first ๐Ÿ˜Œ
  • -p pidfile โ€” 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 โญ


๐Ÿ‘‘ 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