Sirrah
Assassin na SPAM

SpamFilter

Hned na úvod upozornění -- tento návod vyžaduje jisté znalosti. Pokud tedy nevíte, jak pracovat na Sirrahu s příkazovou řádkou, jak editovat textové soubory a kam a jak se vám ukládá pošta, tak se raději o nic nepokoušejte a poraďte se se svým lékařem nebo lékárníkem. Pokud se i přesto pokusíte o nejrůznější experimenty, riskujete, že vám přestane chodit pošta! Lékaři lékárník jsou ochotni vám s nastavením pomoci, ale dobře si rozmyslete, jak to chcete provést, protože není v jejich silách měnit nastavení uživatelů dvakrát denně dle momentální nálady.  

Boj se spamem je dlouhodobý proces. Bohužel již dnes nestačí pouze všímat si emailů z konkrétních profláknutých adres a chodících přes některé profláknuté servery, ale dnes je třeba spam rozlišovat podle struktury a obsahu emailu. Bohužel je situace taková, že se nelze dostat do stavu, kdy bude 100% spamu rozpoznáno a zničeno. Ale za jistých okolností se k tomu lze poměrně hodně přiblížit. Programů, které provádějí filtraci spamu je mnoho, lékař má jisté vcelku pozitivní zkušenosti se SpamAssassinem, takže bylo ve spolupráci s lékárníkem rozhodnuto nasadit na filtraci spamu právě SpamAssassin.

Společné věci, které je dobré vědět (ale pokud jste skoro začátečníci a nehodláte do problematiky zabředávat hlouběji, přežijete i bez toho) najdete na stránce zabývající se emailem obecně. Konkrétní situace budou řešeny níže, takže v krátkosti se můžete těšit buď na základní nastavení, nebo můžete chtít například svoji vlastní databázi spamu a případně dokonce zajímat se jen o ty technické informace a přesunout se rovnou na poslední kapitolu.

Poštu na Sirrahu doručuje program QMail. Jeho doručování může uživatel ovlivnit pomocí direktiv v souboru .qmail ve svém domovském adresáři a nejinak se postupuje při odstraňování spamu. Základní nastavení a případně inspiraci poskytuje:

Skript spamass

Tento skript provede ZÁKLADNÍ konfiguraci, aby bylo možné procházet poštu SpamAssassinem. Spouští se jménem a příslušným parametrem.
spamass DEFAULT|local|shared|previous [log]
  • DEFAULT  poskytuje nastavení pro ty, kdo doposud nehýbali se svou konfigurací pošty na Sirrahu. Pracuje se sdílenou databází.
  • local  začne používat SpamAssassina s uživatelskou databází. Výhodou např. je, že po naučení je jeho úspěšnost blízká 100 % (tedy v zásadě je schopen odfiltrovat drtivou většinu spamů). Nevýhodou je, že je (hlavně zpočátku) nutné jej učit, co je spam a co ne.
  • shared  začne používat sdílenou databázi pro všechny uživatele na Sirrahu. Výhodou je, že se nemusíte prakticky o nic starat. Nevýhodou je pak mnohem nižší úspěšnost, než při použití vlastní databáze.
  • previous  vrátí konfiguraci do posledního známého stavu. Pokud jste úprav dělali několik za sebou, nemusí jít nutně o stav konzistentní s tím, co vlastně chcete
  • log  uvedeno jako DRUHÝ parametr -- zapne logování, čili známkování každého emailu se napíše do zvláštního textového souboru, kde pak můžete dohledat, jak byl daný email hodnocen. Logování je defaultně vypnuto, loguje se do souboru $HOME/spam.log.

Zpět nahoru

Základní nastavení

Jsem běžný uživatel, netuším, co dělám, ale umím spustit příkaz v konsoli a nemanipuloval jsem nikdy s nastavením své pošty na Sirrah. Raději se ještě jednou ujistěte, že jste se svou poštou nedělali na Sirrahu psí kusy, jako například nejrůznější třídění a podobně.

Pak následuje jednoduché řešení: příkaz spamass DEFAULT. Vše se nastaví tak, že pošta chodí i nadále tam, kam má, spamy se ukládají do složky ./Mail/spam, což by mělo být tam, kde hledá poštu PINE. Pracuje se se sdílenou databází, takže se nemusíte o nic starat, emaily jsou filtrovány, ale nejsou označovány (takže se jejich formát vůbec nezmění).

Tento skript nastaví filtrování pouze vaší přímé pošty, takže pokud používáte např. pro příjem konferencí nějaký z pomlčkových aliasů (např. svanda-konference@sirrah.troja.mff.cuni.cz a pod.) a chcete filtrovat i je, buď budete muset zabřednout do podrobností ručního nastavení, nebo navštívit lékaře či lékárníka.

Pokud vám bude přesto chodit hodně spamů (může se to stát, je to vlastností sdílené databáze), přečtěte si v následujícím oddíle, jak pomoci při učení antispamového filtru.

Zpět nahoru

Chcete mít vlastní databázi?

Jsem běžný uživatel, ale trochu tomu rozumím.

V tom případě je nejjednodušší spustit skript spamass shared nebo spamass local (rozdíly budou vysvětleny dále) a upravit soubor .qmail-isspam, do kterého se napíše, kam chcete ukládat detekovaný spam. Nedoporučuje se "ukládat" jej do /dev/null (i když je to taky cesta), protože klasifikátor se samozřejmě může zmýlit a pak by mohlo dojít k vyhození třeba důležitého emailu. Tento postup (zahazování spamů) si lze obvykle dovolit až tak po roce provozu na zkoušku, pokud všechno funguje tak, jak má. Je lepší si spamy nechat třídit do nějaké speciální složky. Např. pokud používáte na ukládání pošty formát Maildir (ten je ostatně preferován, bez problémů pak funguje POP3 atd.), tak do .qmail-isspam dopište řádek např. ./Maildir/SPAM/. Pine nebo nějaký jiný poštovní klient by si měl již s tímto problémem poradit a vyřazená pošta se pak filtruje do tohoto pole. Používáte-li formát mbox (v současnosti defaultní nastavení), tak je třeba nový mailbox vytvořit v nějaké "čtené" složce -- např. používáte-li ke čtení pošty PINE, bude tímto adresář Mail a tudíž do .qmail-isspam se napíše něco jako ./Mail/spam a je to. V PINE se pak objeví v seznamu složek i nová složka "spam" obsahující snad pouze spam.

A teď jaké jsou rozdíly mezi použitím spamass shared nebo spamass local:

  • spamass shared použije sdílenou databázi a standardní nastavení. Má to tu výhodu, že se nemusíte o nic starat, přitom můžete (ale nemusíte) přispět ke zlepšování kvality databáze. To uděláte jednoduše tak, že email, který je evidetně spamem, uložíte VČETNĚ VŠECH NEPOZMĚNÝCH HLAVIČEK do adresáře /local/spamassassin/spam jako zvláštní textový soubor (takový, který se tam eště nevyskytuje, před uložením je to třeba zkontrolovat -- dobrým klíčem k pojmenovávání souborů je například sestavení "uživatel-datum-pořadí_v_daném_dni", čili např. hec-180605-25). Důležité je ono "včetně všech nepozměněných hlaviček". V PINE je nutné nejdříve v nastavení povolit zobrazení všech hlaviček:
    1. Spustit PINE
    2. Stisknout "s" a "c" (Setup, Config)
    3. V sekci Advanced Command Preferences povolit (stiskem "x") enable-full-header-cmd
    4. Stisknout "e" (Exit) a "y" (Yes)
    Pak při zobrazení spamové zprávy stisknout klávesu "h" (tím se zobrazí všechny hlavičky) a pak stiskem písmene "e" zprávu uložit jako textový soubor (do /local/spamassassin/spam). Při nejbližší možné příležitosti bude pak databáze přeučena. Stejný postup platí i pro případ, že je nějaký dobrý email chybně klasifikován jako spam -- v takovém případě se špatně klasifikované emaily ukládají do adresáře /local/spamassassin/ham. Kvalitu filtru pomůžete zlepšit i poskytnutím e-mailů vyhodnocených sice správně, ale s vysokým skóre. Počítejte však s tím, že veškeré e-maily uložené do se stávají dostupné všem uživatelům.
  • spamass local umožní použití vaší vlastní databáze. Pro úpravu souboru .qmail-isspam platí to samé, co bylo napsáno nahoře. Tím to ovšem ani zdaleka nekončí. Dále je možno ovlivnit přímo chování SpamAssassinu -- editací souboru .spamassassin/user_prefs. Typicky úroveň, kdy je mail považován při stejných metodách za spam. Globálně je tato úroveň nastavena na hodnotu 5. Jejím snížením (editací parametru required_hits) bude zachytáváno více spamů, avšak je větší pravděpodobnost klasifikace normálního emailu jako spam. Naopak zvýšením této hodnoty dosáhneme stavu, kdy bude odchytáváno méně spamů, ale je též menší pravděpodobnost omylu.
    Dále budete potřebovat dvě další emailové složky. Pro příklad je nazvěme třeba MissedSPAM a nonSPAM, které budou vytvořeny v adresáři PINE (Mail/). Do složky MissedSPAM je třeba ukládat spamy, které nebyly vytříděny, zatímco do nonSPAM pak emaily, které byly chybně klasifikovány jako spam. Pak již je nutné jen zaručit, aby se po určité době obě tyto složky prošly a přenastavily se klasifikační váhy SpamAssassinu. To se dá zařídit například cronem. Do crontabu se přidají (příkaz crontab -e -- pozor, spouští se editor vi) řádky:
    0 2 * * *  /usr/local/bin/sa-learn --mbox --spam $HOME/Mail/MissedSPAM
    0 2 * * *  /usr/local/bin/sa-learn --mbox --ham $HOME/Mail/nonSPAM
    
    které způsobí, že se každý den ve dvě hodiny ráno projdou tyto dvě složky a změní se nastavení klasifikátoru. Jinak samozřejmě oba popsané příkazy můžete libovolně spouštět ručně.
    Problém je tak trochu v tom, že pro začátek učení je třeba nasbírat alespoň 200 spamů a 200 korektních emailů (jinak je klasifikátor hned z počátku nastaven chybně a působí více problémů než užitku). Možností je samozřejmě zkopírování sdílené databáze a její další modifikace již ve vlastní učící režii. V tom případě zkopírujte do svého adresáře celý adresář /local/spamassassin, který obsahuje aktuální sdílenou databázi. V případě potíží nebo složitějších akcí bude asi lepší, když kontaktujete někoho, kdo tomu rozumí.

Pokud chcete vědět, proč byl daný email vyhodnocen jako spam nebo opačně, zapněte si logování.

Zpět nahoru

Technické informace aneb nechci slyšet žádnou omáčku kolem

Předpokladem je, že víte, co děláte. Čili již jste si někdy upravovali .qmail (nebo .qmail-něco). Pro filtrování spamu je důležitý program condredirect. Tento program použitý jako filtr se používá k "vyžírání" emailů, které splní podmínku danou skriptem, z fronty a jejich přesměrování jinam. Syntax je jednoduchá:
| condredirect kam rozhodovaci_program_nebo_skript
Čili příchozí email se poslán na "rozhodovaci_program_nebo_skript". Pokud tento skončí s návratovou hodnotou 0, je zkoumaný email přesměrován na "kam", pokud skončí s návratovou hodnotou 99, email poskočí na další řádek zpracování. Přestože se zde uvedený postup může hodit i obecněji, v případě filtrování spamů na Sirrahu je k dispozici připravený "rozhodovaci_skript" /usr/local/bin/zrout_spamu, který rozhazuje emaily podle toho, jestli jsou spam, nebo ne. Po průchodu tímto skriptem jsou emaily sice vyhodnoceny, ale nejsou označeny, pokud chcete znát výsledky, zapněte si logování jednoduše parametrem -l.

Takže ukázkové konfigurace:

  • Emaily mají být tříděny a známky jednotlivých emailů logovány. Maily klasifikované jako spam se ukládají do $HOME/Mail/SPAM ve formátu mbox, ostatní emaily pak ve formátu Maildir do $HOME/Maildir/ a ještě se posílají na mobil (číslo 299 792 458 u operátora Vodovody&kanalizace), uživatel se jmenuje "juzr".
    .qmail:
    |condredirect juzr-spam /usr/local/bin/zrout_spamu -l
    ./Maildir/
    &+420299792458@sms.vodovody_a_kanalizace.cz
    
    .qmail-spam
    ./Mail/SPAM
    
  • Emaily mají být tříděny, avšak ne označovány. Spamy se ukládají do $HOME/Mail/SPAM/ ve formátu Maildir, ostatní emaily ve formátu mbox do $HOME/Mailbox, uživatel je opět "juzr":
    .qmail:
    |condredirect juzr-spamy /usr/local/bin/zrout_spamu
    ./Mailbox
    
    .qmail-spamy:
    ./Mail/SPAM/
    
  • Chodí mi konference na pomlčkový alias juzr-ccd@sirrah.troja.mff.cuni.cz, tu chci třídit a logovat, spamy chci vyhazovat, prošlou poštu ukládat ve formátu mbox do $HOME/Mail/Konference_CCD:
    .qmail-ccd:
    |condredirect juzr-ccdspam /usr/local/bin/zrout_spamu -l
    ./Mail/Konference_CCD
    
    .qmail-ccdspam:
    /dev/null
    
  • Stejný případ jako předchozí, jen poštu nechci označovat, ale rovnou třídit, spamy zahazovat:
    .qmail-ccd:
    |condredirect juzr-ccdspamy /usr/local/bin/zrout_spamu
    ./Mail/Konference_CCD
    
    .qmail-ccdspam:
    /dev/null
    
Další doporučeníhodnou možností je nenechat email doručovat lokálně QMail, ale přeposlat jen na zpracování procmailu, který nabízí větší uživatelský komfort filtrování. Pak se v .qmail objeví řádek |preline /usr/bin/procmail a filtraci je pak třeba řídit zcela jinými direktivami v souboru .procmailrc. Podrobnosti opět sdělí lékař či lékárník, případně si je můžete přečíst v manuálu (man procmailrc).

Zpět nahoru

Naposledy upraveno:
21.12.2006 (M.)