Het DSPAM spamfilter met KMail gebruiken

Auteur: Wilbert Berendsen
Herziening 0.1
Copyright © 2004 KDE-nl team

DSPAM is een zelflerend, statistisch en razendsnel anti-spam filter dat op allerlei manieren kan worden gebruikt. Daardoor is het tamelijk ingewikkeld om te installeren voor de minder ervaren gebruiker.

In deze HOWTO installeren we DSPAM van broncode, en stellen we KMail handmatig in. De antispam assistent van KMail is nog niet op DSPAM voorbereid, zodra dit het geval is wordt de laatste stap natuurlijk nog eenvoudiger.

1. DSPAM installeren.

We installeren DSPAM zo, dat alle gebruikers van het lokale systeem er gebruik van kunnen maken. Om kenmerken en statistieken van e-mail bij te houden gebruikt DSPAM een database. MySQL geniet de voorkeur, maar Sqlite 2.x werkt ook uitstekend. In dit voorbeeld gaan we van Sqlite uit (installeer daar de laatste 2.x versie van).

Download nu DSPAM 3.x van www.nuclearelephant.com/projects/dspam/sources. Pak het uit en ga op de commandoregel naar de uitgepakte directory.

Configureer DSPAM met:

./configure --prefix=/usr/local --with-dspam-home=/var/dspam \
	--enable-signature-headers \
	--disable-user-logging --disable-system-logging \
	--enable-delivery-to-stdout --enable-spam-delivery

Dit zorgt ervoor dat DSPAM mailtjes hoe dan ook doorlaat, maar ze van een merkteken voorziet dat aangeeft of het volgens DSPAM spam is of niet; en dat DSPAM gemakkelijk in een pijpleiding gebruikt kan worden.

Compileer DSPAM:

make

en installeer DSPAM als root (na su het root-wachtwoord invoeren):

su
make install
chmod 2755 /usr/local/bin/dspam
mkdir -p /var/dspam/data
cd /var/dspam
chmod 0770 . data
chown root.mail /usr/local/bin/dspam . data
touch untrusted.mailer_args
echo root > trusted.users
exit

Zo kunnen alle gebruikers de dspam-binary gebruiken zonder dat ze de gegevens van andere lokale gebruikers zouden kunnen misbruiken. In de map data houdt DSPAM voor elke gebruiker de aangeleerde statistieken bij.

2. DSPAM de basiskennis leren.

Verzamel een flinke map spam mail. Let op: deze mail mag niet al verwerkt zijn door een ander spam-filter programma, want anders zal DSPAM de door dat programma toegevoegde kenmerken ten onrechte als spam beschouwen.

Maak een tijdelijke email-map aan in KMail, geef deze de naam SPAM, en het formaat mbox (dus niet maildir). Verzamel alle spam in deze map. Laat KMail de map comprimeren.

Nu voeren we de hele map met spammailtjes aan DSPAM. Open een terminal en typ het volgende commando:

dspam --mode=teft --class=spam --source=corpus < Mail/SPAM

Open KMail en maak een map aan met de naam NOSPAM, ook weer in mbox formaat. Verzamel hierin een zo groot mogelijke hoeveelheid gewone, geldige e-mail. Let op: verplaats er geen berichten naar toe maar kopiëer ze. Vermijd ook e-mail met grote attachments. Comprimeer de map NOSPAM ook weer. Geef nu in de terminal het volgende commando:

dspam --mode=teft --class=innocent --source=corpus < Mail/NOSPAM

Nu kent DSPAM een beetje de basis, maar je zult DSPAM nog wel regelmatig moeten vertellen dat bepaalde mailtjes spam zijn. Maar het programma leert snel en is buitengewoon accuraat; ik heb nog nooit een onterechte classificatie gezien.

3. KMail instellen om DSPAM te gebruiken

Open de dialoog Filters instellen.

Check-filter aanmaken

Maak een nieuw filter aan. Geef het de naam "DSPAM: check" en plaats het onder de filters die je al hebt, zodat e-mail van al bekende afzenders niet nog eens nodeloos gescand wordt.

Selecteer als criteria:
(x) Komt overeen met al het volgende
<grootte> is kleiner dan 100000 bytes

Selecteer als filterhandeling:
Doorsluizen via: dspam --stdout --deliver=innocent,spam --mode=teft

Selecteer onder uitgebreide opties:
Dit filter toepassen [X] op inkomende berichten.
Maak de overige selectievakjes leeg.

Check filter
(Klik op de afbeelding voor een vergroting)

Filter om spam weg te gooien

Maak een nieuw filter aan. Geef het de naam "DSPAM: spam" en plaats het direct onder het vorige filter.

Selecteer als criteria:
(x) Komt overeen met al het volgende
X-DSPAM-Result bevat Spam

Selecteer als filterhandeling:
Naar map verplaatsen: Prullenbak

Selecteer onder uitgebreide opties:
Dit filter toepassen [X] op inkomende berichten, en
[X] Als dit filter overeenkomt, verwerking hier stoppen.
Maak de overige selectievakjes leeg.

Filter
(Klik op de afbeelding voor een vergroting)

Classificeren van gemiste spam

In het begin komt het nog regelmatig voor dat DSPAM spam erdoor laat glippen. Daarom maken we een filterhandeling aan die spam-mailtjes alsnog aan DSPAM leert.

Maak een nieuw filter aan, geef het de naam "Markeren als spam". Laat de criteria leeg en voer als filterhandelingen in:
Doorsluizen via: dspam --stdout --deliver=innocent,spam --mode=teft --class=spam --source=error
Naar map verplaatsen: Prullenbak

Selecteer onder Uitgebreide opties:
[X] Dit filter toevoegen aan het menu "Filter toepassen", en maak de overige selectievakjes leeg. Geef de handeling een leuk pictogram.

Handmatig filter
(Klik op de afbeelding voor een vergroting)

Klaar! Sluit nu de filterdialoog en DSPAM zal de inkomende mail gaan filteren. Kom je een spam-mailtje tegen, klik er dan rechts op en kies Filter toepassen->Markeren als spam.

Na verloop van enige tijd zul je merken dat DSPAM goed begint te filteren. Mocht je merken dat DSPAM een geldig mailtje onterecht als spam aanmerkt (wat in de eerste week nog wel een enkele keer kan gebeuren), dan kun je naar analogie van het derde filter nog een vierde aanmaken, waarbij je in het doorsluis-commando de optie --class=spam dan verandert in --class=innocent, en natuurlijk de bestemmingsmap van Prullenbak naar bijvoorbeeld Inbox. Met dat handmatige filter kun je DSPAM dan vertellen dat dat mailtje geen spam was.

Het is toegestaan dit document te kopiëren, te verdelen en/of te wijzigen onder de voorwaarden van de GNU vrije-documentatielicentie, versie 1.1 of een latere versie gepubliceerd door de Free Software Foundation; zonder invariante paragrafen, zonder vooromslagteksten, en zonder achteromslagteksten.

Over deze site | Laatst gewijzigd: $Date: 2005/04/24 18:27:07 $ door: $Author: tijmen $