Opp
© 3/11-2006, Rune Henning Johansen, rhj@rhj.info.

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:

From: Allison <badones8877164@killerlatinas.com>
To: rhinson5@webtv.net rhinson@web-net.com rhinton@ans.net rhinton@ltinet.com rhinton@one1com.com rhinton@one1com.com
Subject: F R E E S E X FOR LIFE
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:

mail_filtrering_pre.gif
Ut fra dette ville jeg automatisk fått generert følgende regler:
mail_filtrering_post.gif
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!


Valid HTML 4.01! Valid CSS! Billig webhotell og domene