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?
DigiZone.cz: Skylink přidává kanály už teď

Skylink přidává kanály už teď

DigiZone.cz: Mobilní aplikace pro DVTV je tady

Mobilní aplikace pro DVTV je tady

Měšec.cz: Cestujte bez starostí, získejte výhodné pojištění

Cestujte bez starostí, získejte výhodné pojištění

DigiZone.cz: ČTÚ květen: rušení TV vysílání narůstá

ČTÚ květen: rušení TV vysílání narůstá

Vitalia.cz: Epidemie: Klíšťová encefalitida po ovčím sýru

Epidemie: Klíšťová encefalitida po ovčím sýru

DigiZone.cz: ČT veze bronz z klání televizní grafiky

ČT veze bronz z klání televizní grafiky

DigiZone.cz: Nova: technické pauzy každé 1. pondělí

Nova: technické pauzy každé 1. pondělí

Lupa.cz: eIDAS je tu. O co přijdeme u elektronických podpisů?

eIDAS je tu. O co přijdeme u elektronických podpisů?

Vitalia.cz: Ministři se přou o využívání antibiotik

Ministři se přou o využívání antibiotik

DigiZone.cz: Soud zakázal šíření TV Markíza v ČR

Soud zakázal šíření TV Markíza v ČR

DigiZone.cz: Krajské televize na okraji zájmu?

Krajské televize na okraji zájmu?

DigiZone.cz: TV Nova a její postoj k DVB-T2

TV Nova a její postoj k DVB-T2

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

Podnikatel.cz: Oblíbené Babišovo reverse charge. Potopilo je?

Oblíbené Babišovo reverse charge. Potopilo je?

Lupa.cz: Jaké IoT tarify nabízejí mobilní operátoři?

Jaké IoT tarify nabízejí mobilní operátoři?

DigiZone.cz: Roční bonus pro Dvořáka schválen

Roční bonus pro Dvořáka schválen

Měšec.cz: Od kdy musí studenti platit pojistné?

Od kdy musí studenti platit pojistné?

Podnikatel.cz: Jeho dřevěné hodinky chtějí na všech kontinentech

Jeho dřevěné hodinky chtějí na všech kontinentech

Měšec.cz: Co s reklamací, když e-shop krachuje?

Co s reklamací, když e-shop krachuje?

DigiZone.cz: Markíza: tady je předběžné opatření

Markíza: tady je předběžné opatření