Spamassassin: problem 2010. godine

Za problem Y2K ste čuli (i preživjeli), za problem 2038. godine možda, ali što je problem 2010. godine? Iako je na sam problem upozoreno još 2008. godine, greška je loše popravljena, pa se, eto, ponovo pojavila 1.1.2010. godine.

Na Portalu smo vas još prije upoznali s načinom na koji SpamAsassin radi, a jedan od njih je dodjela "kaznenih" bodova (score) za nepravilnosti u zaglavljima mail poruka koje generiraju spam programi. Prilično visok score od 3.2 donosi pravilo FH_DATE_PAST_20XX. Opis pravila je "The date is grossly in the future".

Dakle, SpamAssassin je zahvaljujući ovom pravilu davao visok score svim porukama koje su (prividno) bile poslane iz budućnosti. Ovo je jako korisno, ali samo ako je trenutna godina 2008. ili čak 2009, no nema smisla ako je datum 1. siječnja 2010. godine, zar ne? Krivac je spomenuto pravilo u datoteci /usr/share/spamassassin/72_active.cf koje glasi:

header FH_DATE_PAST_20XX Date =~ /20[1-9][0-9]/ [if-unset: 2006]

I bez velikog poznavanja regex pravila, vidljivo je da će se pravilo primjeniti za sve godine od 2010 do 2099. Naravno, Debian je 1. siječnja 2010. izdao hitnu zakrpu u vidu novog paketa spamasassin (kako biste dobili novu inačicu spamassassina, nužno je dodati volatile repozitorij u /etc/apt/sources.list), tako da pravilo nakon nadogradnje glasi:

header FH_DATE_PAST_20XX Date =~ /20[2-9][0-9]/ [if-unset: 2006]

Dakle, sada su sumnjive sve godine od 2020 do 2099. Valjda neće zaboraviti promijeniti pravilo negdje potkraj 2019?

UPDATE: Postoje prijave da se ni nakon nadogradnje pravilo ne postavi na pravu vrijednost. Ukoliko je to slučaj i kod vas, jednostavno ručno promijenite pravilo, bilo u /usr/share/spamassassin/72_active.cf, bilo u /etc/spamassassin/local.cf. Ukoliko je tamo sve u redu, postoji šansa da se pravilo zadržalo preko SARE pravila u datoteci 00_FVGT_File001.cf, pa to i tamo ispravite.

Inače, mogli ste i sami intervenirati tako da ste u /etc/spamassassin/local.cf upisali

score FH_DATE_PAST_20XX 0.0

i restartali amavisd-new. Ukoliko jeste, ne zaboravite kasnije ukloniti ovu "popravku", jer podatak da je mail došao iz budućnosti zaista govori da je riječ o nepravilno formiranom mailu, ili češće, spamu.

Dakle, problem je riješen. Ili ipak nije? Što je s karantenom, možda je neki legalni mail od ponoći 1.1.2010. završio u karanteni? Brzo provjerite karantenu:

# cd /var/lib/amavis/virusmails
# find . | xargs zgrep FH_DATE_PAST_20XX
./C/spam-CnMv2U52GlhB.gz:      BAYES_99=3.5, DATE_IN_FUTURE_96_XX=1.439, FH_DATE_PAST_20XX=3.188,
./H/spam-HY-Q+F36aZAT.gz:      FH_DATE_PAST_20XX=3.188, FORGED_MUA_OUTLOOK=1,
./N/spam-Nh7SlWYqnj74.gz:      FH_DATE_PAST_20XX=3.188,  FORGED_MUA_OUTLOOK=1,
...

Ukoliko se ispiše malo poruka, najjednostavnije je ručno pregledati svaku datoteku i osloboditi mail iz karantene. Postupak smo opisali u članku http://sistemac.carnet.hr/node/526.

Ukoliko se pokaže da imate puno takvih mailova u karanteni, možete ih ili sve osloboditi (uz nešto negodovanja korisnika zbog spama), ili dodatno rafinirati pretragu po From: i To: poljima:

# find . | xargs zgrep -l FH_DATE_PAST_20XX | xargs zgrep -E '^(From:|To:)'
./w/spam-wZDodfcu7erQ.gz:To: undisclosed-recipients:;
./z/spam-zzQkVZXVgfju.gz:From: Dorothy Smith <dorothyrvilxqmn@hotmail.com>
./z/spam-zzQkVZXVgfju.gz:To: <laura_johnston@praxair.com>
./z/spam-z8Ed41PsTvOy.gz:From: "Lucky Day Lottery"<rubenvanjansen@gmail.com>
...

Na ovaj način ćete dobiti (približnu) sliku o kakvim se mailovima radi, i treba li ih osloboditi iz karantene ili ne. U svakom slučaju, nešto ručnog pregledavanja i odlučivanja će morati biti.

UPDATED 2010-01-12

Vijesti: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (1 vote)

Komentari

Navedeni fix rješava problem s pravilom header FH_DATE_PAST_20XX tako što postavlja da je daleka budućnost iza 2020. Ja bih ipak stavio neku bližu budućnosti npr.:

header FH_DATE_PAST_20XX Date =~ /201[4-9]|20[2-9][0-9]/

U tom izrazu koristi se poseban znak | (vidi http://perldoc.perl.org/perlretut.html#Matching-this-or-that) što bi trebalo raditi jer definicija direktive

header SYMBOLIC_TEST_NAME header op /pattern/modifiers [if-unset: STRING]

u http://spamassassin.apache.org/full/3.2.x/doc/Mail_SpamAssassin_Conf.html kaže: pattern is a valid Perl regular expression.

U stvari u spamassassinu bi trebalo prestati koristiti takvo pravilo i prepoznavati buduće datume u odnosu na trenutačni datum. Vidi komentare o tom bugu.

Inače, datoteka /etc/spamasassin/local.cf u stvari ima putanju /etc/spamassassin/local.cf

Cijenjeni kolega, zahvaljujemo na komentaru i pazljivom citanju (uistinu je putanja /etc/spamassassin/local.cf, a ne /etc/spamasassin/local.cf).

Ipak, za punu informaciju citateljima, ne preporucujemo samostalno mijenjanje SA pravila (osim u ovakvim hitnim slucajevima i ako "znate sto radite"). Poslije "krize" najbolje je - obrisati ga. SA pravila se prave po statistickim analizama milijuna spamova, pa je ova visoka ocjena i odrednica datuma vjerojatno imala smisla u trenutku analize, no tako ne mora biti i sada.

Ako zaboravite obrisati pravilo koje ste sami promijenili, onda cete isti problem imati 1.1.2014. (ili 1.1.2020. po sadasnjem stanju), bez obzira sto ce taj problem biti rijesen u samom spamassassinu.