Ako fungujú spamfiltre 4

02.01.2007 09:07 | betmen

Či už viac, či menej ladne, dostal som sa k "pravým" spamfiltrom. V non-MS svete je najviac zastúpeným ťahúňom spamassassin. So svojou škálou modulov tvorí veľmi silný nástroj v boji proti spamu, za čo mu všetci (aj keď o tom neviete aj vy) ďakujeme.

Spamassassin je v perli napísaná hračička, ktorá ovláda bayesove metódy, kolaboratívne metódy, využíva blacklisty atď atď. Dalo by sa namietať že je to pomalé keďže je to v perli ale nie je to až tak kritické. Aj tak najväčší časový podiel na spracovávaní mailu majú kolaboratívne mechanizmy.
Spamassassin vezme email, prebehne ho filtrami a podľa konfigurácie mu pridá do hlavičky info o výsledku testov. Okrem toho si vie vytvárať bayesovú databázu, na základe ktorej môže neskôr hodnotiť prichádzajúce emaily a dokáže sa učiť. Či už automaticky, podľa zadaných kritérií alebo s ľudským pričinením - tvrdým pridávaním emailov ako spam alebo ham (non-spam).
Spamassassin je možné volať z príkazovézo riadku, je možné volať ho ako modul alebo je možné využiť spamd. S assassinom ako démonom som sa stretol doteraz len v kombinácii s qmailom a okrem toho že sa mi to celé nepáčilo, spamd si po pár týždňoch zvykol nakopiť neuveriteľné množstvo pamäťových prostriedkov čo od neho vôbec nebolo pekné. My ho budeme volať cez rozhranie amavisu.

Keďže ide o v princípe perlovský modul, je rozšíriteľný o ďalšie svoje vlastné "moduly".
Za zmienku stoja hlavne DCC, Razor2 (jeho alternatíva pyzor), HashCash, URIBLDNS. Ďalšie menej známe tiež rozoberiem.

Spamassassin má možnosti per-user konfigurácie alebo "default" v /etc/mail/spamassassin (prípadne podľa želania samozrejme). V mojom príklade využijeme konfiguráciu, ktorú sme čiastočne zvládli cez amavisd.conf (kuk predošlé časti) keďže amavis bude náš iniciátor assassinu. To ale nič nemení na veci že niektoré veci (prevažnú časť) využíva aj amavis z default konfigurácie.

Takže najskôr kuk do /etc/mail/spamassassin/init.pre:

loadplugin Mail::SpamAssassin::Plugin::RelayCountry
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
loadplugin Mail::SpamAssassin::Plugin::Hashcash
loadplugin Mail::SpamAssassin::Plugin::SPF

RelayCountry plugin je nato, aby do bayesovej databázy pridal geografické údaje kadiaľ šla emailová správa. To môže prispieť k lepšiemu vyhodnoteniu ktoré krajiny sú spamerské atď...

URIDNSBL je plugin, ktorý prehrabáva telo emailu a vycuciava si z neho url adresy. Následne z nich vyprdne doménové mená a podľa rôznych dns blacklistov si pozerá či ide o nejakú spamerskú destináciu alebo o čistú adresu. Treba počítať s tým že táto metóda potrebuje nejaký čas na vykonanie testu keďže overuje voči remote serverom.

Hashcash by mal byť mechanizmus na elimináciu chybne hodnotených "nespamov". Sender by mal do hlavičky pridávať riadok X-Hashcash na základe ktorého by mal v spamassassine dostať email negatívne skóre takže prebije aj prípadné pozitíva inými filtrami. Hash by mal obsahovať nejaký špecifický reťazec vypočítaný presne podľa daného emailu. Úplne som zmysel tohto modulu nepochopil lebo podľa faq vravia že ho môžu používať aj spamerkovia ale že na jeden email treba cca pol sekundy čo spamerkov spomaľuje. Zatiaľ som sa ani nestretol s emailom, ktorý by túto metódu používal ale veď nevadí :)

SPF je plugin na metódu, ktorú som spomínal na začiatku seriálu. Ide o Sender Policy Framework, inak povedané metódu, ktorá využíva TXT záznam domény pre distribuovanie trusted adries, z ktorých je možné odosielať emaily v "mene" danej domény. Táto metóda sa používa málo. Je možné zadefinovať len smtp.mojadomena alebo smtpXYZ.mojadomena môžu posielať maily z @mojadomena a napríklad smtp.userkovprovider (resp všetko neuvedené v TXT zázname) ee.

Spamassassin rozumie všetkým súborom s príponou .pre v danom adresári ako konfigurácii pluginov. V gentoo (ktoré používam) je kvôli prehľadnosti rozdelený zoznam pluginov do ďalších súborov (podľa verzie v ktorej boli pridané) ako v310.pre v312.pre a podobne ale nie je to dôležité. Stačí mať všetko v jednom súbore.

Okrem predošlých je možné využiť napr. nasledovné:

loadplugin Mail::SpamAssassin::Plugin::DCC
loadplugin Mail::SpamAssassin::Plugin::Pyzor
loadplugin Mail::SpamAssassin::Plugin::Razor2
#loadplugin Mail::SpamAssassin::Plugin::SpamCop
loadplugin Mail::SpamAssassin::Plugin::AntiVirus
loadplugin Mail::SpamAssassin::Plugin::AWL
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
loadplugin Mail::SpamAssassin::Plugin::TextCat
loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
#loadplugin Mail::SpamAssassin::Plugin::DomainKeys
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
#loadplugin Mail::SpamAssassin::Plugin::DKIM
loadplugin FuzzyOcr /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin/Plugin/FuzzyOcr.pm

Najskôr popíšem o tých zakomentovaných, ktoré som uviedol ako príklad. DomainKeys a DKIM sú pluginy, ktorých funkcionalitu som tiež popisoval na začiatku seriálu. Takže sa k tomu vracať nebudem, kuk prvú časť seriálu.

DCC a Razor2 sú pluginy, ktoré využívajú externé programčoky so samostatnou konfiguráciou, preto sa im budem venovať trošku neskôr.

Pyzor je v pythone napísaná alternatíva k razoru a je viac vyrobená pre potreby spamassassinu ako razor samotný. Je to kolaboratívna metóda, overujúca emaily voči online databáze, takže opäť treba počítať s nejakou tou sieťovou réžiou a časom na overenie (aj keď ide o minimálne hodnoty ale aj tak). Po inštalácii pyzoru nie je potrebné robiť nič extra, stačí spustiť pyzor discover, ideálne rovno pod userkom amavis aby sa nám ku konfigurácii amavisu vytvoril /var/amavis/.pyzor a discover si tam uloží server voči ktorému bude spamy overovať. (Ak ste si vyrobili vlastnú konfiguráciu tak pod userkom spúšťajúcim amavisd).

SpamCop je plugin reportujúci spamy do databázy spamcop (využíva ju aj URIDNSBL). Záleží na vás, či chcete spam aj reportovať.

AntiVirus - ako hovorí múdry súbor, sú to primitívne antivírové testy. Nepoznám účinnosť, myslím však že to nemá dramatický efekt na chod celého assassinu.

AWL je na auto-whitelistovanie.

AutoLearnThreshold - autolearningový plugin. Okrem default skóre pre automatické ukladanie mailu ako spam/non-spam je možné definovať si aj špeciálne vlastné skóre. Pri definovaní skóre si treba uvedomiť že pri zlých pravidlách môžte oblbnúť celú bayesovú databázu :)

TextCat sa snaží vylúštiť jazyk použítý v emailoch. Môžme vďaka nemu nadefinovať že napr. emaily v slovenčine sú ok a preto im automaticky priradí nižšie skóre. Funguje to samozrejme aj opačne. Ja ho nevyužívam lebo našťastie aj bez neho sa assassin stačí a definovať že ok sú sk/cz maily sa mi nevidí ok, keďže už veselo spamujú aj slovenské a české firmy.

WhiteListSubject - ako jeho názov hovorí, umožňuje definovanie automatického zamietania/povolenia podľa subjektu emailu.

MIMEHeader umožní definovať si regulárne výrazy podľa priania a priradiť im skóre.

ReplaceTags - umožňuje dávať do pravidiel regulárne výrazy.

FuzzyOcr je ako ocr v názve naznačuje, plugin na prekopávanie obrázkov v mailoch, keďže spamy už často chodia škaredé nepekné obrázkové. Vie si vytvoriť aj hashe a definuje si userko aké slová/stringy má plugin vyhľadávať.

Toľko o pluginoch. Teraz čo-to z konfigurácie.
/etc/mail/spamassassin/local.cf:

use_pyzor 1
use_dcc 1
use_razor2 1
razor_config /var/amavis/.razor/razor-agent.conf
bayes_path /var/amavis/.spamassassin/bayes
use_auto_whitelist 1
auto_whitelist_path /var/amavis/.spamassassin/auto-whitelist
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1
bayes_auto_learn_threshold_spam 6.9

use_pyzor, use_dcc, use_razor2 povedia assassinu aby zavolal tieto svoje pluginy.
razor_config definuje cestu ku konfigurácii razoru, bayes_path kam si assassin vytvára bayesovú konfiguráciu.
use_auto_whitelist vytvára whitelistovaných senderov.
veci +- bayesu sú ohľadom bayesovej databázy, mám definované len autolearnovanie pre spam s nižším ako default skóre. pre non-spam, ak si dobre spomínam je 0.1 čo je ok, nech sa nám do databázy nedostáva rôzny balast.

/etc/mail/spamassassin/razorscore.cf:

score RAZOR2_CF_RANGE_51_100 0.8
score RAZOR2_CF_RANGE_E4_51_100 0.8
score RAZOR2_CF_RANGE_E8_51_100 0.8
score RAZOR2_CHECK 0.8

Keďže podľa definovania skóre, ktoré mám v amavisd.conf (kuk predošlé časti) by defaultné 1.5 per rule razoru spôsobovali, že mail nemá žiadnu inú šancu na prežitie, znížil som si ho na 0.8 čím za predpokladu, že by náhodou bol mail zle zadaný v razore (málo pravdepodobné) ale by prešiel ostatnými filtrami ako ok, tak sa dostane aj k adresátovi.

Konfigurácie k pluginom, ktoré nemám v local.cf buď využívam prednastavené alebo tie pluginy nevyužívam.

Mojim cieľom nie je preberať detailne všetky konfiguračné možnosti takže tu dnes skončím. Nabudúce rozoberiem Razor2, DCC a FuzzyOCR keďže ide o externé programy alebo v prípade fuzzyocr aspoň o plugin využívajúci externé programy a všetky tri majú vlastnú konfiguráciu ktorá si zaslúži samostatnú pozornosť.

    • dalsie super pokracovanie 03.01.2007 | 01:19
      Avatar blackhole_kepro   Používateľ

      dalsie super pokracovanie spamfilter hodnotenie na 10 treba uznat ze za posledne obdobie najlepsie clanky :)

    • Povolit celu TLD 05.01.2007 | 15:07
      EskiMag   Návštevník

      Zdravim. Super clanky, aj sa to fajne cita. Chcel by som sa opytat, ci nahodou neviete, ako povolim celu TLD napriklad *.sk tak, aby ju SpamAssasin/Amavis vobec nekontroloval, pripadne jej default pridelil napriklad -10 bodov. Dik za info. (ujo google mi dako nevedel pomoct)

      • v amavise by to mohlo ist 05.01.2007 | 15:43
        Avatar betmen   Používateľ

        v amavise by to mohlo ist cez score_senders_maps pridat niekde medzi default adresy '.sk' => -10.0,

        alebo do whitelist_sender_maps skusit dat '.sk' pripadne si vytvorit regularny vyraz
        qr'^.*\.sk$'i

        v spamassassine mozno whitelist_from *@*.sk (ale to netusim ci prejde).

        nemam to teraz kde vyskusat.

        ____________________
        promptne je alias pre nahovno

        ______________ kam by som chodil...na dvor
        • Dakujem 05.01.2007 | 16:39
          EskiMag   Návštevník

          Super, dakujem, skusim... Nejak krvopotne som rozbehal vsetky haluze potrebne na mailserver + antivsetko-mozne, funguje to k spokojnosti, len toto som nevedel urobit, lebo obcas sa stane, ze to ako SPAM omarkuje aj daky sk/cz mailinglist alebo nieco podobne. Este raz dik