Sagator (5): Skenery prakticky

David Zejda 29. 4. 2005

Minule jsme začali konfigurovat Sagator – vytvořili jsme vlastní jednoduchou třídu pro manipulaci s předmětem zpráv a lokalizovali jsme hlášení o nedoručení nebezpečné zprávy. Dnes rychle přeběhneme několik systémových nastavení a zaměříme se především na sekci SCANNERS[].

Systémová nastavení

Sagator zaznamenává zajímavé dění do logu – viz níže. Co všechno považujete za zajímavé vy, můžete systému stanovit proměnnou DEBUG_LEVEL. Jak je zvykem, vyšší číslo zahrnuje rovněž všechny zprávy patřící do kategorie s číslem nižším. Pokud chcete logovat jenom naprosté minimum, zvolte 0 – dozvíte se jenom závažné chyby. Pro běžné použití je optimální hodnota 3. Pokud budete hledat nebo hlásit potíže či dokonce bugy v programu, zkuste volbu vyšší, například něco mezi 4 a 7. Čísla vyšší než 9 raději nepoužívejte vůbec – desítka je vhodná pouze pro testování při vývoji a například po sobě ani nemaže soubory vytvořené v /tmp.

DEBUG_LEVEL=3 

Pak je tady trocha klec, jméno a skupina pro běh systému, port a adresa, na které běží SMTP server…myslím, že význam je jasný, navíc jsme to již řešili v druhém dílu v rámci instalace…

CHROOT='/var/spool/vscan'
LOGFILE=CHROOT+'/var/log/sagator/sagator.log'
USER,GROUP='vscan','vscan'
SMTP_SERVER=('127.0.0.1',26) 

Tak tady mám nadefinované kategorie zpráv podle detekované infekce. Sice je až na jednu výjimku nepoužívám, mám je tady ale tak nějak pro všechny případy – člověk nikdy neví, k čemu se mohou hodit..

DROP_INFECTED='.'
# DROP_SELECTED='(worm|@mm|Sobig|Klez|Bugbear|Gibe|Swen|Mimail|Sober|Bagle|Mydoom|Novarg|Lirva)'
# DROP_NOTHING='dasfadsffad'
# DROP_EVERYTHING='' 

Antivirové skenery

Konečně se dostáváme k jádru věci, ano, tady je to místo, kde jednotlivé zprávy obdrží své rozsudky..

SCANNERS=[
log(3,log.FORMAT, 

Nejprve si poradíme s viry..

status("Virus", 

Raději vše, co následně zlikvidujeme, schováme do karantény..

quarantine('/tmp/quarantine/%Y%m','', 

Nějakou dobu jsem používal omezení velikosti zpráv, nakonec jsem ale raději nastavil message_size_limit přímo v Postfixu. Proto je tato sekce zakomentářovaná. Můžete si všimnout také použití operátoru &.

# max_file_size(7*1024*1024,'FileSizeOverrun (Priloha vetsi nez 7MB)') & 

Zprávy se spustitelnými soubory (exe,com,scr..) v přílohách nezaslouží nic jiného než likvidaci:

parsemail(file_type({'exe': 'Executable (Spusitelny soubor)'})),
), 

O tom, že jim do schránky směřovala nebezpečná zpráva a že byla zlikvidována, informuji uživatele. Možná soudíte, že tím uživatele zbytečně otravuji a něco na takovém názoru asi skutečně je. Na druhou stranu někteří naši uživatelé takové oznamování vyžadovali, aby měli jistotu, že jim nějaká důležitá příloha neunikne.

Asi se shodneme na tom, že opravdovou hanebností je obesílání odesílatelů informacemi o tom, že z jejich počítače byl vyslán virus a že jsou pravděpodobně zavirováni – jak je známo, drtivá většina virů falšuje adresy odesílatele, a tak varování stejně dostane někdo nevinný. Takové zprávy spíše zavánějí reklamními snahami tvůrců antivirových systémů. Myslím ale, že morálka se v tomto směru trochu zlepšuje..

Autor Sagatoru SAL se zmínil, že pracuje na webovém rozhraní, přes které si bude moci sám uživatel obsluhovat svou karanténu, a také na možnosti shrnout všechna podobná hlášení do jednoho velkého digestu, který by se rozesílal v pravidelných intervalech (třeba denně)… Obě vylepšení působí zajímavě a jistě to bude lepší řešení než to moje stávající – už se těším, jak budu moci tuto část konfigurace zlikvidovat.

Dále si můžete všimnout, že pro hledání virů používám libclam, což je prý podstatně lepší než řešení s démonem clamd – spolehlivější a podstatně rychlejší.

report_recipients(REPORT_MSG,
  quarantine('/tmp/quarantine/%Y%m','',
    drop(DROP_INFECTED,
      stream2mbox(libclam()),
)))), 

To by bylo k virům z mé strany vše. Další kapitolou je spam, nuže vrhněme se na něj. Jak jsem naznačil v úvodu minulého dílu, moje požadavky byly trochu atypické. Princip řešení, které mi umožnilo jich dosáhnout, je následující:

Antispamové skenery

Připomínám, že požadavkem je dvoustupňové nakládání s odhalenými spamy – jisté likvidujeme, pravděpodobné označujeme. Jak na to? Nejprve zprávu proženeme SpamAssassinem, výsledek uložíme do pomocné proměnné skenerem store(), přejmenujeme název viru na '' a spamlevel na 0. Tím vlastně říkáme, že v této fázi se zprávou nebudeme nic provádět, ať už obsahuje třeba celou lékárnu ;-)

status("Spam",
  rename('',
    store('t',
      spamassassind(['127.0.0.1',783])) * const(0.0)
), 

Až teď je vhodná doba na vlastní soud. Zprávy se Sagator spam levelem nižším než 1 jsou prohlášeny za nevinné, a tak název viru ponecháme prázdný. Všechny těžké hříšnice, tedy ty, co dostaly Sagator spam level vyšší než 1,75 (a tedy SpamAssassin spam hits vyšší než 1,75 násobek REQUIRED_HITSu), bez milosti dropneme. Pro vytažení dříve uložené hodnoty spam levelu poslouží restore().

drop('.',
  rename('$STARS',
    restore('t')>=const(1.75)
)), 

Kde si nejsme úplně jistí (tedy u levelů mezi 1.0 a 1.75), nastavíme název viru podle spam hits SpamAssassinu, vyjádřených hvězdičkami. V předmětu zpráv se tedy objeví něco jako „SPAM *****“. Následně vynutíme doručení takto ocejchovaných zpráv.

deliver(
  modify_subject('[%V]',
    rewrite_name('$VNAME $STARS',
      restore('t')
)))))] 

A to je zhruba vše podstatné. Konfigurák obsahuje ještě druhou sekci, kde je třeba specifikovat jednotlivé servery Sagatoru. Jak vidíte, zde jsem si vystačil s docela úsporným tvarem – kromě vlastního skenovacího serveru mi běží už jen sběrač údajů pro statistiky MRTG.

SRV=[
  collector('127.0.0.1',28),
  smtpd(SCANNERS,'127.0.0.1',27)
] 

Kompletní konfigurační soubor, který jsem zde popisoval, je součástí sbírky dalších atypických konfigurací vystavených na webu Sagatoru.

Příště

Zmíníme se o tom, jak lze provádět kontrolu naplněných poštovních schránek, jak lze vracet z karantény, a o pár dalších drobnostech…

Našli jste v článku chybu?
120na80.cz: Jaké plavecké pomůcky vaše dítě ochrání?

Jaké plavecké pomůcky vaše dítě ochrání?

Root.cz: Bitcoin začal vyplácet jen půlku odměn

Bitcoin začal vyplácet jen půlku odměn

DigiZone.cz: DAB už i z Košic. A překvapivě!

DAB už i z Košic. A překvapivě!

120na80.cz: SOS aneb spálená pokožka

SOS aneb spálená pokožka

DigiZone.cz: ČRo čekají personální změny

ČRo čekají personální změny

Vitalia.cz: Největší chyby při podávání vína?

Největší chyby při podávání vína?

Vitalia.cz: Bio vejce nepoznají ani veterináři

Bio vejce nepoznají ani veterináři

Vitalia.cz: Taky je nosíte? Barefoot není pro každého

Taky je nosíte? Barefoot není pro každého

Podnikatel.cz: Profese budoucnosti? Úředník nepřežije

Profese budoucnosti? Úředník nepřežije

Podnikatel.cz: Italské těstoviny nebyly k mání, tak je začal vyrábět

Italské těstoviny nebyly k mání, tak je začal vyrábět

Měšec.cz: Nový sazebník mBank radost nedělá

Nový sazebník mBank radost nedělá

DigiZone.cz: Skylink o půlnoci vypnul 12 525

Skylink o půlnoci vypnul 12 525

Lupa.cz: IT scéna po brexitu: přijde exodus vývojářů?

IT scéna po brexitu: přijde exodus vývojářů?

DigiZone.cz: Skylink: do pátku může docházet k výpadkům

Skylink: do pátku může docházet k výpadkům

Podnikatel.cz: Prodej na Alibabě? Malí hráči utřou nos

Prodej na Alibabě? Malí hráči utřou nos

Vitalia.cz: Zmrzlinu? Ani snad ne

Zmrzlinu? Ani snad ne

Podnikatel.cz: Tahle praktika stála šmejdy přes milion

Tahle praktika stála šmejdy přes milion

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí vaše karta

Do ostravské MHD bez jízdenky. Stačí vaše karta

DigiZone.cz: Ve Varech představeni i noví "Četníci"

Ve Varech představeni i noví "Četníci"

Lupa.cz: Největší pitominy s logem “nyní smart a připojené”

Největší pitominy s logem “nyní smart a připojené”