Portál AbcLinuxu, 30. dubna 2025 23:08

DSPAM jednoduše a pohodlně

18.9.2006 16:25 | Přečteno: 3384× | Linux | Výběrový blog | poslední úprava: 27.9.2006 16:38

Již delší dobu na mail serverech jako antispam používám DSPAM. Většinou se jedná o "větší" mail servery s několika virtuálními doménami a řádově stovkami uživatelů. Po několikaleté zkušenosti jako největší slabinu v boji proti SPAMu pomocí DSPAMu vidím uživatele samotné. Je to dáno především tím, že ke správné funkci DSPAMu je vyžadována aktivita z jejich strany. Ano, mluvím o "přeposílání" e-mailů, které byly DSPAMem chybně vyhodnoceny.
DSPAM po vyhodnocení do každého e-mailu přidá svou značku, podle které tuto zprávu později jednoznačně identifikuje. V případě chybného vyhodnocení je od uživatele vyžadováno, aby zprávu přeposlal na speciální adresu. Tímto mechanismem se zpráva dostane ke znovuzpracování DSPAMem, který pomocí své již existující značky zprávu jednoznačně identifikuje a přehodnotí výsledek původní analýzy.
Lze toho dosáhnout i jinak, např. přes speciální web rozhraní DSPAMu apod., nicméně ze zkušenosti vím, že takto pro uživatele netransparentní řešení moc úspěšné není.

I postup s přeposíláním chybně vyhodnocených zpráv má svá úskalí:

1. speciální e-mail adresa, na kterou jsou/mají být zprávy přeposílány
- v určitých skupinách uživatelů není problém si pamatovat 150 adres chudáků kamarádů a kamarádek, kterým každé ráno "letí" nejnovější letadla a vtípky, ale je problém si zapamatovat adresu pro přeposílání SPAMu.

2. přeposílání pouze po jednom
- touto metodou nelze přeposlat více chybně zpracovaných zpráv najednou, což je např. v situaci návratu z dovolené a většího počtu SPAMů nepříjemné.

3. identifikační značka
- při přeposílání SPAMů z e-mail klientů v některých případech dochází ke ztrátě identifikační značky DSPAMu (např. u čistě obrázkových SPAMů).


Před nějakou dobou jsem začal používat jiný postup, který je pro uživatele transparentní, pohodlný a rychlý. Předpokladem je pouze používání Maildiru pro ukládání zpráv na serveru a IMAP protokolu pro přístup do schránek.

Každá e-mailová schránka obsahuje navíc složku SPAM, která má 2 podsložky - isSPAM a noSPAM.
INBOX
INBOX.Drafts
INBOX.Sent
INBOX.Trash
INBOX.SPAM
INBOX.SPAM.isSPAM
INBOX.SPAM.noSPAM
Do složky SPAM je doručena každá zpráva, která je DSPAMem vyhodnocena jako SPAM. V případě chybného vyhodnocení zprávy jako SPAM (false positive) postačí, aby uživatel tuto zprávu přesunul do podsložky noSPAM. V případě chybného vyhodnocení zprávy jako neSPAM (false negative) postačí, aby uživatel tuto zprávu přesunul do podsložky isSPAM.

Tento postup mj. odstraňuje všechna výše zmíněná úskalí - uživatelé nepřeposílají, ale většinou zprávy jednoduše drag&drop přesunou přímo ve svém oblíbeném e-mailovém klientovi do příslušné složky, bez problémů takto mohou přesunovat více zpráv najednou a při přesouvání mezi složkami nedochází ke změně obsahu, tzn. nemůže dojít ke ztrátě identifikační značky DSPAMu. Sám o sobě by tento mechanismus nefungoval, na straně serveru je proto potřeba zajistit proces, který bude procházet tyto podsložky a předávat obsažené zprávy DSPAMu ke znovuzpracování.

Uvedu zde jednoduchý příklad, který úspešně používám na serverech s malým počtem uživatelů, kteří na serveru mají bežný účet (tzn. nejedná se o virtuální uživatele). Celé řešení je nezávislé na použitém softwaru pro realizaci potřebných služeb (SMTP, IMAP ..).

Ve většině instalací používám k plné spokojenosti Postfix v kombinaci s Maildropem a Courier-IMAPem.

Postfix -> Maildrop[ClamAV,DSPAM] -> Maildir <-> Courier-IMAP
Globální konfigurační soubor pro MDA Maildrop, který zajistí antivirovou kontrolu přes ClamAV a přesunutí zprávy vyhodnocené jako SPAM do příslušné složky vypadá takto:
/etc/maildroprc:
DEFAULT="$HOME/Maildir"
SPAMFOLDER="$DEFAULT/.SPAM/"

if(`/usr/bin/clamdscan --no-summary --stdout - | grep -c 'FOUND'` == 1)
{
        to "/dev/null"
}

xfilter "/usr/bin/dspamc --user $USER --stdout --deliver=innocent,spam"

if(/^X-DSPAM-Result: Spam.*$/)
{
        to $SPAMFOLDER
}

to $DEFAULT

Skript, který prochází příslušné podsložky schránky a předává nalezené zprávy ke znovuzpracování DSPAMu, může v tomto případě vypadat takto:
/usr/bin/dspam_inspect:
#!/bin/bash
MAILDIR=$HOME/Maildir
SPAMFOLDER=$MAILDIR/.SPAM
ISSPAMFOLDER=$SPAMFOLDER.isSPAM
NOSPAMFOLDER=$SPAMFOLDER.noSPAM

DSPAM_FP="dspamc --user $USER --class=innocent --source=error --stdout --deliver=spam,innocent"
DSPAM_FN="dspamc --user $USER --class=spam --source=error --stdout --deliver=spam,innocent"

for folder in {$NOSPAMFOLDER/cur,$NOSPAMFOLDER/new,$ISSPAMFOLDER/cur,$ISSPAMFOLDER/new}; do
   for message in `ls -A $folder`; do
      mv "$folder/$message" "$folder/../tmp/"
   done
done

for falsepositive in `ls -A $NOSPAMFOLDER/tmp`; do
   cat "$NOSPAMFOLDER/tmp/$falsepositive" | $DSPAM_FP > "$MAILDIR/new/$falsepositive"
   rm "$NOSPAMFOLDER/tmp/$falsepositive"
done

for falsenegative in `ls -A $ISSPAMFOLDER/tmp`; do
   cat "$ISSPAMFOLDER/tmp/$falsenegative" | $DSPAM_FN > "$SPAMFOLDER/new/$falsenegative"
   rm "$ISSPAMFOLDER/tmp/$falsenegative"
done

Tento skript je v pravidelných intervalech (např. 5 minut) automaticky spouštěn z uživatelské cron tabulky. Hodí se pro menší instalace s lokálními účty.
Pro větší řešení s virtuálními účty jsem si pro tento účel napsal v pythonu daemona, který navíc provádí různé blbuvzdorné kontroly, se kterými tento skript nepočítá (např. smazaná složka apod.) a není spouštěn z cronu, ale beží trvale na pozadí.

Po migraci z "přeposílací" metody na tuto je úspěšnost DSPAMu a celého řešení daleko vyšší, protože je pro úživatele jednoduchá, rychlá a pohodlná a tudíž ji používají. Funguje ihned v kterémkoliv e-mail klientovi a to např. i webovém, který používá IMAP pro přístup ke schránkám - výborné zkušenosti mám s IlohaMailem.        

Hodnocení: 93 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

18.9.2006 16:44 Ivanhoej | skóre: 26 | blog: ss2_Debian | Bratislava
Rozbalit Rozbalit vše Re: DSPAM jednoduše a pohodlně
Odpovědět | Sbalit | Link | Blokovat | Admin
pekne, tiez som chcel dspam ale ma trosku narocnejsiu konfiguraciu ako spamassasin+sagator. Ale uznavam ze na vacsie pocty mailov moze byt rychlost dspamu rozhodujuca.

kazdopadne sagator+dspam je super kombinacia.
18.9.2006 17:45 marekb | skóre: 16 | blog: Co se nevešlo do /dev/null | Praha
Rozbalit Rozbalit vše Re: DSPAM jednoduše a pohodlně
SpamAssasin nekdy pouzivam k prvotnimu uceni DSPAMu - naprosto jednoduse pridanim dalsiho filtru do zmineneho /etc/maildroprc

pred radek:
to $DEFAULT
vlozim filtraci pres SpamAssasin a v pripade vyhodnoceni jako SPAM se zprava presune do slozky SPAM.isSPAM, kde je nasledne automaticky predana DSPAMu ke znovuvyhodnoceni:
xfilter "/usr/bin/spamc"

if (/^X-Spam-Level: \*\*\*\*\*.*$/)
{
        to "$SPAMFOLDER/.isSPAM/"
}
18.9.2006 21:57 Ondřej Čečák | skóre: 33
Rozbalit Rozbalit vše Re: DSPAM jednoduše a pohodlně
Odpovědět | Sbalit | Link | Blokovat | Admin
"Po několikaleté zkušenosti jako největší slabinu v boji proti SPAMu pomocí DSPAMu vidím uživatele samotné. Je to dáno především tím, že ke správné funkci DSPAMu je vyžadována aktivita z jejich strany."

Presne tak, proto mi prijde zcestne pouzivat podobne content analyzy, pokud se nekdo o databazi spravne nestara.
-- "Ja vim, on vi, ty pico!"
27.9.2006 09:42 Lukáš Zapletal | skóre: 42 | blog: lzapův svět | Olomouc
Rozbalit Rozbalit vše Re: DSPAM jednoduše a pohodlně
Odpovědět | Sbalit | Link | Blokovat | Admin
Velice hezké. Škoda, že to funguje jen s IMAPem. Řešení by mohlo být takové, že se vytvoří stránka s e-maily užiívatelů pro SPAM adresy (takové ty lukas-spam@domena.cz). Bily text na bilem pozadi, at se boti nazerou a koza zustane cela.

Tohle jste zkousel? Pomaha to?

Jinak pokud jsem to pochopil dobre ten skript, tak on v podstate kazdych 5 minut prochazi znovu a znovu vsechny schranky uzivatelu a uci se. Maily nekam presouva do tempu a pak je zpracovava. Ale co kdyz se uzivatel ke schrance nepripoji, pak se DSPAM nazere nezkontrolovanymi e-maily, ne? Nejak to tedy nechapu...
Later --- Lukáš Zapletal
27.9.2006 12:57 marekb | skóre: 16 | blog: Co se nevešlo do /dev/null | Praha
Rozbalit Rozbalit vše Re: DSPAM jednoduše a pohodlně
K "učení" DSPAMu používám několik metod:
- již výše zmíněné využití SpamAssassinu pro tyto účely
- existující databáze
- honeypot stránky
- Centrum.cz :-)

Ta poslední varianta není asi moc férová vůči centrum.cz, nicméně můžu potvrdit, že je velice účinná :-)
Zaregistroval jsem několik schránek, které mají před zavináčem nějaké generické anglické slovíčko - z těch nejúspěšnějších uvedu např. customer, potato ... Na tyto adresy začal SPAM okamžitě chodit tak nějak automaticky :-)
Potom jsem na centru udělal filtr, který jednoduše každou zprávu vyhodnocenou jako SPAM pošle v původní podobě na moji/moje "krmící" SPAMovou adresu/y..

K principu fungování uvedeného skriptu - každých x minut skript prochází podsložky noSPAM a isSPAM. Do těchto složek se zprávy mohou dostat pouze přesunutím z jiné složky uživatelem - tzn. je automaticky jasné, že došlo k chybnému vyhodnocení (jinak by složky byly prázdné) a je potřeba zprávy vyhodnotit znovu.. Pokud se uživatel ke schránce nepřipojí, tyto podsložky zůstávají prázdné, tzn. DSPAM nic nezpracovává znovu a ničím nežádoucím se "nenažere", pouze nově příchozí poštou..

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.