Portál AbcLinuxu, 23. května 2024 23:15

Spam: naučte se bránit - I

1. 8. 2003 | Ondřej Zloský
Články - Spam: naučte se bránit - I  

Vadí vám hromada nechtěných reklam ve vašem mailboxu? Podívejme se tedy na to, jaké máme v linuxovém světě možnosti udržet svou schránku bez tohoto nešvaru.

Nemoci je lépe předcházet, než ji léčit

Dříve než se pustíme do odstraňování došlé nechtěné pošty, řekněme si pár zásad, jak vůbec spamu předcházet. Všechny vesměs vycházejí z jediného - opatrnosti a zbytečnému nevystavování své adresy všude na internetu.

Je také dobré si uvědomit, že nové adresy na internetu nehledají lidé, ale rádoby inteligentní roboti. Roboty je možné alespoň trochu zmást, takže pokud je opravdu potřeba porušit některé z výše uvedených zásad, pak alespoň trochu rozumně. Je například možné místo klasické adresy "cosi@domena.cz" psát "cosi at domena.cz". Protože roboti prohledávají zdrojové kódy stránek, lze je také ošálit například tím, že svou adresu v kódu zamaskujete za znaky v ASCII hodnotách neboli za html entity.

<a href="mailto:&#099;&#111;&#115;&#105;
&#064;&#100;&#111;&#109;&#101;
&#110;&#097;&#046;&#099;
&#122;">cosi at domena.cz</a>

Takovou adresu prozatím robot opravdu nepoužije (ačkoli by asi nebyl problém ho to naučit).

Všemu předejít nejde, a tak se někdy musí i léčit

Přístupy k odstranění spamu jsou dva, dost často se používá jejich kombinace:

Jednoduše pomocí procmailu

Hlavní nevýhodou tohoto řešení je fakt, že ve chvíli, kdy dochází k filtraci je už pošta stažena k nám a tudíž se nešetří přenos po lince. Pokud se s tímto faktem smíříme, pak můžeme vesele začít.

Princip je jednoduchý. Při pročítání došlých mailů snadno zjistíme, z kterých adres chodí jenom obtěžující zprávy, a můžeme si tak vytvořit jejich seznam, který uložíme do tzv. blacklistu (černá listina). Na rozdíl od níže popsaných whitelistů je možné získat takové seznamy na internetu z databází, které se pravidelně aktualizují. Některé programy přímo využívají online databáze, ale existuje zde riziko, že se na seznamu vyskytnou naši přátelé nebo dokonce celé domény nějakého poskytovatele připojení k internetu, čímž bychom mohli přijít o něco, co nechceme ztratit.

Při procházení schránky se dá ale také vypozorovat, že spousta zpráv je doručována (položky To: a Cc:) neexistujícím nebo prázdným uživatelům. To se stává především majitelům doménových košů, kam běžně padají maily pro uživatele xxx@domena.cz, abcde@domena.cz, qwerty@domena.cz, sdfhsdf@domena.cz nebo Undisclosed-Recipient a další nesmyslné, náhodně generované uživatele. Všechny takové maily je sice možné třídit, ale zde pro změnu existuje veliké riziko, že ani chtěný dopis nebude mít korektně vyplněnou hlavičku nebo naše adresa bude vyplněna v políčku Bcc:(Blind Carbon Copy). Pro takovou situaci se naopak vytváří tzv. whitelist, kde jsou adresy našich známých nebo obchodních partnerů u nichž víme, že poštu od nich opravdu chceme.

Řekněme, že seznamy tedy máme. Ale co s nimi? Použijeme filtrovací nástroj procmail. Konfigurační soubor se nachází v ~/.procmailrc nebo v /etc/procmailrc. V tomto souboru nadefinujeme následující pravidla.

Cokoli, co není posláno přímo nám (lojza@domena.cz nebo franta@domena.cz) nebo se nenachází na whitelistu, který je uložen v souboru ~/.spam-whitelist.

:0:
* !^(To|Cc):.*(lojza|franta)@domena.cz
* !? formail -x"From:" -x"From" -x"Sender:" \
     | egrep -is -f $HOME/.spam-whitelist
/home/user/mail/spam

První řádek říká, že se bude kontrolovat všechna pošta, druhý aplikuje filtr pro vše, co nesměřuje na naše adresy. Třetí řádek vezme adresy z hlavičky z položek "From", "From:" a "Sender:" a porovná je se všemi adresami, které jsou uvedeny na samostatných řádcích v souboru ~/.spam-whitelist (čtvrtý řádek pravidla). Pokud tedy mail není zaslán přímo nám a není odeslán z povolené adresy, tak se přesune do složky uvedené na posledním řádku. Může to být např. spam, unwanted nebo třeba /dev/null (o tom níže).

Všechny zprávy od uživatelů na blacklistu rovnou odstraň:

:0:
* ? formail -x"From:" -x"From" -x"Sender:" \
     | egrep -is -f $HOME/.spam-blacklist
/home/user/mail/spam

Porovnává adresy z hlavičky podle položek "From", "From:" a "Sender" se všemi adresami, které jsou uvedeny na samostatných řádcích v souboru ~/.spam-blacklist, a pokud vzorku vyhovují, pak zprávy přesouvá do složky /home/user/mail/spam.

A tím je problém vyřešen. Jak jsem sliboval, tak se ještě zmíním o tom, kam směrovat nevyžádanou poštu. Již jsem řekl, že buď do nějaké speciální složky nebo rovnou do /dev/null. Možné je obojí a obojí má své nevýhody. Pokud budeme zprávy ukládat do složky např. spam, musíme ji průběžně kontrolovat nebo si třeba jednou za týden nechat zaslat hlavičky všech zadržených mailů, abychom náhodou nezahodili něco žádoucího. U varianty /dev/null nás neobtěžuje ani toto, ale musíme si být naprosto jisti, že nebyl smazán životně důležitý mail, který neprošel sítem. Proto doporučuji minimálně opatrnost.

Spam Report

Pro zaslání hlaviček nevyžádaných mailů je možné použít nějaký jednoduchý skript. Já používám něco takového a tento skript dvakrát týdně spouští cron.

#!/bin/bash

# zaslani hlavicek spam mailu na cosi@domena.cz
formail -X"Date:" -X"From:" -X"To:" -X"Subject:" \
-i "X-Mark: ----------------------" \
-x "X-Mark:" -s < /home/user/mail/spam | \
mail cosi@domena.cz -s "Spam-Report"

# rotace spamboxu, aby se report zasilal jen jednou
cat /home/user/mail/spam >> /home/user/mail/spam.1
echo -n "" > /home/user/mail/spam

První část zasílá z hlavičky položky Date, From, To, Subject a X-Mark (ta je přidaná pouze jako oddělovač jednotlivých zpráv) na adresu cosi@domena.cz s předmětem Spam-Report. Druhá polovina potom zajišťuje přesun oznámených mailů do složky spam.1. Obsah spam.1 se již neoznamuje a čeká na ruční smazání nebo přesun mailů.

Zpráva pak vypadá následovně:

Date: Sun, 6 Jul 2003 14:35:04 +0200
From: cosi@domena.cz
To: cosi@domena.cz
Subject: Spam-Report

From: Kertis Zadra <KertisZadra@i-mailbox.net>
Subject: Fantastic university degree deal for one and all!
Date: Sat, 5 Jul 2003 10:18:57 -0400
To: Pyfrom Hoelscher <Paniccia@amuromail.com>
----------------------
Date: Sun, 6 Jul 2003 14:34:25 +0200 (CEST)
From: <nekdo@odkudkoli.cz>
To: <Undisclosed-Recipient:;@bla.domena.cz;;;>
Subject: Akcni ceny!!!
----------------------
Date: Sun, 6 Jul 2003 11:17:02 +0200 (CEST)
From: <weradghgf@zenon.ru>
To: <oiulkjee@domena.cz>
Subject: ěščřž
----------------------

Spam-x

Procmail nabízí mnoho zajímavých možností jak řešit problém pomocí seznamu zakázaných a povolených adres. Jednou z nich je Spam-x. Ta už ale vyžaduje jistou asistenci protistrany. Filozofie této možnosti je taková, že vyžádaná pošta chodí pouze ze skutečných (nikoli falšovaných) adres odesílatele a že odesílatel je ochoten toto potvrdit dalším mailem.

Zjednodušeně řečeno: pokud přijde email od někoho poprvé, pak procmail skript odešle žádost o potvrzení "živosti" a prozatím mail uloží do fronty. Jakmile potvrzení přijde, původní email je odeslán příjemci a adresa odesílatele se uloží na whitelist.

Samozřejmě je možné whitelist upravovat i manuálně, je možné mít i blacklist, definovat mailing-listy, do kterých jste přihlášeni (ty pravděpodobně na výzvu neodpoví), ...

Projektík se průběžně vyvíjí a nalézá se zde. Vše, co pro spuštění bude potřeba, je přepsat svůj soubor ~/.procmailrc souborem, který je na stránkách ke stažení a nastavit si 5 proměnných na své hodnoty.

MY_EMAIL
Naše mailová adresa
MY_NAME
Naše jméno
BOTS
Regulární výraz, který odpovídá známým adresám, které Spamují a které chcete uchovávat ve zvláštní složce
KNOWN_DOMAINS
Také regulární výraz, tentokrát pro domény, ze kterých nikdy nechodí spam. Maily z těchto domén nebudou kontrolovány.
LISTS
Poslední regulární výraz, který odpovídá položkám "To:" na mailing listech, do kterých jsme zapsaní. Zprávy z těchto adres se taktéž nebudou kontrolovat.

Dále je asi vhodné upravit odesílanou zprávu, resp. ji přeložit do češtiny a zkontrolovat nastavení systémových cest, jestli odpovídají i v našem počítači (u mě například cesta k programům grep a head neodpovídala). Je také potřeba vytvořit adresář ~/pending_messages, kam se bude ukládat fronta nedoručených zpráv.

mkdir ~/pending_messages

Čas od času je také dobré zkontrolovat poštu uvízlou ve frontě, která čeká na své potvrzení. Ovládání je jednoduché a provádí se mailem.

Pro jednodušší správu ještě autor používá cron, který maže zprávy z čekající fronty a který srovnává .accept-list podle abecedy. Spustíme tedy "crontab -e" a přidáme tyto 2 řádky:

45 1 * * 1 cd /home/user/pending_messages; find . -mtime +6 -print | sed 's/"/\\"/' | xargs rm
45 2 * * 1 cd /home/user; sort -u .accept-list > a.tmp; mv -f a.tmp .accept-list

kde adresář /home/user samozřejmě nahradíme svým domovským adresářem.

Závěrem

Existuje jistě spousta dalších možností, jak se bránit pomocí procmailu. Některé se snaží i o kontrolu těla mailu podle klíčových slov jako například junk filter, nebo pro zařazení do whitelistu vyžadují v každém mailu heslo v subjectu, například spamfoil s krásným mottem "Spamming is futile, you will be filtered".

Pro další zkoumání mailů a upravování procmail pravidel doporučuji manuálové stránky procmail, procmailrc a procmailex.

Příště si povíme o tom, co je to Bayesiánský filtr, jak funguje SpamAssassin a jak se poprat se Spamem v Mozille.

Související články

Spam: naučte se bránit - II
MessageWall - kladivo nejen na spam
Zajímavosti ze světa Linuxu 2

Odkazy a zdroje

Why Am I Getting All This Spam?
Timo's procmail tips and recipes
Reading Email Headers

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

Diskuse k tomuto článku

1.8.2003 10:42 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Pár depresivních poznámek
Odpovědět | Sbalit | Link | Blokovat | Admin
Striktní whitelisty jsou podle mne proti základní myšlence mailu, že každý může poslat mail komukoli, stačí znát jeho adresu. Při tomto přístupu už je lepší zahazovat vše, co není podepsáno mně známým PGP klíčem a zašifrováno mým veřejným. To je aspoň reálná kontrola, která navíc řeší další problémy e-mailu (autenticitu a otevřenost). Kontrola From či From: na známé domény nebo odesilatele je velmi nedokonalá a spammeři to vědí; spam, který se tváří, že jsem si ho poslal sám, není žádnou výjimkou. Stejně tak je podle mne zcestná myšlenka spam-x. Maily od spam-x považuji za spam. Hrozí deadlock, protože takových programů exisuje několik (např. Active Spam Killer), a pokud neznají a nesynchronizují navzájem své informace o tom, jak vypadají potrvzovací maily těch ostatních, tak je samozřejmě zadrží, a deadlock je na světě -- to lze řešit jen stadnardizací, která ovšem usnadňuje vytvoření automatických odpovídačů. V USA (odkud chodí nejvíce spamu) pravděpodobně začne platit brzy zákon legalizující spam za předpokladu reálného From v hlavičce -- tímpádem ovšem spammerům potvrzovací mail dojde a oni (a) si zařadí vaši adresu do ,živých` (b) automatický odpovídač na něj odpoví. No a na zamaskované adresy máme deobfuscator. Napsal jsem ho víceméně z legrace, kdybych byl spammer, napíšu to pořádně. Pokud máte osm let stejnou e-malovou adresu a nehodláte se jí vzdát (jako já), tak jsou dobré rady, jako nepsat ji do diskusních fór, marné -- všichni spammeři už ji stejně mají.
1.8.2003 11:43 zlosyn | skóre: 24
Rozbalit Rozbalit vše Pár depresivních poznámek

Nikdo samozřejmě netvrdí, že tyto metody jsou dokonalé. Nicméně podle zkušeností alespoň něco zadrží. Od běžné komunikace podepsané PGP klíčem jsme bohužel ještě celkem daleko a myslím, že je lepší alespoň nějaká obrana, než žádná.

Abych byl upřímný, tak možnost výše popsaného deadlocku mě nedocvakla a je to asi pravda. Otázkou je, jak moc je v našich končinách tato hrozba reálná a jak často by k takovému problému ve skutečnosti došlo.

Adresy se každý nerad vzdává, ale zase je lepší předcházet tomu být zařazen do spamlistu, než tomu nechat volný průběh a pak se divit, co to tam vlastně chodí.

P.S. druhý díl by měl být o něco praktičtější (alepoň doufám)

1.8.2003 12:24 Leoš Literák | skóre: 74 | blog: LL | Praha
Rozbalit Rozbalit vše pozor na prohlizec
Odpovědět | Sbalit | Link | Blokovat | Admin
Ahoj, dneska me napadlo, jak je mozne vytahnout vasi adresu z prohlizece. Samozrejme to neni zadna novinka, ale treba to nekoho muze varovat: v mozille je mozne nastavit vasi emailovou adresu pro anonymni pristup k FTP serverum. nicmene pokud si nekdo na stranky da znacku obrazku a jako URL umisti FTP server, tak ziska emailove adresy vsech svych navstevniku. Staci upravit FTP server, aby logoval "hesla" u anonymnich ucastniku. Pro tento ucel staci misto FTP serveru napsat hloupy program v perlu ci shellu .. <img src="ftp://192.168.1.1/steal_my_email.gif"> Jedinou ochranou je nevyplnovat tuto polozku ..
Zakladatel tohoto portálu. Twitter, LinkedIn, blog, StackOverflow
1.8.2003 12:49 met | skóre: 9 | Praha
Rozbalit Rozbalit vše pozor na prohlizec
>v mozille je mozne nastavit vasi emailovou adresu pro anonymni pristup k FTP serverum No v Mozille je: "Send this email address as anonymous FTP password:" (v ceske verzi "Posilat tuto adresu elektronicke posty jako anonymni heslo pro FTP"). Ja tam tedy nikdy pravou adresu nepsal ;-)
1.8.2003 18:38 glo
Rozbalit Rozbalit vše pozor na prohlizec
to ja taky ne. a myslim ze snad nikdo koho znam :) to je vetsinou neco jako a@a.a :)
1.8.2003 21:56 Ondrej Skutka
Rozbalit Rozbalit vše Anglicky mail == spam
Odpovědět | Sbalit | Link | Blokovat | Admin

Muj antispamovy filtr (procmail) vychazi z jednoduche myslenky, ze 99% spamu jsou anglicke spamy. Kazdy prichozi mail tedy prozenu scriptem, ktery zjisti pomer anglickych slov (pomoci /usr/share/dict/words) a pokud je vyssi, nez urcite procento (80), pak je povazovan automaticky za spam (pokud neni na white-listu).

Tedy mam i white a black listy. Pokud nemate anglickeho pritele/kyni, pak je to VELMI pouzitelny a ucinny antispamovy filtr.

Nevyhody jsou, ze pokud chcete dosta(va)t nejakou anglickou postu, je treba danou adresu nejprve pripsat do white-listu

2.8.2003 08:31 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Anglicky mail == spam
myslim, ze tohle je pro vetsinu lidi opravdu nepouzitelne. nejenze dostavam i uctyhodne mnozstvi ceskeho spamu, ale komunikuji i se spoustou lidi, ktere treba vubec neznam - a presto pisi anglicky. navic spamu z asie, ktery rozhodne anglicky neni, je take az prilis.
2.8.2003 14:45 ctirad
Rozbalit Rozbalit vše Anglicky mail == spam
To je dost šílený způsob. Mnoho lidí třeba odebírá nějakou zahraniční konferenci. Spíš bych zahazoval všechny HTML maily, protože SPAM co chodí mě je z 99% v HTML.
3.8.2003 13:46 michal
Rozbalit Rozbalit vše Anglicky mail == spam
Coz je taky silenost, protoze kazdy "spravny" MUA (outlook, mozilla) defaultne vytvari HTML maily. A me teda chodi spamy tak pulka text/plaint a pulka text/html.
3.8.2003 17:31 ctirad
Rozbalit Rozbalit vše Anglicky mail == spam
Mě normální (= ne spam) mail v HTML nepřišel ani nepamatuju.
4.8.2003 02:14 Michal Kubeček
Rozbalit Rozbalit vše Anglicky mail == spam
Mail, který je pouze v HTML verzi a nemá text/plain variantu, je neslušný sám o sobě, bez ohledu na to, zda je to spam nebo ne.
5.8.2003 08:04 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše Anglicky mail == spam
to je sice fakt, ale vysvetluj to kamaradum, ktere na vysoke skole (!) uci, ze jedna z nejhezcich vlastnosti "emailu" (cti 'ms outlooku') je moznost nastavit si pro kazdou zpravu jako pozadi jiny obrazek...
3.8.2003 22:35 Ondrej Skutka | skóre: 1
Rozbalit Rozbalit vše Anglicky mail == spam
od toho jsou ty white-listy
5.8.2003 09:49 Marvin
Rozbalit Rozbalit vše Anglicky mail == spam
Poznam zopar ludi na americkych mailing listoch, ktori maju jednoduchu politiku - vsetky HTML maily zahadzuju, bez vynimky.
2.8.2003 13:47 bivoj
Rozbalit Rozbalit vše na spam je nejlepsi statistika
Odpovědět | Sbalit | Link | Blokovat | Admin
Vsem zajemcum o filtrovani spamu doporucuju vyborny clanek na ug http://ug.cz/752. Funguje to na zaklade pravdepodobnosti vyskytu slov, podrobnosti viz. clanek. Vyuzivam to jiz delsi dobu a ucinnost je vetsi nez 99.9%. Ma to nekolik zakladnich vyhod:
1. neni to zavisle na nejakem statickem listu slov ci domen, coz vetsinou neni moc ucinne.
2. neni to zadny moloch, implementace je snadna pro kazdeho. Systemy vyuzivajici napr. distribuovanou databazi open relay serveru ci podobnych megalomanskych systemu vetsinou s vanickou vylejou i dite.
3. nezvysuje to traffic smtp serveru (zadne potvrzovani ci podobne mechanismy)
4. s kazdym prichozim mailem se to uci, coz zarucuje opravdu nebyvalou uspesnost rozpoznani spamu.
5. rozpoznavaci databazi si tvorite sami na zaklade spamu, ktere dostavate vy, tzn. je to site primo na miru pro vasi postu.
6. rozpoznane spamy si muzete ulozit pro eventualni pozdejsi kontrolu. Uspesnost je ale opravdu tak velka, ze to neni skoro treba.
7. bude to fungovat se vsemi mailservery, ktere podporujou procmail.
8. co vic si prat? ;-)
2.8.2003 13:54 Robert Krátký | skóre: 94 | blog: Robertův bloček
Rozbalit Rozbalit vše na spam je nejlepsi statistika
o tomto druhu rozpoznavani spamu bude pojednavat druhy dil clanku.
3.8.2003 10:45 Tomas Krause
Rozbalit Rozbalit vše entity
Odpovědět | Sbalit | Link | Blokovat | Admin
... nefunguji. Prvni spam na takto kodovanou (a pouze pro tento ucela zalozenou adresu) prisel po 4 dnech :(
14.8.2003 20:37 Slavibor Mělnický
Rozbalit Rozbalit vše entity
První spam na pouze vytvořenou a NIKDY NEPOUŽITOU a NIKDE NEUVEDENOU adresu přišel za týden (tzv. nigerijský dopis). Ti spammeři snad odposlouchávají celý internet či co.
no nefunguje to protože aby to fungovalo nesmí tam být mailto: podle kterého robot adresu hledá , ale místo toho mailto: taky v unicode což vy padá takhle &#109;&#97;&#105;&#108;&#116;&#111;&#58; , pak to teprve funguje . Mirek
4.8.2003 14:55 Als
Rozbalit Rozbalit vše Bogofilter
Odpovědět | Sbalit | Link | Blokovat | Admin
Pouzivam bogofilter ktery jsem zpocatku naucil na ~400 spamech a na ~3000 zadanych emailu. Za dva a pul mesice provozu proniklo 17 mailu a zachyceno jich bylo 608. Proniknute maily byly vetsinou dve slova v subjectu a obrazek uvnitr. Chyba, tj. vyzadany email byl oznacen jako spam, nebyla zadna. Pocitam, ze po nauceni proslych spamu nebo snizeni urovne rozhodovani jiz nebudu vedet co spam je :)
4.8.2003 20:58 zlosyn | skóre: 24
Rozbalit Rozbalit vše Bogofilter

Bogofilter vychazi z Bayesianskeho filtru a proto je zminen az ve druhem dile tohoto povidani. Sice jen v odkazech, ale prece.

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