Filtrering av epost
Sender du meg en epost via min offisielle adresse, rhj@rhj.info, vil
brevet bli kjørt gjennom et Java-program. Dette programmet
sjekker så om det er et seriøst brev.
Først når programmet er overbevist om at brevet
ikke er et reklamebrev, og at du er en seriøs avsender, blir
brevet sent videre til meg.
Programmet er skrevet i Java, og har intet grafisk
brukergrensesnitt. Man starter det opp i et konsollvindu og programmet
vil først lese inn regler fra en tekstfil. (For tiden er det
165.801 slike regler!) Så sjekker programmet med jevne
mellomrom brev til alle mine offentlig kjente kontoer. Her er eksempel
på et typisk reklamebrev jeg ikke er interessert i
å motta:
Her ser vi så hvordan programmet behandlet dette brevet:
** For mange tall i avsenderadresse", 3 ) --> 3
**
For mange etterfølgende blanke i tema", 2 ) --> 5
**
Ikke godkjent innhold [#1:20020517095341] -- ", 1 ) --> 6 **
marginheight
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 7 **
align="center"
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 8 **
align="center"
**
Ikke godkjent innhold [#167:20020902142608] -- ", 1 ) --> 9 **
spacer.gif
**
Ikke godkjent innhold [#167:20020902142608] -- ", 1 ) --> 10 **
spacer.gif
**
Ikke godkjent innhold [#167:20020902142608] -- ", 1 ) --> 11 **
spacer.gif
**
Ikke godkjent innhold [#1:20021016092425] -- ", 1 ) --> 12 **
<td colspan=3>
**
Ikke godkjent innhold [#1:20021016092425] -- ", 1 ) --> 13 **
<td colspan=3>
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 14 **
align="center"
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 15 **
align="center"
**
Ikke godkjent innhold [#229:20020914190954] -- ", 1 ) --> 16 **
eager to learn
**
Ikke godkjent innhold [#478:20020813131302] -- ", 1 ) --> 17 **
but they are
**
Ikke godkjent innhold [#innhold-2001-04-24-for-mange-utropstegn!] -- ",
1 ) --> 18 ** !!!
**
Ikke godkjent innhold [#251:20020828114435] -- ", 1 ) --> 19 **
get it now
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 20 **
align="center"
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 21 **
align="center"
**
Ikke godkjent avsender [#478:20020914190954] -- ", 10 ) --> 31
** allison
**
Ikke godkjent avsender [#289:20021009175719] -- ", 10 ) --> 41
** badones
**
Ikke godkjent avsender [#290:20021009175719] -- ", 10 ) --> 51
** killerlatina
**
Ikke godkjent mottager [#M2:10/1-2002] -- ", 3 ) --> 54 ** webtv
**
Ikke godkjent tema [#6:20010417122103] -- ", 2 ) --> 56 ** s e x
**
Ikke godkjent tema [#3:20020205142007] -- ", 10 ) --> 66 ** f r
e
**
Ikke godkjent tema [#4:20020205142007] -- ", 10 ) --> 76 ** r e
e
18/11-2002, 07:01:12, Ignorerer junk-mail, #0, fra: Allison
<badones8877164@killerlatinas.com>, til:
rhinson5@webtv.net rhinson@web-net.com rhinton@ans.net
rhinton@ltinet.com rhinton@one1com.com rhintz@cvs.net, tema: F R E E S
E X FOR LIFE. |
De to første linjene stammer fra regler som er definert i
selve Java-programmet, regler som altså
ikke
er blant de 77913 reglene fra datafila. Det første
programmet reagerer på, er antall tall i avsenderadressen:
|
** For mange tall i avsenderadresse", 3 ) --> 3
|
Det er til sammen syv tall i avsenderadressen, hvilket gjør
at programmet gir brevet tre prikker. Den andre regelen har å
gjøre med antall etterfølgende blanke i tema:
|
** For mange etterfølgende blanke i tema", 2 ) --> 5
|
Det var til sammen to instanser av etterfølgende blanke,
hvilket medfører to nye prikker. Vi er nå oppe i
til sammen fem prikker. Men programmet filtrerer ikke bort et brev
før antall prikker har kommet opp i tolv. Det er
nå programmet går igjennom de 77913 reglene fra
datafila. Først finner programmet mistenkelige ord og utrykk
i selve innholdet:
** Ikke godkjent innhold [#1:20020517095341] -- ", 1 ) --> 6 **
marginheight
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 7 **
align="center"
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 8 **
align="center"
**
Ikke godkjent innhold [#167:20020902142608] -- ", 1 ) --> 9 **
spacer.gif
**
Ikke godkjent innhold [#167:20020902142608] -- ", 1 ) --> 10 **
spacer.gif
**
Ikke godkjent innhold [#167:20020902142608] -- ", 1 ) --> 11 **
spacer.gif
**
Ikke godkjent innhold [#1:20021016092425] -- ", 1 ) --> 12 **
<td colspan=3>
**
Ikke godkjent innhold [#1:20021016092425] -- ", 1 ) --> 13 **
<td colspan=3>
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 14 **
align="center"
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 15 **
align="center"
**
Ikke godkjent innhold [#229:20020914190954] -- ", 1 ) --> 16 **
eager to learn
**
Ikke godkjent innhold [#478:20020813131302] -- ", 1 ) --> 17 **
but they are
**
Ikke godkjent innhold [#innhold-2001-04-24-for-mange-utropstegn!] -- ",
1 ) --> 18 ** !!!
**
Ikke godkjent innhold [#251:20020828114435] -- ", 1 ) --> 19 **
get it now
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 20 **
align="center"
**
Ikke godkjent innhold [#118:20020905064642] -- ", 1 ) --> 21 **
align="center" |
Programmet fant 15 mistenkelige ord eller utrykk. Hver av dem gav
brevet en ny prikk. Vi er nå oppe i 21 prikker, og programmet
kunne for lengst ha avsluttet søk etter mistenkelig innhold.
Dette er utvilsomt en spam. Men for dokumentasjonens skyld, har jeg
valgt å la nåværende versjon av
programmet fortsette søket. De syv siste treffene har
å gjøre med avsender, mottager og tema:
** Ikke godkjent avsender [#478:20020914190954] -- ", 10 ) -->
31 ** allison
**
Ikke godkjent avsender [#289:20021009175719] -- ", 10 ) --> 41
** badones
**
Ikke godkjent avsender [#290:20021009175719] -- ", 10 ) --> 51
** killerlatina
**
Ikke godkjent mottager [#M2:10/1-2002] -- ", 3 ) --> 54 ** webtv
**
Ikke godkjent tema [#6:20010417122103] -- ", 2 ) --> 56 ** s e x
**
Ikke godkjent tema [#3:20020205142007] -- ", 10 ) --> 66 ** f r
e
**
Ikke godkjent tema [#4:20020205142007] -- ", 10 ) --> 76 ** r e
e |
Noen av reglene er sterke, og gir 10 prikker, andre er svakere og gir
bare 2 eller 3 prikker. Alt i alt kom vi opp i 76 prikker, mer enn nok
til at brevet ble klassifisert som junk, spam og reklame. Men legg
merke til at ingen av treffene var i seg selv nok til en slik
avgjørelse! Selv ikke en regel som gir 10 prikker, er nok.
Det var
summen av alle prikkene som er
avgjørende!
Hadde ikke reglene vært gode nok til at brevet ble
stoppet, ville jeg lagt til nye regler umiddelbart. F.eks. ville
avsender, mottager og tema bli kopiert inn i et eget program
på denne måten:
Ut fra dette ville jeg automatisk fått generert
følgende regler:

Disse reglene ville jeg så kopiert inn i Java-programmet.
Programmet ville sjekke at det ikke var noe duplisering av reglene
før de igjen ble skrevet ut på en ny datafil. En
tidligere versjon, fra 12/11-2002, kjørte i over
en uke og behandlet til sammen 243 brev uten en eneste feil.
(47 brev
godkjent; 196 avvist.) Men det bør legges til at en
feilprosent lik null over så mange dager, er litt bedre enn
normalt.
Veien videre ...
Selv er jeg godt fornøyd med programmet slik det fungerer
nå. Gjør programmet noen gale
avgjørelser, tar jeg det som en utfordring til å
gjøre programmet enda bedre. Det hender ofte at jeg
går igjennom filtrerte brev for å se om jeg kan
finne nye regler. Det er på den måten jeg har
fått laget de fleste reglene. Men hva skal til for at andre kan ha glede av
programmet? Og hva kan gjøres for at noen kanskje skal kunne
tjene penger på dette? Her er en vaskeliste til meg selv og
andre som måtte være interessert.
ISP
Det beste ville være om programmet kunne kjørt hos
en ISP. Dermed blir det ikke nødvendig å bruke
store resurser for brukergrensesnitt. I stedet måtte man
utvikle web-sider for at brukere kan slå av og på
filtrene, sjekke filterlogg og kunne gi tilbakemeldinger. Dette vil
på mange måte være enklere. Man kan
også legge inn nye regler for bl.a. å luke ut samme
brev til mange mottagere.
Brukergrensesnitt
Man kan ikke forlange at en vanlig bruker skal kunne starte programmer
i et konsollvindu. Verden krever et grafisk brukergrensesnitt.
Flere brukere
Kun én gang har jeg fått testet programmets regler
med brev som var til en annen. Dette var en fyr som fikk flere brev
på engelsk enn det jeg selv pleier å få.
Litt for mange av reglene mine går på normale
engelske uttrykk, og litt for mange av brevene hans ble feilfiltrert.
Jeg trenger flere brukere som kan hjelpe til med å finjustere
reglene.
Regler for å godkjenne brev
I programmet mitt har jeg lagt inn forhåndsgodkjenning for
brev fra venner og tidligere kollegaer. Dette er regler som
bør legges inn i datafiler. I en slik datafil bør
det også legges inn regler som skal være positive,
ikke bare negative som i den andre datafilen.
Behandling av sære språk
Får jeg et brev på koreansk, kinesisk eller
japansk, vil det nærmest garantert bli filtrert bort.
(Programmet teller f.eks. opp antall sære tegn i avsender og
tema.) Foreløpig vil programmet derfor
være ubrukelig for koreanere, kinesere og japanesere.
Intet autosvar
Når programmet filtrerer bort et brev, sendes det automatisk
informasjon om det til avsenderen. Dette har jeg gjort for å
informere om mulig feilfiltrering. All erfaring viser at dette er
bortkasta. Spammere bryr seg ikke om slikt, og seriøse
avsendere blir stort sett bare fornærma.
(Det
bør kanskje nevnes at jeg har opplevd to unntak!)
Ingen splitting
Er det noe jeg irriterer meg over, er det folk som totalsiterer alt jeg
sender dem.
(Jeg skjønte det var
håpløst da en tidligere sjef sendte meg to ord som
et svar for så å totalsitere det opprinnelige
brevet mitt. I det brevet hadde jeg bl.a. pent spurt om han kunne la
være å gjøre akkurat det. (Jeg jobbet da
via et GSM-modem og hadde bl.a. sendt ham noen tunge illustrasjoner.))
Nåværende versjon av programmet prøver
å skjære bort slike totalsiteringer, og klarer det
ganske så bra. Men det er visst bare jeg selv som har behov
for slikt.
(Jeg har i det minste sluttet med autosvar om slike
strippinger. Det virket som om folk rett og slett ikke forstod hva de
selv sendte meg. (Virkelig absurd ble det da en fyr sendte meg
et spydig svar om hvor uheldig det var med automatiske svar
på epost. Det han tydeligvis ikke var klar over, var at
mailserveren til firmaet hans allerede hadde sendt meg et
dill-dall-autosvar på det første brevet jeg sendte
ham.))
Kjøring på egen server
For tiden kjører jeg programmet på en av mine
maskiner her hjemme. Dermed må jeg likevel belaste
nettforbindelsen med å hente ned brevene. Skal dette bli en
kommersiell tjeneste, bør programmet kjøres
på en egen server.
Raskere filtrering
Nåværende versjon av programmet går
sekvensielt igjennom alle reglene for hver test. Siden det bare er
jeg som bruker programmet, går det greit. Er det derimot
flere brukere av det samme programmet på den samme maskinen,
bør dette effektiviseres.
Vekting av brev i forhold til størrelse
Er det et brev på tusenvis av linjer, øker
sannsynligheten for at brevet blir filtrert. Det blir rett og slett
flere ord og utrykk som blir testet. Senere versjoner av programmet
bør endre terskelen for filtrering avhengig av
brevenes størrelse.
Sjekk av linker videre
Ofte har reklamebrev masse linker i stedet for innhold. Allerede
nå sjekker programmet slike linker, men kun selve adressene.
På sikt kan det være en idé
også å sjekke innholdet på de sidene som
det blir visst til.
Automatisk oppdatering av regler
Når et brev har klare indikasjoner på at det er
spam, burde programmet automatisk hente ut ord og fraser fra brevet.
Dermed vil en hver spam danne grunnlaget for nye regler.
Konklusjon
Intet av dette er vanskelig å få til. Fjerning av
autosvar og splittingen, vil grovt sett halvere den totale koden i
programmet! Sjekking av linker videre, vil gjøre programmet
tregere, men vil samtidig kunne bli en gullgruve for å finne
frem til gode filtreringsregler. Men for å få til
alt dette, trengs flere utviklere og en maskin med skikkelig
bredbånd.
Inntil videre vil programmet kjøres på
noenlunde samme måte. Som skrevet er jeg selv godt
fornøyd, for mitt eget behov!