Een Bayesian-filter vullen met data

In een vorige posting werd SpamAssassin zo geconfigureerd dat het Bayesian-filter gebruik maakte van PostgreSQL om de data in op te slaan. Ook werd aangegeven dat er niet automatisch werd geleerd met de optie bayes_auto_learn 0 om zo te voorkomen dat het filter zijn eigen waarheid ging verzinnen van wat spam was en wat niet.

Een manier om aan data te komen voor het filter is door een mailbox met alleen ham en een mailbox met alleen spam regelmatig te importeren. De ham is natuurlijk nog wel gemakkelijk aan te komen door deze mailbox aan te melden op een paar mailinglists en nieuwsbrieven waarvan je weet dat ze te vertrouwen zijn en bijna 100% non-spam zijn en dus geschikt zijn voor de ham mailbox.

Voor spam zelf wordt het wat lastiger. Je kan vertrouwen op wat je gebruikers markeren als spam en dan importeren, maar hierdoor loop je altijd achter de feiten aan. Een makkelijkere en betrouwbare methode is door spamtraps op te zetten, maar het kan even duren voordat deze functioneel zijn. Je kan op sommige websites die jezelf onder beheer hebt de onderstaande string opnemen en hopen dat de robotjes van e-mailverzamelaars het oppakken.

<!-- <a href="mailto:spamtrap@example.org">spamtrap@example.org</a> -->

Het kan lang duren voordat er resultaat is. Een tweede optie kan zijn door in bepaalde groepen zoals bijvoorbeeld in nl.test op usenet te posten en dit kan redelijk snel resultaat opleveren. Een derde optie kan zijn door een PGP-key te uploaden naar de keyservers, maar deze methode is niet aan te bevelen aangezien het echt vervuiling is en je wordt traceerbaar.

Nu je spam en ham netjes in hun eigen mailbox binnenkomen kan je met de volgende commando’s op gestelde tijden je filter opschonen en vullen met spam en ham:

sa-learn -u amavis --force-expire
sa-learn -u amavis --spam --mbox spam.mbox
sa-learn -u amavis --ham --mbox ham.mbox

Zoals te zien is forceer ik dat alles gedaan wordt onder de gebruiker amavis aangezien amavisd-new de daemon is die tussen Postfix en SpamAssassin en ClamAV zit om de mail te scannen, te beoordelen en in geval van een virus ook in quarantine te plaatsen. Er kan binnen SpamAssassin met de optie bayes_sql_override_username amavis in local.cf hetzelfde effect worden afgedwongen.