Portál AbcLinuxu, 23. dubna 2024 20:40
Šéf mě požádal, abych zpracoval antispamové řešení pro naši firmu. Proč o to požádal právě mě, když na stole byl i návrh na zakoupení "černé antispamové krabice" od renomované firmy za 10 000 euro, která to vyřeší sama od sebe?
Nežli popíši počáteční stav naší firemní sítě, rád bych alespoň v kostce čtenáře AbcLinuxu.cz seznámil s tím, proč si myslím, že s problémem SPAMu musíme bojovat.
Proč tedy? Asi proto, že historie SMTP (tedy protokolu zodpovědného za přenos elektronické pošty), je stará přes 20 let, kdy nikdo ani nepomyslel, že by se e-mail mohl zneužít takovýmto způsobem. I otázky, proč to ti spammeři vlastně dělají, ztrácí smysl, když si uvědomíte, že poslat někomu e-mail je zdarma - pokud pošlu někomu neznámému mail s textem "Give me some money", pravděpodobně se zasměje a mail smaže. Pokud však tento mail zašlu pár milionům nic netušících lidí, vždycky se najde nějaký pitomec, který mi zaplatí. A pokud se najde, rád podobný mail zašlu lidem zas - vždyť je to přeci zdarma a zpáteční adresa se dá krásně zfalšovat, takže tisícovky rozzlobených lidí nemají, na kom si právem vylít svoji zlost.
A právě takovou zlost jsem měl i já, když jsem musel každý den mazat desítky nevyžádaných mailů. A tak jsem začal zkoumat, jak naši firemní síť "vylepšit", abych tento neustálý tok mailů zastavil.
Jak je vidět z obrázku, konfigurace firemní sítě byla v podstatě standardní - maily z Internetu procházejí firewallem do MTA (Mail Transfer Agent - v podstatě mašina, která mail vezme, rámcově zkontroluje a pošle dál) v zóně DMZ. Tento stroj funguje jako relay agent - maily s vnitřní e-mailovou adresou tak přeposílá na vnitřní mail server na intranetu. Odtud jsou pak přímo dostupné koncovým uživatelům.
Jako MTA zde funguje osvědčený Sendmail a v interní síti MS Exchange (já tlačil Scalix, ale bohužel to neprošlo). Žádný z těchto dvou strojů problém spamu neřešil a filtrování pošty tedy zůstalo na konečných uživatelích (Thunderbird s Bayesovským filtrem).
Problémy jsme tehdy měli v podstatě dva:
U problému s generováním bounce-mailů (hlášení o nedoručitelnosti) bych se rád pozastavil, protože si jej mnoho administrátorů MTA (a sítí podobných té naší) neuvědomuje. Představme si větší společnost s doménou @example.com, která má svůj firemní mailserver na lokální síti a maily do internetu posílá a přijímá přes proxy MTA server připojený v demilitarizované zóně - tedy něco jako naše síť na obrázku výše.
Na první pohled z hlediska bezpečnosti výborné řešení, protože vnější útočník se nikdy nemůže dostat přímo na firemní mailserver. Problém ale nastává právě s generováním mail bounces, protože proxy MTA v demilitarizované zóně bude pravděpodobně konfigurován jako RELAY pro celou doménu @example.com a o existenci uživatelských účtů na koncovém mailserveru nebude mít ani tušení.
Pokud tedy přijde spam pro neexistujícího uživatele jarda@example.com, relay MTA v demilitarizované zóně jej s radostí přijme a přepošle firemnímu mailserveru. Ten jej odmítne, protože žádný mailbox pro Jardu nemá, a relay MTA v DMZ tedy musí vygenerovat mail bounce.
V normálním případě by to bylo to v pořádku (mail bounce vygenerovaný proxy MTA by dostal odesílatel a zjistil, že Jarda neexistuje). Pokud by však byla adresa odesílatele podvržená (což je u SPAMu běžný jev), bounce je doručen někomu, kdo nic takového neposílal. V horším případě doručen být nemůže a mail bounce se nám hromadí ve frontě a zbytečně zatěžuje mailserver.
Neutěšenou situaci ve firmě jsem monitoroval již dlouho a zamýšlel jsem se tedy nad možnostmi řešení - které by pokud možno neobsahovalo žádnou "černou krabici" za spousty peněz. Nejsem sice zapřísáhlým odpůrcem komerčních řešení, ale nerad se dávám všanc něčemu, do čeho nikdo nevidí. Problém jsem rozdělil na dvě části:
Problém jsem vyřešil pomocí perl skriptu, který je v pravidelných intervalech spouštěn na vnitřním mailserveru a generuje seznam platných firemních emailových adres. Tento seznam je pak pomocí TFTP stáhnut na MTA proxy stroj v zóně DMZ. MTA má pak možnost přímo v otevřeném SMTP spojení ověřit existenci adresy příjemce. Pokud neexistuje, spojení je ukončeno s chybou 550 Recipient not found. Za vygenerování mail bounce je pak zodpovědný vnější odesílatel (ať už pravý, nebo ne).
Jiným řešením by bylo zkonfigurovat LDAP podporu v Sendmailu, který by si sám mohl existenci příjemce ověřit zasláním dotazu přímo na vnitřní LDAP server, ovšem to by znamenalo jisté bezpečnostní riziko, a proto jsem zvolil cestu pomocí tftp.
Jako administrátorovi mailového serveru mi bylo jasné, že neexistuje jediná jednoduchá metoda, jak spam potlačit, a proto se obvykle kombinuje metod více. Není proto ani cílem tohoto článku představit nějakou "zázračnou" novou metodu - spíše shrnout dostupné metody a doporučit nejúčinnější.
V zásadě můžeme antispamové metody rozdělit takto:
Uveďme alespoň nejvíce užívané a nejúčinnější (dle mého názoru) metody boje s nevyžádanou poštou. Zde se omezím na řešení integrovatelné do MTA, protože koncového uživatele obtěžují nejméně. Z těchto technik jsou mi nejvíce sympatické RCPT fáze, a to ty, které pracují v úvodních fázích dialogu SMTP:
Jak už jsem říkal, nejvíce sympatické jsou mi techniky, které pracují v úvodních fázích SMTP dialogu (dále RCPT fáze). V této fázi je již známa adresa odesílatele, příjemce a stroj, od kterého zpráva přichází, ale ne tělo zprávy. Proč mi tedy přijde zajímavá?
Jaké jsou nevýhody technik v RCPT fázi:
Naše firemní MTA je realizována na Linuxu a Sendmailu, proto jsem se rozhodl o nasazení greylistingu prostřednictvím skvělého démona milter-greylist, který běží na mail proxy stroji v DMZ a je tak nejblíže zdrojům SPAMu - a může tam fungovat nejefektivněji (pokud mluvíme o realtime technikách detekce spamu, tak ty je možno aplikovat pouze na tomto stroji - na vnitřním mailserveru to už nemá smysl). Jak název připomíná, základ tohoto démona je v implementaci greylistingu, který je v mém případě prominut odesílatelům s pravým SPF podpisem nebo, těm kteří alespoň disponují podporou TLS [wikipedia, IETF.org].
Účinnost mého řešení přesahuje 90 % - a to v podstatě "zadarmo", protože nároky na CPU jsou nízké a dále není třeba nic updatovat a ani se o něco starat. Ano, nějaký spam i tak sem tam proleze, ale pořád je zde ještě možnost nasazení zmiňovaného SpamAssassinu (na který je možno démona milter-greylist také připojit), který by účinnost dále dramaticky zvýšil. Zároveň se rýsuje možnost nasazení dalších slibných technik jako P0f, DKIM a DNSRBL. Stabilita tohoto softwaru je rovněž příkladná, takže určitě mohu doporučit.
Přikládám prezentaci (ODP), kterou jsem vytvořil v rámci propagace greylistingu pro naši firmu.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.