Nßvody
-
MessageWall - kladivo nejen na spam
MessageWall - kladivo nejen na spam
Jak koneΦn∞ vy°e╣it problΘmy se spamem.
┌vod
Problematika nevy╛ßdan²ch mail∙, p°φpadn∞ rovnou obsahujφcφch n∞jak² typ
viru, neztrßcφ na aktußlnosti, spφ╣e naopak. Dnes bych vßs rßd seznßmil
s jednou z mo╛nostφ obrany. Jak poznßte dßle, nenφ to sice mo╛nost ideßlnφ
(takovß prost∞ neexistuje), leΦ z mnou prozkouman²ch m∞ zaujala nejvφce, a
sßm ji ji╛ n∞kolik m∞sφc∙ ·sp∞╣n∞ pou╛φvßm. Jde o projekt jmΘnem
MessageWall, kter² je krßtce
charakterizovateln² slovy 'SMTP proxy'.
Princip funkce
MessageWall se spustφ jako dΘmon, naslouchajφcφ na konkrΘtnφ sφ╗ovΘ
adrese (konfiguraΦnφ volba 'listen_ip'), a to na standardnφm SMTP portu 25.
SouΦasn∞ otev°e n∞kolik spojenφ s cφlov²m MTA (dßno konfiguraΦnφ volbou
'backend_ip'). Tento cφlov² MTA m∙╛e b∞╛et jak na libovolnΘm dal╣φm
dostupnΘm stroji (nap°φklad ji╛ v lokßlnφ sφti), tak p°φmo na stroji
s MessageWallem. StaΦφ ho jen nakonfigurovat, aby naslouchal na p°φslu╣nΘ
adrese a portu (v mΘm p°φpad∞ je to nap°. Postfix naslouchajφcφ pouze na
127.0.0.1:25). MessageWall sßm nenφ MTA a ned∞lß nic jinΘho, ne╛ ╛e ve╣kerß
spojenφ transparentn∞ (tΘm∞°) p°esm∞rovßvß na cφlov² (backend) MTA. Nßroky
na kladenΘ MTA nejsou nikterak velkΘ a vyhovφ jim prakticky ka╛d²
b∞╛n²/modernφ MTA (sendmail, postfix, qmail).
Jak jsem ji╛ zmφnil v zßvorce v²╣e, ona zmφn∞nß transparentnost nenφ
zdaleka stoprocentnφ, ale to je prßv∞ to, co se od programu oΦekßvß. Ka╛d²
p°ichßzejφcφ Φi prochßzejφcφ mail je kontrolovßn ╣iroce konfigurovatelnou
sadou pravidel. Pokud mail pravidl∙m z n∞jakΘho d∙vodu nevyhovφ, je
odmφtnut ji╛ na ·rovni SMTP spojenφ, v p°φpad∞ nevhodnΘ p°φlohy je mo╛nΘ
tuto odstranit. V ideßlnφm p°φpad∞ se tedy u nevy╛ßdanΘho mailu vlastn∞
nep°enese vφce, ne╛ ·vodnφ sekvence SMTP povel∙ a odpov∞dφ. ┌pln² seznam
dostupn²ch kontrol je k dispozici na domovskΘ strßnce projektu, pro ·Φely
tohoto Φlßnku vybφrßm nßsledujφcφ:
- antivirovß kontrola s pou╛itφm pattern soubor∙ z programu Open
AntiVirus
- kontrola proti internetov²m blacklist∙m
- kontrola MX/A zßznamu zdrojovΘ adresy
- kontrola zdrojovΘ a cφlovΘ adresy
- kontrola jmen soubor∙ MIME p°φloh
- kontrola MIME typu p°φloh, p°φpadn∞ jejich odstran∞nφ
Pro dopln∞nφ: mezi dal╣φ vlastnosti pat°φ nap°φklad podpora SMTP
autentizace a SSL/TLS spojenφ, a to jak ze strany klient∙, tak s cφlov²m
(backend) serverem.
Instalace
Kompilace a instalace v²jimeΦn∞ nenφ zcela trivißlnφ posloupnostφ
./configure; make; make install , tφm ale nechci °φci, ╛e je
slo╛itß. Jejφ podrobn² popis je k dispozici na domovskΘ strßnce projektu,
zde provedu jen lehk² nßstin, abyste v∞d∞li, co vßs Φekß.
Nejprve je t°eba zkompilovat a nainstalovat podp∙rnΘ knihovny
'firestring'a 'firedns'. Ob∞ jsou dostupnΘ rovn∞╛ na webu MessageWallu a v
jejich p°φpad∞ vystaΦφte s klasickou posloupnostφ ./configure; make;
make install . Standardn∞ se instalujφ do adresß°e
/usr/local/lib , tak╛e je vhodnΘ zkontrolovat p°φtomnost tohoto
adresß°e v /etc/ld.so.conf a potΘ spustit
ldconfig . Auto°i je╣t∞ doporuΦujφ instalaci 'daemontools'
(slou╛φ, jak nßzev napovφdß, pro usnadn∞nφ prßce s dΘmony - nepou╛il jsem)
a knihovny 'OpenSSL'.
Nynφ ji╛ k instalaci vlastnφho MessageWallu. ZaΦnete op∞t klasick²m
./configure; make; make install . PotΘ v╣ak musφte ud∞lat
n∞kolik manußlnφch krok∙. KonkrΘtn∞ to znamenß nakopφrovat profily
(p°edp°ipravenΘ seznamy filtrovacφch pravidel) do p°φslu╣nΘho adresß°e a
podobn∞ nakopφrovat soubor s virov²mi signaturami. V neposlednφ °ad∞ je
t°eba vytvo°it dva u╛ivatele a dv∞ skupiny a p°ipravit jim jejich domovskΘ
adresß°e (MessageWall neb∞╛φ pod rootem a b∞╛φ v chroot prost°edφ). Tφm je
instalace hotova.
Konfigurace
Hlavnφ konfiguraΦnφ soubor MessageWallu je standardn∞
/usr/local/etc/messagewall.conf . Tento je dob°e okomentovßn,
tak╛e by s nastavenφm nem∞l b²t vß╛n∞j╣φ problΘm. V mΘm p°φpad∞ jsem musel
tΘm∞° v╣echny konfiguraΦnφ polo╛ky odkomentovat, proto╛e se MessageWall
odmφtal spustit a tvß°il se, ╛e neznß default hodnoty. D∙le╛itΘ je
sprßvn∞ nastavit polo╛ky 'listen_ip' a 'domain', p°φpadn∞ 'backed_ip', u
zbytku se dß vesm∞s vystaΦit s default nastavenφm.
Ve v²╣e zmφn∞nΘm konfiguraΦnφm souboru je, mimo jinΘ, definovßn v²chozφ
profil (seznam filtrovacφch pravidel) a odkazy na dal╣φ konfiguraΦnφ
soubory, umφst∞nΘ v rootu chroot prost°edφ. KonkrΘtn∞ jsou to nap°φklad
soubor 'special_users', kde jsou definovßny adresy a profily u╛ivatel∙
s jin²m ne╛ v²chozφm profilem a nebo soubor 'relay_ips' se seznamem IP
adres, kterΘ majφ povolen relay.
Soubor profilu vypadß nap°φklad takto (profil Medium, kter² je po
instalaci jako defaultnφ):
reject_score=1
dnsbl=1,list.dsbl.org
dnsbl=1,bl.spamcop.net
rmx_required=1,1
filename_reject=1,.exe
filename_reject=1,.pif
filename_reject=1,.scr
filename_reject=1,.vbs
filename_reject=1,.bat
filename_reject=1,.com
filename_reject=1,.shs
filename_reject=1,.wsc
header_rejecti=1,Precedence:junk
header_rejecti=1,X-Mailer:Microsoft CDO
header_rejecti=1,X-Mailer:eGroups Message Poster
header_rejecti=1,X-Mailer:Delphi Mailing System
header_rejecti=1,X-Mailer:diffondi
header_rejecti=1,X-Mailer:RoryMAILER
header_rejecti=1,X-Mailer:GreenRider
header_rejecti=1,X-Mailer:GoldMine
header_rejecti=1,X-Mailer:MailPro
header_rejecti=1,X-Mailer:charset(89)
header_rejecti=1,X-Mailer:MailWorkZ
header_rejecti=1,X-Mailer:bulk
virus_scan=1,virus.patterns
Prvnφ °ßdek definuje celkovΘ maximßlnφ 'sk≤re', p°i jeho╛ dosa╛enφ bude
mail odmφtnut, dal╣φ °ßdky jsou pak ji╛ jednotlivß filtraΦnφ pravidla.
Prvnφ parametr ka╛dΘho pravidla (za rovnφtkem) je op∞t 'sk≤re', tentokrßt
to, o kterΘ se celkovΘ 'sk≤re' zv²╣φ p°i 'pozitivnφm nßlezu'. V konkrΘtnφm
p°φpad∞ to znamenß, ╛e bude odmφtnut ka╛d² mail, kter² neprojde by╗ jen
jedin²m pravidlem.
Spu╣t∞nφ
P°ed spu╣t∞nφm je nutnΘ si uv∞domit, ╛e musφte mφt voln² SMTP port 25 na
'listen_ip' adrese, aby se na n∞j MessageWall mohl 'bindnout'. Prakticky to
znamenß odsunout p°φpadn² b∞╛φcφ MTA na jinou adresu. Prvotnφ spu╣t∞nφ je
pak vhodnΘ ud∞lat prost²m zavolßnφm binßrky z p°φkazovΘ °ßdky, proto╛e se
z probφhajφcφho v²pisu okam╛it∞ dozvφte, co se d∞je, a tedy i p°φpadnΘ
problΘmy. Pokud se da°φ MessageWall spustit, staΦφ se ji╛ jen postarat o
jeho pravidelnΘ spou╣t∞nφ p°i startu serveru. Auto°i k tomu doporuΦujφ v²╣e
zmφn∞nΘ 'daemontools', jß si do sv²ch startovacφch script∙ prost∞
p°idal:
/usr/local/bin/messagewall 2>&1 | logger -p local0.notice &
(p°edtφm jsem ov╣em pat°iΦn∞ upravil /etc/syslog.conf a
doplnil konfiguraci rotace log∙).
Nev²hody
Jak jsem ji╛ zmφnil na zaΦßtku, ideßlnφ tento systΘm nenφ. B∞hem
n∞kolikam∞sφΦnφho provozu jsem narazil na pßr v∞cφ, na kterΘ bych rßd
p°φpadnΘ zßjemce o provoz upozornil.
Prvnφ nep°φjemnostφ je, ╛e MessageWall je ochoten p°ijmout jednotliv²
mail pouze pro jedinΘho p°φjemce. Pokud je mail adresovßn vφce p°φjemc∙m,
musφ se jeho p°enos pro ka╛dΘho z nich znovu opakovat. Prakticky to vypadß
takto:
220 domena.cz MessageWall 1.0.8 (You may not relay)
MAIL FROM:<nekdo@nekde.cz>
250 MessageWall: OK
RCPT TO:<prvni@domena.cz>
250 MessageWall: OK
RCPT TO:<druhy@domena.cz>
452 MessageWall: SMTP/TEMPORARY: One recipient per message from external
hosts, please
Nynφ zßle╛φ na odesφlajφcφm serveru, jak se zachovß. Naprostß v∞t╣ina
server∙ zareaguje sprßvn∞, dokonΦφ p°enos, a po chvφli vyvolß novΘ spojenφ
pro dal╣φho p°φjemce. Bohu╛el jsem v╣ak v logu na╣el i p°φpad serveru,
kter² okam╛it∞ po chyb∞ '452' spojenφ ukonΦil a vyvolal novΘ. Toto novΘ
spojenφ v╣ak ihned znovu se stejnou chybou skonΦilo a tento kolotoΦ se
neustßle opakoval mnoho hodin (nakonec jsem zmφn∞nΘmu serveru zatnul tipec
dφky iptables)...
Toto nep°φjemnΘ chovßnφ MessageWallu je jen zdßnliv∞ nelogickΘ. D∙vodem
je to, ╛e ka╛d² jednotliv² cφlov² adresßt m∙╛e mφt zcela jin² soubor
filtraΦnφch pravidel. Pro n∞kterΘ z nich m∙╛e b²t jeden konkrΘtnφ mail
'zßvadn²', pro jinΘ naopak. Proto╛e se v╣ak vyhodnocovßnφ d∞je ji╛ b∞hem
SMTP p°enosu a ne a╛ po jeho ukonΦenφ, zvolili auto°i programu toto °e╣enφ.
Logick²m d∙sledkem je prodlou╛enφ doby pot°ebnΘ k doruΦenφ jednotlivΘho
mailu v╣em adresßt∙m, a p°edev╣φm pak nav²╣enφ zßt∞╛e linky.
OblφbenΘ 'odeslßnφ p∞timegabajtovΘho filmeΦku v╣em lidem z adresß°e' pak
m∙╛e v p°φpad∞ vφce adresßt∙ ve va╣φ domΘn∞ dramaticky zv²╣it p°enß╣en²
objem dat. Je na ka╛dΘm z vßs odhadnout nebo vysledovat, kolik takov²ch
mail∙ chodφ a jak moc je pro nßs toto chovßnφ nep°φjemnΘ a podle toho
rozhodnout o (ne)nasazenφ MessageWallu.
Zatφmco na p°edchozφ nep°φjemnost jsem narazil ji╛ p°i poΦßteΦnφm
testovßnφ, na druhou jsem narazil a╛ b∞hem provozu. Jednß se o nastavenφ
omezenφ velikosti jednotlivΘho mailu. P°i prvotnφ konfiguraci jsem tuto
velikost nastavil na standard pou╛φvan² v na╣φ spoleΦnosti, toti╛ 4MB.
Pozd∞ji jsem si p°i prohlφ╛enφ MRTG grafu zßt∞╛e na╣φ linky v╣iml nßhle se
objeviv╣φch podivn∞ pravideln²ch 'pahork∙'. Po chvilce pßtrßnφ jsem vinφka
na╣el v MessageWallu, konkrΘtn∞ to vypadalo n∞jak takto:
220 domena.cz MessageWall 0.9.36 (You may not relay)
EHLO foo
250-MessageWall: Hello
250-PIPELINING
250-8BITMIME
250 SIZE 4194304
MAIL FROM:<nekdo@nekde.cz> SIZE=5000000
250 MessageWall: OK
RCPT TO:<nekdo@domena.cz>
250 MessageWall: OK
P°enos mailu se normßln∞ spustil a po p°enesenφ 4MB skonΦil s chybou. Po
asi ΦtvrthodinovΘ odmlce vzdßlen² server znovu navßzal spojenφ a situace
se opakovala. A to op∞t mnoho dlouh²ch hodin...
LogickΘ by bylo, ╛e pokud MessageWall v odpov∞di na EHLO specifikuje
maximßlnφ velikost (zde 250 SIZE 4194304 ), vzdßlen² server
by v p°φpad∞ del╣φho mailu v∙bec nem∞l pokraΦovat. Pokud u╛ pokraΦuje, m∞l
by ho MessageWall odmφtnout ihned potΘ, co nep°φpustnou velikost sßm
vyspecifikuje (zde MAIL FROM:<nekdo@nekde.cz>
SIZE=5000000 ). Bohu╛el toto se ned∞je a po d∙kladnΘm pßtrßnφ v RFC
jsem zjistil, ╛e se zmφn∞nou situacφ nenφ v∙bec poΦφtßno. Po dotazu u
autor∙ MessageWallu mi byly mΘ zßv∞ry potvrzeny, leΦ bez nßznaku °e╣enφ.
Situaci jsem doΦasn∞ vy°e╣il zv²╣enφm limitu velikosti mailu, v p°φpad∞
pot°eby si v╣ak v budoucnu hodlßm opravit zdrojov² k≤d k obrazu svΘmu.
Zßv∞r
Nemßm zßv∞ry rßd, a proto nech╗ si z v²╣e poskytnut²ch informacφ ud∞lß
ka╛d² sv∙j zßv∞r sßm. Jß osobn∞ v╣ak MessageWall (krom∞ °e╣enφ dvou v²╣e
zmφn∞n²ch nep°φjemnostφ) pou╛φvßm k tΘm∞° plnΘ spokojenosti...
Souvisejφcφ Φlßnky
Odkazy a zdroje
Diskuse k tomuto Φlßnku
Domnivam se, ze pri omezeni velikosti mailu na strane SMTP serveru a nastaveni velikosti v MessageWallu na hodnotu vetsi by melo vse fungovat spravne. Sice je to pro vsechny uzivatele stejna hodnota, ale aspon neco.
nejlepsi je spam assasin ;) a kdo ho nepouziva, je trubka ;)
|