Bmf, procmail, mutt - hantera spam

Från Unix.se, den fria unixresursen.

bmf är ett mailfilter som använder Bayes algoritm (se Paul Grahams artikel "A plan for spam (http://www.paulgraham.com/spam.html)"). Lite kort innebär det att den filtrerar efter förekommandet av olika ord i mail, ett statistiskt filter helt enkelt. Fördelen med den här typen är att den anpassar sig efter dina egna mail och efter spammarnas nya sätt att formulera sina onda spammail på.

Det finns en uppsjö mailfilter som baserar sig på samma algoritm och är skrivna på ett flertal olika språk. bmf inriktar sig på att kräva så få bibliotek och externa program som möjligt. Snabb behandling av mailen och en enkel och elegant implementation är de andra projektmålen. Just bmf är skrivet i C där kärnan är tagen från bogofilter (http://sourceforge.net/projects/bogofilter/). För att lagra det som filtret lärt sig av mailen den fått finns det ett par alternativ att välja bland: libdb, MySQL eller en helt vanlig textfil.

Installation

Installationen är relativt enkel om du redan använder dig av procmail för att filtrera dina mail, i annat fall får du först bekanta dig med procmail (http://www.procmail.org/). Ladda därefter ner bmf (http://sourceforge.net/projects/bmf/). Vid kompileringen står du inför ett val, --disable-libdb och --disable-mysql, beroende på vilken databas du tänker använda dig av.

För att bmf ska kunna känna igen vad som är spam respektive mail behövs det träning. Detta löses enklast genom att skicka alla inkommande mail genom bmf. Här följer ett exempel på hur reglerna i .procmailrc kan se ut.

:0fw
| bmf -p

:0:
* ^X-Spam-Status: Yes
IN.spam # Mailboxen för spam.

:0w
IN.received # Om du saknar andra regler för filtrering, annars kan du utelämna denna regeln.

Användning

I fall bmf nu skulle göra fel kan det vara bra att ha snabbknappar för detta i mutt. Lägg till nedstående rader i din .muttrc. Använder du nu någon annan klient får du kolla respektive dokumentation.

macro index <f12> "|bmf -S\n<save-message>=IN.spam\n" "SPAM"
macro index <f11> "|bmf -N\n<save-message>=IN.received\n" "NOSPAM"
macro pager <f12> "|bmf -S\n<save-message>=IN.spam\n" "SPAM"
macro pager <f11> "|bmf -N\n<save-message>=IN.received\n" "NOSPAM"

Nu behöver bara ditt filter träning. När det kommer ett mail som bmf missar säger du helt enkelt till att detta var ett spam, och tvärt om i fall det inte var ett spammail. Vill du snabba upp processen kan du låta filtret gå igenom dina redan hämtade/lästa mail. Ett alternativ är att ladda hem spammail och låta filtret lära sig av dem. Denna metod rekommenderas dock inte av upphovsmakaren med tanke på att det då inte är dina mail filtret lär sig av.

Personliga verktyg