Hlavní navigace

Sagator (4): První hrst konfigurace

David Zejda 22. 4. 2005

V dnešním dílu začnu popisovat svoje nastavení Sagatora. Používám sice typickou kombinaci nástrojů – Postfix, ClamAV a SpamAssassin, trochu netypické jsou ale některé detaily, především to, jak moje konfigurace zachází se spamy.

Tak předně – co je (téměř) jistě spam, to nelítostně mažu. Kde si již tak jistý nejsem, tam vsunu do předmětu slovo SPAM (což je pořád ještě běžné nastavení) a také hvězdičky, které reprezentují míru spamovitosti (to již běžné není). Tolik k základním požadavkům, detaily probereme postupně..

Jinak – originální sagator.conf obsahuje také spoustu zakomentovaných a dosti podrobně popsaných možností, proto se budu zabývat především tím, co je v mém nastavení jiné. Na úvod se hodí ještě jedna poznámka – konfigurační soubor je vlastně zdroják Pythonu. Kdo jazyk zná, zjevně má výhodu, kdo ho nezná, snadno pochopí..

Úplný začátek příliš zajímavý není – hrst nezbytných importů. Pouze je třeba pamatovat na to, aby byly vždy na začátku konfigurace, jinak vám skenery nebudou fungovat.

from scanners import *
from srv import * 

Asi víte nebo přinejmenším tušíte, jakým způsobem SpamAssassin rozhoduje o zprávách. Pro jistotu ale připomenu základní myšlenku. Podle mnoha kritérií přiřazuje každé zprávě body („spam hits“). Pokud tyto překročí určitou, v konfiguraci stanovenou mez, zpráva je považována za spam. Tato hodnota je (nečekaně :) nazvána required_hits.

Sagator stejnou hodnotu rovněž využívá – některé interní skenery ji potřebují pro svou správnou funkci. Sagator by se na ni možná rád zeptal SpamAssassina, ale to není dost dobře možné, proto je dobrým nápadem poctivě ji vyplnit ručně:

REQUIRED_HITS=4.0

Vlastní skener

Uživatelskou třídu rewrite_name() použijeme v konfiguraci později. Smyslem její jediné metody nazvané taktéž rewrite_name() je přepisovat název viru, který je v případě spamu prostě „SPAM“, na něco trochu informačně bohatšího. Co konkrétně to bude, určíme až na místě použití.

Pokud jste již okem zabloudili ke zdrojáku, možná se ptáte, co je to „rename“, od kteréžto třídy je rewrite_name odvozena. Nuže je to třída, která nedávno do možností Sagatora přidala stejnojmenný skener, jež má podobnou funkci, ovšem mně se pořád ještě nelíbí. Sice umí také doplňovat hvězdičky do předmětu zprávy, ale používá při tom vnitřní stupnici Sagatora, která když se převede na celočíselné hodnoty, je příliš hrubá, a tak málokterý spam dostane víc než dvě hvězdičky. Tato transformovaná sagatoří stupnice má jedničku tam, kde SpamAssassin přiřadí required_hits, a dále vyjadřuje násobky této hodnoty. Získává se nějak takto:

Sagator spam level = spam hits / REQUIRED_HITS

Metoda rewrite_name() je vlastně skener. Pokud je zpráva podle hodnocení SpamAssassina čistá, neprovádí nic, v opačném případě upraví předmět podle parametru, s jakým je zavolána. V úpravách předmětu mohou být použity proměnné $VNAME, $LEVEL a $STARS, ty budou nahrazeny názvem viru („SPAM“), spam levelem podle SpamAssassina a levelu odpovídajícím počtem hvězdiček. Ostatní data, která procházejí datovým proudem, zůstávají netknutá.

class rewrite_name(rename):
  name='rewrite_name()';
  def scanstream(self,stream):
    level,detected,virlist=match_any.scanstream(self,stream)
    if not is_infected(level,detected):
      return level,detected,virlist
    repl_vars={
      'VNAME': detected,
      'LEVEL': str(level*REQUIRED_HITS),
      'STARS': '*'*int(level*REQUIRED_HITS),
    }
    return level,replace_tmpl(self.NEWNAME,repl_vars),virlist 

Dost možná tohle vylepšení nepoužijete (nebo v některé z budoucích verzí přibude odpovídající nativní podpora), alespoň jsem tak mohl demonstrovat, jak snadno lze Sagator rozšířit o skenery, které v jinak bohaté standardní výbavě můžete postrádat..

Lokalizace zpráv o nedoručení

Další věcí, která v našich podmínkách zaslouží pozornost, je lokalizace zpráv o nedoručení. Sagator jde totiž na vše po anglicku. Při zkoumání vlastního kódu můžete pozorovat, že jsem použil spoustu proměnných, u kterých čekám, že budou příslušně nahrazeny. Kompletní seznam proměnných najdete v dokumentaci anebo se můžete inspirovat originálními zdrojáky.

Jak také vidíte, vyčlenil jsem zvláštní adresu, na kterou budou mířit požadavky na vrácení zpráv z karantény – je to jistě praktičtější než nechat je posílat na adresu obecně používanou. Klíčová je také položka $QNAME, kterou budete potřebovat při vlastním obnovování. K procesu obnovování se dostaneme v některém z příštích dílů.

REPORT_MSG='''\
From: $FROM
To: $TO
Subject: Do vasi schranky smeroval virus $VIRNAME!
Reply-To: resurect@o-it.info

                 VIRUS NALEZEN A PRESUNUT DO KARANTENY!
---------------------------------------------------------------------
    Do vasi e-mailove schranky smerovala zprava, ktera v priloze
  obsahovala virus. Nebezpecnou prilohu jsme odstranili a presunuli
 do karanteny na nasem postovnim serveru. Pokud jste si jisti, ze si
 prejete *nebezpecnou* prilohu dostat, prosim preposlete tuto zpravu
na adresu resurect@o-it.info a my vam ji zahy vratime. Vice informaci
 o systemu likvidace nevyzadane posty naleznete na strance AntiJunk.
---------------------------------------------------------------------
STATUS: $STATUS
ULOZENO DO KARANTENY JAKO: $QNAME
---------------------------------------------------------------------
SMTP KOMUNIKACE:
$SMTP_COMM
---------------------------------------------------------------------
HLAVICKA ZPRAVY:
$MSG_HEADER
---------------------------------------------------------------------
SKENER: $SCANNER_NAME
$SCANNER_OUTPUT
''' 

Příště

Zběžně projdeme základní systémová nastavení a především si prohlédneme klíčovou část konfigurace – definici řetězců skenerů.

Našli jste v článku chybu?

22. 4. 2005 16:29

To chapete zle triedu NP. NP je trieda problemov, ktore vieme riesit nedeterministicky v polynomialnom case. Kazdy jazyk z P je aj v NP (opacne sa to zatial nevie). Existuju triedy jazykov, ktore nepatria do NP a daju sa algoritmicky riesit.

22. 4. 2005 8:12

Mozna by nebylo spatne dat priklad pouziti i nejakeho lepsiho antispamu, nez zastaraleho SpamAssdassina ;-) Jinak ale dobre.
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

120na80.cz: Stoná vaše dítě často? Upravte mu jídelníček

Stoná vaše dítě často? Upravte mu jídelníček

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: Na poslední chvíli šokuje výjimkami v EET

Na poslední chvíli šokuje výjimkami v EET

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí

Podnikatel.cz: Babiš: E-shopy z EET možná vyjmeme

Babiš: E-shopy z EET možná vyjmeme

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

120na80.cz: 5 přírodních tipů na bolest v krku

5 přírodních tipů na bolest v krku