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?
120na80.cz: Rozpustná vs. nerozpustná vláknina

Rozpustná vs. nerozpustná vláknina

Vitalia.cz: Syfilis: To není „nemoc z lásky“

Syfilis: To není „nemoc z lásky“

Měšec.cz: Kurzy platebních karet: vyplatí se platit? (TEST)

Kurzy platebních karet: vyplatí se platit? (TEST)

120na80.cz: Víte, co je svobodná menstruace?

Víte, co je svobodná menstruace?

Lupa.cz: Elektronika tajemství zbavená. Jak s ní začít?

Elektronika tajemství zbavená. Jak s ní začít?

Měšec.cz: Co když na dovolené přijdete o kartu?

Co když na dovolené přijdete o kartu?

Měšec.cz: Udali ho na nelegální software a přišla Policie

Udali ho na nelegální software a přišla Policie

Měšec.cz: Platíme NFC mobilem. Konečně to funguje!

Platíme NFC mobilem. Konečně to funguje!

Lupa.cz: Hackujete? Můžete mít problém sehnat práci

Hackujete? Můžete mít problém sehnat práci

Měšec.cz: Investiční pasti. Děláte to, co ostatní, ale proděláváte

Investiční pasti. Děláte to, co ostatní, ale proděláváte

DigiZone.cz: Vláda schválila digitální vysílání ČRo

Vláda schválila digitální vysílání ČRo

Podnikatel.cz: Novela zákoníku práce. Řeší homeworking

Novela zákoníku práce. Řeší homeworking

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: ČTÚ červenec: rušení trochu vzrostlo

ČTÚ červenec: rušení trochu vzrostlo

Měšec.cz: Test: Výběry z bankomatů v cizině a kurzy

Test: Výběry z bankomatů v cizině a kurzy

Podnikatel.cz: Pozor na vykuky, imitují služby České pošty

Pozor na vykuky, imitují služby České pošty

Podnikatel.cz: SMS oznamují nedoplatek na dani, nic neplaťte

SMS oznamují nedoplatek na dani, nic neplaťte

120na80.cz: Lepší poporodní sexuální život? Žádný problém

Lepší poporodní sexuální život? Žádný problém

Měšec.cz: Se stavebkem k soudu už (většinou) nemusíte

Se stavebkem k soudu už (většinou) nemusíte

Vitalia.cz: Proč mu to dává? Copak už může kaši?

Proč mu to dává? Copak už může kaši?