Botnet.pm had a small problem in it (I rewrote the IPINHOSTNAME check, and forgot one of the 4 stanzas, so some hosts may have gotten past it). I've put up a new version of the tar file with the problem fixed. Since there weren't any other problems, I'm not incrementing the version number or anything.

BUT: if you downloaded 0.7 before the time you got this message, you should probably re-download it.


Sorry,

John


John Rudd wrote:

Botnet 0.7 is up and available.

http://people.ucsc.edu/~jrudd/spamassassin/Botnet-0.7.tar


Botnet is a SpamAssassin plugin which attempts to identify hosts which are likely to be spambot/virusbot hosts, using various DNS fingerprints of the submitting relay.


New things in 0.7:


1) BOTNET_SOHO -- If the sender's (chosen from Envelope-From, Return-Path, or From, in that order) mail domain (the part after the @ sign) resolves back to the relay's IP address, or has an MX host which resolves back to the IP address, AND the sender's mail domain does NOT match the PTR record for the relay, then we'll assume this is a "small office/home office" mail server. We'll exempt them from BOTNET being triggered. (note: someone suggested that this check also try to resolve the HELO string, I make a note in my code as to why this is an extremely bad idea, and have a commented out block of code there for anyone who wants to go down that path ... but, really, don't)


2) Botnet API -- want to include the Botnet.pm module in other Perl code? Maybe call "check_botnet" from mimedefang-filter so you can block before a message gets to SpamAssassin? I've made an API for it. The routines that SA calls use this API, so it's the _exact_same_ code. There's now an included perl program "Botnet.pl" which takes an IP address CLI argument, and an optional main-domain CLI argument. It will tell you which rules do and don't get triggered. It also serves as an example of using the API. (you will still need to have SpamAssassin installed in order to use Botnet.pm in this fashion, even if you're using the API in a program that doesn't call SA)

The file Botnet.api.txt also describes the API somewhat.


3) BOTNET_CLIENT and BOTNET are now actual rules instead of meta rules. The individual rules are still there, just with zero'd scores. You can now easily pick between 1 big rule (BOTNET doing eval:botnet()), meta rules (detailed in the file Botnet.variations.txt), or piece-meal calling of the individual checks (also detailed in Botnet.variations.txt).


4) config option: botnet_pass_trusted (all|public|private|ignore)
This defaults to "public". If you have any public IP addresses in your relays-trusted list, then Botnet wont trigger. Private means "any private IP addresses", where that includes 127.*, 10.*, etc.. All means either of those two. Ignore means "do what Botnet used to do: not even look at the trusted relays, just look past them". The idea is: if you got this from a trusted relay, we can assume it wasn't a Botnet.


5) botnet_pass_auth now looks at the trusted relays. It probably should have been doing that all along. It no longer looks at the untrusted relays.


6) Rules that get triggered now use $permsgstatus->test_log to record information. The individual rules just list "[rulename,ip=$ip,hostname=$host,maildomain=$domain]" or an appropriate subset of that based on which rule it is. BOTNET_CLIENT and BOTNET also include a list of sub-rule names that were triggered. So, you might see this:


[botnet0.7,ip=1.2.3.4,host=dsl-1-2-3-4.isp.net,maildomain=spammer.com,baddns,ipinhostname,clientwords,client]

or

[botnet_nordns,ip=2.3.4.5]

or

[botnet_soho,ip=3.4.5.6,hostname=3.4.5.6.isp.net,maildomain=non-spammer-soho.org]


7) shawcable.net and ocn.ne.jp seem to also be botnet sources, but their hostnames don't fit any of my other patterns. Luckily, they DO fit some pattern, and it's simple enough to not need a code based rule, just a regular conventional expression based rule. I've created BOTNET_SHAWCABLE and BOTNET_OCNNEJP rules to cover these two.


8) The file Botnet.variations.txt exists now with different suggested alternative ways to do Botnet rules.


9) Botnet.credits.txt exists


10) There's now a $VERSION variable within Botnet.pm. You'll see its value in the test_log() output for check_botnet (you can see it in the example above), and in the SpamAssassin debug output ("spamassassin -D") as the module is loaded and instantiated ("new" is called).


I think that's everything...

Reply via email to