milter-regex doesn't seem to be miltering!
Mike Brown
mike at skew.org
Wed Sep 27 08:29:45 PDT 2006
Chris Martin wrote:
> I am trying to use milter-regex to pre-sort e-mail/spam before passing
> it on to clamav and spamassassin, but it doesn't seem to be working.
>
> Here are my first, slightly lame, rules:
>
> reject "Spam not welcome"
> header /Subject:/ /\b(PHA)+([a-zA-Z]+(RMA))\b/
>
> reject "Spam not welcome"
> header /Subject:/ /\b(PHA)+([a-zA-Z]+(RMACY))\b/
>
> discard
> header /Subject:/ /TESTSTRING45819203/
This isn't really the place to ask about it, but there's not really a better
forum, either. Maybe freebsd-questions. Anyway, lots of things could be going
wrong.
First, the obvious: is milter-regex running?
# ps -auwwx | fgrep milter
mailnull 34677 0.0 1.3 14772 6800 ?? Ss 28Aug06 38:12.65 /usr/local/libexec/milter-regex -c /usr/local/etc/milter-regex.conf
Did you follow the instructions in the port's pkg-install to set it up to
start at boot time? It involves editing /etc/rc.conf.local (or rc.conf) and
/etc/rc.local.
Did you set up logging? Make sure your /etc/syslog.conf contains lines like
the following:
*.=debug /var/log/debug.log
!milter-regex
daemon.err;daemon.notice /var/log/maillog
and then 'kill -HUP `cat /var/run/syslog.pid`'. Now you should get copious
logs to look at. If your milter-regex.conf has errors, you should see a
message about it in maillog. In debug.log you should see everything the milter
is processing, up to the point where a rule is matched. I like to tail -f my
debug.log sometimes and see what gets through, and make sure I don't have any
false positives.
You might want to take a look at my milter-regex.conf:
http://skew.org/~mike/milter-regex.conf
In any case, you definitely have problems with your regexes. milter-regex uses
basic POSIX regular expressions by default, but you're using "+" to mean
1-or-more, so you need to append an "e" to the end to flag it as an 'extended'
POSIX regex. Your "\b" is presumably meant to be a word boundary, but that's a
feature of Perl-compatible regexes, not POSIX, so get rid of those.
Also, I'm not sure about what you're trying to match. (PHA)+ would match one
or more "PHA"s. The parentheses in ([a-zA-Z]+(RMA)) are not doing anything but
wasting memory; [a-zA-Z]+RMA would mean the same thing, matching 1 or more a-z
(case insensitive) followed by "RMA". If you want the "CY" at the end to be
optional, you'd add "(CY)?" instead of creating a new regex for it.
The colon isn't included in the header that gets tested, so you'll never match
with "Subject:". You want "Subject". But I prefer "^Subject$" because it
ensures that it matches only "Subject" and not something like
"X-Original-Subject".
Finally, if you have multiple rules, you can put them together under one
"reject" line. Again, see my milter-regex.conf for examples, and take note of
the comments therein... For example, I'm doing a lot of "reject"ing but
ultimately I think I want discard spam, not reject it, in order to avoid
having the sending system generate a bounce that goes to the poor soul whose
email was used as the return address.
Mike
More information about the freebsd-ports
mailing list