┌vod
Hledat
OvladaΦe
Hardware
Software
AbφΦko
O nßs

Nßvody - MessageWall - kladivo nejen na spam

MessageWall - kladivo nejen na spam

2. 1. 2003 07:00 | Jiri Svoboda

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

Datum: 2. 1. 2003 13:02
Od: pet
Titulek: Omezeni velikosti

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.

Datum: 3. 1. 2003 16:16
Od: CIJOML
Titulek: nejlepsi je spam assasin

nejlepsi je spam assasin ;) a kdo ho nepouziva, je trubka ;)


(c) AbcLinuxu s.r.o.   Grafika: megadesign