OpenSMTPD filter to catch spammers using one or more spamtraps.
git clone https://netsend.nl/opensmtpd-filter-spamtrap.git
cd opensmtpd-filter-spamtrap
go build -o filter-spamtrapinstall -m555 -gbin filter-spamtrap /usr/local/libexec/smtpd/
mkdir -m750 /var/spamtrap
useradd -d /var/spamtrap -s /sbin/nologin spamtrap
chown -R spamtrap:wheel /var/spamtrap
touch /etc/mail/spamtraps
chmod 640 /etc/mail/spamtraps
chown root:spamtrap /etc/mail/spamtrapsSpamtrap addresses should be added to a file, one per line. Caught spammers are saved in a tab separated file in /var/spamtrap/trapped.tsv that can be easily processed with grep(1) and cut(1).
Example using two spamtrap addresses:
echo sp@mtrap.nl > /etc/mail/spamtraps
echo spamtrap2@example.com >> /etc/mail/spamtraps
smtpd.conf:
filter "spamtrap" proc-exec "filter-spamtrap" user spamtrap group spamtrap
listen on egress filter { spamtrap }
usage: filter-spamtrap [-trapfile file] [-expire duration] [-redirect addr] [-spammers dir]
filter-spamtrap -stats [-expire duration] [-spammers dir]
-expire duration
after how long a spammer should be unlisted (default 192h)
-redirect string
rewrite recipient of trapped mail instead of adding an "X-Spam" header
-spammers string
directory to save caught spammers in (default "/var/spamtrap")
-stats
print statistics about spammers and exit
-trapfile string
file containing one trap address per line (default "/etc/mail/spamtraps")