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ů.