Hi all, imagine you have an address like "junk@<mydomain>" added to the list of traps. Now, someone sends mails to you (or, via spamlogd, vice versa) then spams the trap address. Sendmail will let him pass, and either reject junk@ or have it alia- sed to /dev/null. Not with me b:
Diffs slightly hand-edited to only contain relevant material. ====== /etc/changelist diffs (-OLD +NEW) ====== --- /var/backups/etc_changelist.current Tue Aug 12 22:51:27 2008 +++ /etc/changelist Mon Jan 12 15:48:29 2009 @@ -56,14 +56,15 @@ /etc/mail.rc /etc/mail/access /etc/mail/aliases /etc/mail/genericstable /etc/mail/helpfile +/etc/mail/junk.sh /etc/mail/local-host-names /etc/mail/localhost.cf /etc/mail/mailertable /etc/mail/relay-domains /etc/mail/sendmail.cf /etc/mail/spamd.conf /etc/mail/submit.cf /etc/mail/trusted-users /etc/mail/virtusertable ====== /etc/mail/aliases diffs (-OLD +NEW) ====== --- /var/backups/etc_mail_aliases.current Fri Jan 9 14:54:44 2009 +++ /etc/mail/aliases Mon Jan 12 15:20:26 2009 @@ -81,3 +81,4 @@ # msgs: "|/usr/bin/msgs -s" root: [b&] +junk: "|/bin/mksh /etc/mail/junk.sh" ====== /etc/sudoers diffs (-OLD +NEW) ====== --- /var/backups/etc_sudoers.current Wed Jan 7 14:59:29 2009 +++ /etc/sudoers Mon Jan 12 15:37:54 2009 @@ -42,3 +42,5 @@ # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now + +%daemon ALL=(root) NOPASSWD: /usr/sbin/spamdb The sudoers line is needed to make c/etc/mail/junk.shc able to delete the whitelisting line and add a TRAPPED entry. It runs as daemon, as itbs listed in /etc/mail/aliases (do not forget to (cd /etc/mail; sudo make) after editingB9), although I considered adding a LOCAL_MAILER to openbsd-proto.mc espe- cially for this. Now, herebs junk.shB2: -----BEGIN CUTTING HERE MAY DAMAGE YOUR SCREEN SURFACE----- #!/bin/mksh export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/mpkg/bin:/usr/mpkg/sbi n:/usr/local/bin:/usr/local/sbin # yeah, we all love regular expressions and shell scripts like this one b: # you are not expected to understand this # b" change all "`" to "_" # b" change all newline to "`" # b" change all "` " (space or tab at beginning of line) to just a space # b" change back "`" to newline (above ones were joined) # b" take the first line beginning with "Received" # b" get the IPv4 or IPv6 address of the sender, without the "IPv6:" praefix # you are not expected to understand the above textual description # eitherB3, just look at the actual shell script line then :C> ip=$(tr '`\n' '_`' | sed 's/`[ ]/ /g' | tr '`' '\n' | \ grep '^Received' | head -1 | \ sed -n 's/^[^(]*: from [^(]* ([^]]*\[\(IPv6:\)*\([^]]*\)\]) by .*$/\2/p') if [[ -n $ip ]]; then # delete from whitelist sudo spamdb -d "$ip" # trap for 24 hours sudo spamdb -t -a "$ip" fi exit 0 -----END CUTTING HERE MAY DAMAGE YOUR SCREEN SURFACE----- If anyone has a better method for extracting the IPv4 or IPv6 address, Ibd be delighted to hear it. Using a custom mailer would actually make some macros available, but I donbt know if the sender socket address is among them. bye, //mirabilos b Kudos to OpenBSD for adding a Makefile there, by the way. Nice idea. b! While I did install http://mirbsd.de/mksh on the box, oksh (OpenBSD /bin/ksh) _might_ also work. Actually, should. I have an unofficial port for mksh waiting for anyone to commit itb& b" Like some of my colleagues b; -- tarent Gesellschaft fC<r Softwareentwicklung und IT-Beratung mbH Heilsbachstr. 24, 53123 Bonn | Poststr. 4-5, 10178 Berlin fon: +49(228) / 52675-0 | fon: +49(30) / 27594853 fax: +49(228) / 52675-25 | fax: +49(30) / 78709617 GeschC$ftsfC<hrer Boris Esser, Elmar Geese HRB AG Bonn 5168 Ust-ID: DE122264941