Portál AbcLinuxu, 18. říjen 2017 11:24

Stavíme poštovní server – 10 (spam + viry)

8. 1. 2010 | Lukáš Jelínek
Články - Stavíme poštovní server – 10 (spam + viry)  

Antispamová opatření prováděná pouze prostředky programu Postfix jsou buď nedostatečně účinná, anebo zbytečně přísná. Proto je obvykle lepší přenechat většinu práce při ochraně proti spamu (ale i jiném nevítanému obsahu, například virům) jiným nástrojům, které lze s Postfixem snadno spřáhnout.

Obsah

Jak nakládat se zprávami?

link

Minulý díl naznačil jeden zajímavý problém, který se při kontrole zpráv na různý problematický obsah vyskytl. Doba, kdy byla e-mailová zpráva pouhými několika řádky textu, je dávno pryč. Dnes se elektronickou poštou posílají i věci, ze kterých „otcům zakladatelům“ této technologie možná vstávají hrůzou vlasy na hlavě. Zkrátka podstatná část zpráv má nějakou přílohu, a to často i několik, případně i vnořených do sebe. Asi ještě častěji se zprávy posílají ve více alternativních podobách, typicky holý text a HTML.

Ale to není všechno. Přestože existuje jakýsi standard MIME (Multipurpose Internet Mail Extensions, víceúčelová rozšíření internetové pošty, definice je v RFC 2045, 2046 atd.) který se o tyto věci stará, jeho implementace jsou dost rozmanité, navíc se v praxi často vyskytuje také technologie TNEF (Transport Neutral Encapsulation Format) starající se o přílohy.

Proto je potřeba, aby programy, které se starají o analýzu zpráv, buď samy tyto technologie podporovaly, anebo byly doplněny dalším nástrojem, který formát zpracuje a předloží ke kontrole již zcela nezáludné datové objekty (soubory).

amavisd-new

link

Druhé řešení, tedy použití samostatného nástroje, má výhodu v tom, že pak lze skládat dohromady přesně ty komponenty, které se k danému účelu nejvíce hodí, aniž by podporovaly poměrně složité formáty zpráv. Lze například použít téměř libovolný antispamový a téměř libovolný antivirový program, bez nutnosti zjišťovat, zda si poradí s MIME nebo TNEF.

Speciální nástroj tedy vezme zprávu, rozebere ji na jednotlivé části, případně může ještě rozkládat i vnitřní soubory (pokud jde například o archivy), a výsledek předloží k potřebným kontrolám. Je několik možností, jak to udělat. Například může jít o běžícího démona, který dostává od poštovního serveru (Postfixu) jednotlivé zprávy a ty pak zpracovává. Jiné řešení může spočívat v přímém spouštění programu pro každou zprávu.

Jedním z takových specializovaných programů je amavisd-new. Je to vylepšená verze již nevyvíjeného démona Amavis. amavisd-new je napsán v Perlu, je relativně náročný na paměť, nicméně nabízí široké možnosti, co se týká jeho propojení s kontrolními programy. Bohatě využívá knihovny jazyka Perl a také různé systémové knihovny, proto je škála jeho schopností závislá primárně na tom, co je v systému nainstalováno – samotný program toho podporuje opravdu hodně.

Skutečně důkladná kontrola: Spamassassin

link

Pro kontrolu zpráv proti spamu je nyní třeba propojit nástroj pro rozebírání zpráv (tedy například amavisd-new) s programem, který zajistí vlastní kontrolu. Nástrojů existuje řada, s různou škálou funkcí a s různou kvalitou. Nicméně nepsaným standardem v této oblasti se stal program Spamassassin.

Spamassassin je součástí (podprojektem) velkého projektu Apache. Je to opět nástroj psaný v jazyce Perl. Obsahuje nepřebernou škálu všemožných testů, které lze (nikoli nutně, záleží na nastavení) pro kontrolu zpráv použít. Patří mezi ně bayesovský test, různé kontroly hlaviček (hlavičky typické pro spam, podezřelé kombinace hlaviček, nekorektní obsah…) i těla (charakteristické konstrukce, spamově typický HTML kód, podivné nakládání s obrázky apod.), prohledávání blacklistů a whitelistů místních i vzdálených, práce s národními specifiky atd.

Kromě vestavěných kontrol lze používat i kontroly připravené pro konkrétní server (administrátorské testy). Existují i sady pravidel, které jsou k dispozici ke stažení a používání. Všechny testy mají ale jedno společného – za splnění testu (zpráva odpovídá kritériím) Spamassassin přidělí určitý počet bodů, kladných, nebo záporných. Podle součtu bodů se pak se zprávou nakládá (viz minulý díl).

Využití bodování sice mírně otupuje některé kontroly a navíc znamená nutnost projít vždy všemi testy (výpočetní náročnost!), přináší ale jednu obrovskou výhodu: Je velmi malá pravděpodobnost (při správném nastavení skoro nulová), že bude zahozena legitimní zpráva. Nastavení prahů pro jednotlivé operace se zprávou je v rukou správce serveru, podobně i případná změna bodového ohodnocení jednotlivých testů.

Viry nejsou vítány

link

Viry a jiný malware (škodlivý software) se dnes šíří často právě elektronickou poštou. Proto je žádoucí nebezpečné zprávy na serveru zachytit a zlikvidovat. To lze zařídit propojením „rozebírače zpráv“ s antivirovým programem.

Díky rozebrání zprávy na jednotlivé soubory lze nasadit prakticky jakýkoli antivirový program. Ve světě svobodného softwaru je k dispozici výborný program ClamAV (relativně pomalý, ale jinak kvalitativně srovnatelný s často draze placenými proprietárními antiviry). Kdo ho nechce používat, případně má již k dispozici jiný program, může ho v podstatě bez problémů použít, protože amavisd-new je připraven pro spolupráci s většinou používaných antivirových programů.

Pozor u proprietárních antivirových programů – licence k užití může být vázána na počet schránek nebo jinak omezena. Přestože třeba není licenční omezení vynucováno technickými prostředky, nadlimitní užívání programu je nelegální. Je třeba tedy nějakým způsobem tuto věc ošetřit, aby nemohly nastat nějaké potíže právního charakteru.

Teď to všechno složit dohromady…

link

Z teoretického pohledu to vypadá hezky, ale teď jde o to, poskládat všechny části dohromady. Vznikne tedy celek složený z programů Postfix, amavisd-new, Spamassassin a ClamAV (na serveru bude samozřejmě i Dovecot, ale ten teď není zajímavý). Jednotlivé programy je nejlépe instalovat z balíčků (například v distribuci Debian jsou všechny uvedené programy k dispozici v hlavním repozitáři). Může se stát, že v balíčcích nejsou aktuální verze (to je problém hlavně u antiviru), potom je třeba zvážit, zda raději riskovat s neaktuální verzí nebo s ručně připravovaným balíčkem (instalace přímo ze zdrojových kódů je ta úplně poslední možnost, je obecně lepší raději vytvářet balíčky).

Následující odstavce vycházejí z verzí (programů amavisd-new, Spamassassin a ClamAV), které jsou aktuálně k dispozici ve standardních repozitářích distribuce Debian Lenny. Pokud máte jinou distribuci nebo chcete používat novější verzi, bude možná potřeba některé věci mírně poupravit.

Konfigurace programu Postfix

link

Popisovaná metoda propojení je založena na tom, že Postfix přijme každou zprávu (samozřejmě pokud ji neodmítne nebo nezahodí na základě nějakého pravidla v konfiguraci), tu předá programu amavisd-new, po kontrole ji zase převezme zpět a dále s ní nakládá, jako kdyby žádná kontrola nebyla.

Funguje to tak, že amavisd-new naslouchá na socketu, přes který mu Postfix předává zprávy, a získává návratový kód (podle kterého určí, zda má případně odeslat notifikaci o nedoručení). Na dalším socketu naslouchá Postfix (další instance služby smtpd) a přebírá si zkontrolované a případně označkované zprávy zpět. Pro komunikaci lze použít protokol SMTP nebo LMTP.

Pro použití protokolu SMTP se přidají do souboru master.cf následující řádky (předpokládá se zde, že amavisd-new poběží na portu 10024 a příjem zpět do Postfixu na portu 10025):

smtp-amavis          unix    –       –       n       –       5       smtp
    -o smtp_data_done_timeout=1200
    -o disable_dns_lookups=yes

127.0.0.1:10025      inet    n       –       –       –       –       smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
    -o smtpd_client_connection_count_limit=0
    -o smtpd_client_connection_rate_limit=0
    -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

V souboru přibyly dvě služby. První (smtp-amavis) slouží jako rozhraní pro komunikaci s programem amavisd-new. Běží na unixovém socketu a chová se do určité míry jako SMTP klient, tedy vyzvedne zprávu z fronty a pokusí se ji doručit. Nebude však doručovat nějakému konkrétnímu příjemci, nýbrž ji předá ke kontrole (jak se to zajistí, to se ukáže teprve za malý okamžik – zatím zde ani nikde nefiguruje zmíněné číslo portu 10024).

Jak je vidět z parametrů, lze spustit nanejvýš 5 instancí současně (tím lze limitovat, kolik zpráv se bude současně kontrolovat; vzhledem k poměrně vysokým nárokům amavisd-new i dalších kontrolních programů je dobré se držet raději „při zemi“, pokud nemá počítač dostatek zdrojů – jinak může jít výkon drasticky dolů). Časový limit na dokončení SMTP příkazu DATA je 1200 sekund (to je zcela dostatečné, šlo by nastavit i nižší limit) a jsou vypnuty DNS dotazy (nejsou potřeba).

Druhá služba je určena k přebírání zpráv zpět do Postfixu. Běží na portu 10025 a má řadu specifických parametrů, které mají přednost před parametry v konfiguračním souboru. Cílem je, aby se některé hodnoty nastavily jinak – například jsou zásadně pozměněna přístupová pravidla a hlavně musí být zakázán filtr obsahu (content_filter), o kterém bude hned vzápětí řeč.

V souboru main.cf jsou změny jen kosmetické. Nový bude pouze tento řádek:

content_filter = smtp-amavis:[127.0.0.1]:10024

Tady se vysvětlují obě výše zmíněné záležitosti. Jedná se přesně o onen parametr content_filter, který je třeba při zpětném přebírání předefinovat (pokud by tomu tak nebylo, vznikla by nekonečná smyčka). Také se tu objevuje zmíněný port 10024.

Funguje to tak, že když je do fronty vložena zpráva, při vyzvednutí je předána ke kontrole podle parametru content_filter. K tomu poslouží služba smtp-amavis spouštěná podle definice v souboru master.cf, která zprávu obdrží přes unixový socket (s názvem smtp-amavis) a předá ji programu amavisd-new přes internetový socket 10024. Při předávání zpět do programu Postfix zprávu obdrží speciální instance SMTP serveru, která je nakonfigurována podle definic v souboru master.cf. Pak už se samozřejmě další kontrola obsahu neprovádí (protože je zakázána) a zpráva se doručuje běžným způsobem, tedy buď lokálně (třeba do úložiště typu Maildir), nebo na vzdálený server.

Konfigurace programu amavisd-new

link

Program amavisd-new má velmi složitou konfiguraci, naštěstí v běžných případech není třeba se příliš nořit do jejích zákoutí a stačí se pohybovat jen po povrchu. Standardně to vypadá tak, že v adresáři /etc/amavis/conf.d existuje řada souborů, v nichž jsou různá konfigurační pravidla roztříděná podle určení. Zásadou je nesahat do existujících nastavení a veškeré modifikace dělat samostatně (kvůli lepší orientaci a také proto, aby šly přímo použít změny výchozího nastavení od autora a distributora). Pro tyto účely bývá k dispozici například soubor nazvaný 50-user; pokud žádný takový není, stačí ho vytvořit. Soubory se zpracovávají podle abecedy, čili nastavení učiněná v dříve zpracovávaném souboru lze předefinovat v souboru pozdějším.

Konfigurační soubor je ve skutečnosti úplně obyčejný zdrojový soubor jazyka Perl. Proto je potřeba zachovávat syntaxi tohoto jazyka. Na začátku každého souboru se uvádí use strict; – to proto, aby se použil nejpřísnější režim, který zakazuje nebezpečné jazykové konstrukty. Na konci souboru se uvádí 1; (samozřejmě jednička, nikoli malé „L“), čímž se zajistí návratová hodnota.

Co všechno je potřeba nastavit? Moc toho není. Takto může vypadat příklad nastavení:

use strict;

$mydomain = "moje.domena";
$myhostname = "postak.moje.domena";

$MAXLEVELS = 10;
$MAXFILES = 1000;
$MAX_EXPANSION_QUOTA = 50 * 1048576;

$banned_filename_re = new_RE(
  qr'\.[^./]*\.(exe|vbs|pif|scr|bat|cmd|com|cpl|dll)\.?$'i,
  qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)$'i,
  qr'^\.(exe-ms)$',
);

1;

Uvedený soubor má tři části. V první se nastavuje doména a název počítače (podobně jako v main.cf u Postfixu). Druhá říká, jakým způsobem se mají rozbalovat archivy (max. 10 rekurzí, max. 1000 souborů, max. využitý prostor 50 MB) – je to ochrana proti útokům extrémními archivy, které by jinak spotřebovaly obrovské množství zdrojů. Poslední část je výraz, kterým se definují zakázané přílohy zpráv. V tomto případě jsou zakázány nebezpečné soubory obsahující často e-mailové červy.

Ve výchozí konfiguraci programu amavisd-new bývá obvykle vypnuta antispamová a antivirová kontrola. Je to logické, protože není dopředu jasné, jaký program (zejména v případě virů, protože tam existují spousty použitelných programů) bude nasazen a hlavně zda vůbec. Spustíte-li tedy nyní Postfix a amavisd-new, bude už fungovat kontrola (zprávy se budou předávat, zpracovávat a kontrolovat), ale aktivní budou pouze základní kontroly (podle konfigurace), například ta výše definovaná, blokující zprávy se zakázanými soubory.

Konfigurace programu Spamassassin

link

Program Spamassassin má vlastní konfiguraci, přesto se při jeho použití přes amavisd-new provádí většina nastavení právě v konfiguraci amavisd-new. Má to své důvody – základní konfigurace pro Spamassassin je globální a použije se vždy, není-li předefinována. amavisd-new však právě některé hodnoty předefinovává a umožňuje tak ponechat výchozí nastavení Spamassassinu pro jiné účely. Není samozřejmě problém nakonfigurovat si jednotlivé parametry u Spamassassinu, často je to dokonce výhodné, pozor však na to, že nastavení jednotlivých parametrů u amavisd-new bude mít přednost.

Opět i zde platí, že mnoho věcí bývá ve výchozím stavu již vhodně nakonfigurováno, a proto do nich není třeba sahat. Něco ale může správce serveru chtít nastavit podle svého. Do konfigurace amavisd-new se tedy přidá například toto:

$sa_spam_subject_tag = "[SPAM] ";
$sa_tag_level_deflt = 3.0;
$sa_tag2_level_deflt = 5.0;
$sa_kill_level_deflt = 8.0;
$sa_dsn_cutoff_level = 11.0;
$sa_quarantine_cutoff_level = 20.0;

První řádek říká, jakým způsobem se označí předmět zprávy, pokud bude detekována jako spam. Na dalších řádcích jsou pak prahy pro určité akce. První je označení zprávy neviditelnými hlavičkami, dále označení zprávy úpravou předmětu (viz výše), nedoručení zprávy, neodeslání notifikace o stavu doručení a nakonec nevložení do karantény.

„Karanténa“ je zvláštní cíl, do kterého se doručují zprávy, které neprošly kontrolou, ať už z jakýchkoli důvodů (spam, viry, poškozené hlavičky apod.). Mohou tam být i zprávy, které jsou současně doručeny i standardní cestou (typicky to bývá případ poškozených hlaviček). Výchozí metodou je doručování do místního úložiště, obvykle typu Maildir, umístěného například na /var/lib/amavis/virusmails (buď přímo, nebo v podadresářích). amavisd-new však podporuje řadu dalších metod, například doručení protokoly SMTP či LMTP, předání nějakému spuštěnému programu nebo uložení do databáze. Pomocí nástroje amavisd-release lze zprávy z karantény vyzvedávat, nicméně to vyžaduje poněkud složitější konfiguraci. Zprávy z karantény lze zpracovávat i mnoha jinými metodami.

Toto ale nestačí, protože je Spamassassin zatím vypnutý. Aby se projevil, je potřeba ho zapnout v konfiguraci amavisd-new:

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Parametr definuje, kdy se se vynechává antispamová kontrola. Ve výchozím nastavení se vynechává vždy, kdežto výše uvedená definice omezí tyto případy na konkrétní situace určené třemi parametry (první je hešová mapa, druhý pole hodnot a třetí řetězec s výrazem). S využitím těchto parametrů lze případně antispamové kontrole zabránit (například pro příjemce, kteří si kontrolu nepřejí nebo pro určitý typ zpráv definovaný regulárním výrazem). Nyní už tedy bude antispamová kontrola fungovat naplno.

Pokud není třeba využívat uvedené tři parametry, lze některý z nich vynechat. Případně lze vynechat všechny tři a jako hodnotu pole bypass_spam_checks_maps nastavit [0].

Někdy je žádoucí přidat si vlastní pravidla pro Spamassassin nebo změnit bodovou váhu těch stávajících. Možností, jak to realizovat, je více. Tou základní a nejobecnější je využít konfiguraci programu Spamassassin a do jeho souboru (typicky /etc/spamassassin/local.cf) vložit takováto pravidla:

score FREE_PORN 3.5

header X_MYRULE_CASINO Subject =~ /casino/i
score X_MYRULE_CASINO 5

header X_MYRULE_ABCLINUXU From =~ /\babclinuxu.cz\b/i
score X_MYRULE_ABCLINUXU -2

První řádek je předefinice bodového ohodnocení pravidla FREE_PORN (zpráva obsahuje „free porn“), které má výchozí hodnotu 1 bod. Namísto jediné hodnoty lze uvést hodnoty čtyři, a to pro pouze lokální testy, lokální + síťové, lokální + bayesovské a lokální + síťové + bayesovské (použije se hodnota podle režimu, v němž Spamassasin poběží; výchozí je čtvrtá varianta).

Další dvě dvojice řádků přidávají nová pravidla. První pomocí výrazu hledá v předmětu zprávy slovo „casino“ – pokud ho najde, ocení to pěti body. Druhé naopak snižuje o dva body skóre u zpráv, které se tváří (nemusí opravdu být!), že jsou z domény abclinuxu.cz.

Používání vlastních pravidel a změn bodového hodnocení má význam hlavně v případech, kdy je potřeba přijímat poštu z nějakého mizerně nastaveného serveru nebo klientského programu (například starší verze Bugzilly generovaly nekorektní zprávy). Jednodušší obvykle bývá využít whitelist, ale někdy (například při nekonstantní cestě zpráv) se hodí i použití vlastních pravidel. Jiným případem jsou přívaly úporného spamu určitého typu, které nejsou dostatečně zvládány standardními pravidly ani se zapojením bayesovského filtru. Existují předem připravené sady pravidel, jejich nasazení je ale dobré si pořádně rozmyslet, každý server může být totiž zatěžován výrazně odlišnou škálou spamu.

Učení bayesovského filtru

link

Bayesovský filtr, aby fungoval skutečně kvalitně, je potřeba „naučit“ na legitimní zprávy a spam. Lze to dělat ručně, s výhodou lze však učení spouštět automaticky (z démona cron), například každou noc společně s jinými každodenními úlohami. Důležité je, odkud brát zprávy obou skupin.

Legitimní zprávy lze brát z běžných poštovních složek. Optimální z hlediska složení zpráv by bylo brát složky všech uživatelů, jenže těch může být na serveru velmi mnoho, navíc ne každý svědomitě odstraňuje nalezený spam. Proto to lze řešit tak, že se zvolí schránka vhodného uživatele (například přímo správce serveru, pokud používá schránku pro všeobecnou poštu) a učení se spouští na ní.

Podobný problém je se vzorky spamu. Lze použít opět uživatelské složky s nevyžádanou poštou (například složku Junk) a případně také adresář, do kterého se ukládají závadné zprávy (karanténa). Druhý případ je trochu problematický v tom, že tam mohou být i zcela korektní zprávy, navíc jednotlivé zprávy se obvykle ukládají do karantény komprimované atd.

sa-learn --no-sync --ham /var/mail/virtual/moje.domena/franta/cur
sa-learn --sync --spam /var/mail/virtual/moje.domena/franta/.Junk/cur

Výše uvedený příklad ukazuje jednoduché učení podle dvou složek uživatele. Pro legitimní poštu se bere složka doručené pošty (jen ty zprávy, které už zpracoval poštovní klient) uživatele franta, pro spam potom složka Junk stejného uživatele. Všimněte si parametrů příkazu: --no-sync zakazuje provedení synchronizace, --sync naopak synchronizaci vynucuje. Spamassassin totiž zaznamenává změny do žurnálu, což je poměrně rychlé, a teprve později je aplikuje přímo do databáze (to je pomalé). Proto je lepší, pokud se provádí více operací s databází, synchronizaci provést až nakonec. Výchozí hodnota (tedy zda se synchronizace provede) je nastavena v konfiguraci, uvedené příkazy zajistí požadované chování bez ohledu na aktuální nastavení.

Podrobné informace o učení bayesovského filtru najdete v manuálu sa-learn(1). Dozvíte se tam také, jak databázi zálohovat a obnovovat (dobré pro přesun na jiný server) nebo jaká paradigmata lze pro učení použít a co to přináší.

Konfigurace programu ClamAV

link

Ochrana proti spamu je již připravena, to však neplatí pro ochranu proti virům. I pokud je již nainstalován antivirový program (v tomto případě ClamAV), zatím se žádné kontroly neprovádějí. Něco je potřeba (nebo je to vhodné) nastavit přímo u programu, hlavně se ale musí kontrolování zapnout u programu amavisd-new.

ClamAV se skládá ze tří hlavních komponent – skenovacího démona (a související konzolové utility), aktualizačního démonakonzolového programu. Pro účely kontroly pošty jsou důležité první dvě komponenty (třetí jen v rámci záložního mechanismu, viz dále). Skenovací démon se konfiguruje souborem umístěným typicky v /etc/clamav/clamd.conf. Antivirový démon si toto nastavení při startu načte a pracuje podle něj.

Konfigurace bývá standardně připravena v distribučním balíčku, obvykle není potřeba nic moc měnit. Manuálová stránka clamd.conf(5) obsahuje informace o tom, co lze jak nastavit. Řada parametrů se vztahuje k běžným souborovým kontrolám, některé ale mají význam i pro poštu. Zvlášť se to týká volby MailFollowURLs, která na jednu stranu pomůže odhalit zákeřné odkazy vložené do zpráv, současně ale vystavuje server riziku DOS útoku (pokud bude ve zprávě odkazů velmi mnoho, server tím bude hodně zatížen a v závislosti na jeho výkonu a nastavení může z hlediska přenosu zpráv úplně zkolabovat).

Druhá komponenta, tedy aktualizační démon (stahuje a instaluje aktualizace virové databáze), se konfiguruje přes soubor /etc/clamav/freshclam.conf. Také tento soubor bývá plně připraven pro fungování aktualizací. Je však výhodné nastavit si správně zrcadlo pro stahování aktualizací:

DatabaseMirror db.cz.clamav.net
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net

Toto nastavení má zvláštní význam. Jednotlivá nastavení se zkoušejí shora dolů. První říká, že se mají použít česká zrcadla (aktuálně jde o pět serverů u různých provozovatelů). Pokud tato selžou, zkusí se druhé nastavení, které pomocí DNS serverů s GeoIP databází vrátí IP adresy nejbližších zrcadel. Poslední řádek je výchozí nastavení. Běžně vedou všechny tři hodnoty na stejnou sadu serverů, nicméně tvůrci programu ClamAV doporučují uvedené pořadí, už proto, že u prvního řádku není třeba provádět dotaz do databáze GeoIP.

Zapnutí antivirové kontroly

link

Pokud je ClamAV připraven a oba démony správně spouštěny (způsobem specifickým pro distribuci, obvykle pomocí skriptů v rámci runlevelu), zbývá už jen zapnout jeho používání v amavisd-new. Nejprve samotné zapnutí:

@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

Komu to připadá povědomé, má dobrou paměť, protože něco velmi podobného už tu bylo. Toto nastavení udává, za jakých podmínek se má antivirový test vynechat (podobně, jako se nastavovalo vynechání antispamové kontroly). Ve výchozím stavu se vynechává vždy, uvedená definice umožňuje použít opět stejné tři způsoby specifikace případů, kdy se kontrola vynechává (čili lze znovu jednu či více metod odstranit). Konfigurační nastavení se samozřejmě zapíše do příslušného souboru v /etc/amavis/conf.d, tedy například do 50-user.

Protože ale amavisd-new počítá se širokou škálou různých antivirových programů, potřebuje ještě vědět, jak konkrétně s programem ClamAV komunikovat. K tomu slouží další nastavení:

@av_scanners = (
 ['ClamAV-clamd',
   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
   qr/\bOK$/, qr/\bFOUND$/,
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ]
);
   
@av_scanners_backup = (
  ['ClamAV-clamscan', 'clamscan',
    "--stdout --disable-summary -r --tempdir=$TEMPBASE {}",
    [0], qr/:.*\sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ]
);

V uvedeném konfiguračním fragmentu se nastavují dva parametry (mající podobu pole, byť zde jen o jediném prvku; obecně jich mohou mít víc). První, av_scanners, je nastavení základního skeneru – ten se použije jako primární. Pole konkrétního skeneru obsahuje vždy identifikaci, program nebo komunikační metodu, parametry pro spuštění (resp. komunikační parametry), hodnotu pro „čistý“ soubor, hodnotu pro infikovaný soubor a hodnotu pro infikovaný soubor v archivu.

Pokud selže použití základního skeneru, uchýlí se amavisd-new k použití skeneru záložního, tedy podle av_scanners_backup. Syntaxe zápisu je stejná. V tomto případě je jako záložní skener použita konzolová verze skeneru ClamAV nazvaná clamscan. Tento záložní skener je výrazně pomalejší (řádově, protože musí pokaždé načíst celou virovou databázi), ale umožňuje provádět kontrolu i v případě, že jsou s démonem nějaké potíže.

Balíčky s programem amavisd-new obsahují předem připravenou konfiguraci pro mnoho antivirových programů. Jsou obvykle v jediném souboru, jako jedno velké pole, ovšem s tím, že jsou volby pro jednotlivé programy zakomentovány. Lze je buď odkomentovat a tak povolit (pokud by nebyl vhodný program již odkomentován jako výchozí, což ClamAV standardně bývá, proto není žádný další zásah potřeba), anebo si potřebnou část překopírovat do samostatného souboru (což je lepší, protože lze původní soubor hladce aktualizovat).

Pozor na to, aby měl amavisd-new právo komunikovat přes místní socket (například /var/run/clamav/clamd.ctl) s démonem clamd! I po instalaci jednotlivých programů z distribučních balíčků nemusí být práva nastavena správně (a třeba v distribuci Debian Lenny nejsou). Možností řešení je více, běžným je přidání uživatele, pod nímž běží clamd (např. uživatel clamav), do skupiny používané démonem amavisd-new (např. amavis).

Po provedení všech uvedených nastavení by měl být výsledkem plně funkční systém, který provádí antispamovou a antivirovou kontrolu procházejících zpráv. Vzhledem ke složitosti každé z komponent není bohužel možné se jim jednotlivě detailně věnovat, nicméně kdo by potřeboval řešit něco specifického, může zalistovat v manuálových stránkách, kde je většina důležitých informací obsažena.

Ještě ostřeji proti spamu

link

V následujícím dílu seriálu se prostor pro spammery ještě dále zmenší. Na scénu totiž vstoupí další metoda, vychvalovaná i proklínaná: greylisting. Ke slovu se dostane ještě jedna věc, a sice oddělení komunikace mezi servery vzájemně a mezi servery a klienty. Přestože totiž v praxi drtivě převažuje společné řešení na portu 25, architekti systémů elektronické pošty si to představovali trochu jinak – sice o něco složitěji, zato ale s různými výhodami.

Seriál Stavíme poštovní server (dílů: 17)

První díl: Stavíme poštovní server – 1 (Postfix), poslední díl: Stavíme poštovní server – 17 (optimalizace výkonu).
Předchozí díl: Stavíme poštovní server – 9 (antispam)
Následující díl: Stavíme poštovní server – 11 (greylisting, MSA)

Související články

SPAM – greylisting ve firmě
Mailserver s odvirováním pošty
DKIM – podepisujeme e-maily na serveru
Spam: naučte se bránit
MessageWall - kladivo nejen na spam
Jsme na dovolené - automatická odpověď

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

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

Diskuse k tomuto článku

8.1.2010 08:56 Lubos Kopecky | skóre: 32
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Odpovědět | Sbalit | Link | Blokovat | Admin
mozna jsem je prehlidnul, ale u ty sekce pravidel @av_scanners pro clamav bych jen doplnil, ze jsou jiz jako odkomentovane uvedeny v souboru 15-av_scanners, ze je neni nutne tedy kamkoliv psat.
8.1.2010 12:09 Martin22
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Odpovědět | Sbalit | Link | Blokovat | Admin
Jeste bych mozna zaradil do pristiho nebo nektereho dalsiho dilu FuzzyOCR http://fuzzyocr.own-hero.net/ , v dnesni dobe chodi spousta obrazkovych spamu, ktere nelze pres samotny Spamassassin prilis dobre rozpoznavat.
8.1.2010 12:40 Vladki
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Odpovědět | Sbalit | Link | Blokovat | Admin
Zajimalo by mne jestli u postfixu jde udelat antivirovou a antispamovou kontrolu i jinak nez cestou postfix->amavis->postfix->mailbox. Tato cesta ma totiz jednu zasadni nevyhodu. Pokud amavis rozhodne ze se jedna o vir nebo spam tak ma jen nasledujici moznosti:

1. tise zahodit 2. hodit do karanteny 3. oznackovat a pustit dal 4. zahodit a poslat nedorucenku 5. odmitnou pro smtp konverzaci mezi amavisem a postfixem

Problem s 5. variantou je ze postfix uz prijeti potvrdil, a tak musi poslat nedorucenku sam, tudiz je to podobne jako varianta 4. Vsechny tyto varianty jsou podle mne spatne. Varianta 4. a 5. otravuje casto nevinne lidi protoze je sfalsovana adresa odesilatele a my jen prispivame k sireni spamu. Varianty 1.-3. jsou vicemene rovnocenne, protoze karantenu nebo spambox uzivatele prohlizeji jen sporadicky, a pokud dojde k omylu tak o nem nevi ani odesilatel ani prijemce.

Podle mne nejlepsi zpusob je aby prijimajici smtp server (postfix) pockal na vysledek antivirove a antispamove kontroly a podle toho potvrdil nebo odmitl prijeti mailu. Pak je vyrozumeni o nedoruceni ukolem odesilajiciho smtp serveru a pokud slo opravdu o omyl, bude vyrozumen odesilatel. Pokud slo o spam tak je to jedno, hlavne ze to nas server neposila dal. S Eximem to jde pekne, ani nepotrebuju amavis. Exim si umi primo zavolat clamav a spamassassin a podle vysledku konat dal, ale jak to udelat na postfixu netusim.

Vi nekdo jak tohle nastaveni udelat na postfixu?
8.1.2010 14:05 core
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
melo by to jit pres smtpd_proxy_filter
8.1.2010 14:07 core
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
a demon clamsmtp pro clamav, jestli je neco podobneho i pro spamassassin nebo jak to zkombinovat nevim
8.1.2010 14:34 Vladki
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Aby clamsmtpd odmital inteligentne, muzi byt prvni v retezci prijmu mailu, a nevim jak je na tom s ostatnimi nastavenimi abych z nej nemel open relay ...
8.1.2010 14:37 Vladki
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
tak ne... clamsmtpd urcite ne... viz dokumentace.

Action This option controls what clamsmtpd(8) does when it finds a virus. The options are:

bounce Bounce the email. In most cases this is not a good idea since many viruses spoof sender addresses.

drop Silently drop the email. Recommended.

pass Pass on the email. Inserts an 'X-Virus-Infected' header.

[ Default: drop ]

Opet pouze ty tri nevhodne varianty. reject to neumi...
8.1.2010 14:32 Vladki
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Z popisu v dokumentaci mi pripada ze to dela to same co content_filter popsane v clanku:

The proxy receives all mail from the Postfix SMTP server, and is supposed to give the result to another Postfix SMTP server process.

Takze mame opet proces: postfix - amavis - postfix - mailbox.

A tomu se ja chci vyhnout.
10.7.2012 15:44 trekker.dk | skóre: 71
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Pro ty, kteří se ke článku dostanou přes Google...

Příslušná dokumentace k Postfixu je tady. Ve zkratce - přestože content_filter a smtpd_proxy_filter vypadá na první pohled stejně, je mezi nimi rozdíl s ohledem na to, jak Postfix v jednotlivých případech pracuje.

U content_filter se zpráva přijme do fronty Postfixu, Postfix klientovi potvrdí její přijetí a následně ji předá filtru. V případě, že filtr zprávu odmítne, je (měla by být) vygenerována zpráva o nedoručitelnosti

Varianta se smtpd_proxy_filter předává zprávu filtru předtím, než se uloží do fronty Postfixu (a tedy před tím, než se klientovi potvrdí její přijetí.) Pokud filtr zprávu odmítne, je klientovi toto odmítnutí sděleno ještě v rámci SMTP relace a není tedy potřeba generovat zprávy o nedoručitelnosti.)
Quando omni flunkus moritati
8.1.2010 16:47 iwik
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Ano, presne tak, cez smtpd_proxy_filter to ide. This feature is available in Postfix 2.1 and later. Odporucam.
Voty avatar 8.1.2010 16:13 Voty | skóre: 12 | blog: gemini
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Pokud chceš rozhodovat co s mailem už v SMTP time (tedy ještě než Postfix potvrdí přijetí) tak existuje tusím clamav milter, pomocí které to lze zařídit. Večer kouknu doma do cfg jak to mám dělané.
Jednu rozbil a tu druhou ztratil.
8.1.2010 21:49 pupu | skóre: 30
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Before-queue filter je IMHO dobra cesta k uvareni serveru, nesel bych do toho, alespon na vytizenejsich serverech. Kdyz uz jit touhle cestou, tak kvalitni reputacni databaze (www.senderbase.org, treba). U mensich instalaci nebyva problem s tim, ze by mel SA vetsi procento false positives, takze kombinace 1 (pri vysokem skore) a 3. Rozhodne ne 4.
12.1.2010 10:44 Vladki
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
U mensich instalaci taky nebude problem s before-queue filtrem. Samozrejme je potreba napred co nejvic odfiltrovat pomoci DNS blacklistu, ci jinych pravidel ktera lze snadno a rychle vyhodnotit. Tim se mnozstvi mailu, ktere se dostanou az k analyze spamassassinem a clamavem, brutalne snizi. Je samozrejme otazka kde je hranice mezi mensi instalaci a vytizenejsim serverem. tisice mailu denne? miliony? jeste vic?
12.1.2010 21:17 pupu | skóre: 30
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
To uz je na prislusnem architektovi. Moje osobni hranice by se pohybovala mezi radem deset a sto tisic; pochopitelne by zalezelo na konkretni architekture (HW i SW). To je ovsem ciste muj soukromy nazor.
8.1.2010 13:45 Sláva
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Odpovědět | Sbalit | Link | Blokovat | Admin
A co takhle mailscanner? Nad tím nikdo neuvažoval? Je syce asynchronní, ale asi tak desetkrát rychlejší než amavis a lze tam nastavit prakticky cokoliv.
9.10.2010 23:15 depka | skóre: 20 | blog: eterity
Rozbalit Rozbalit vše Re: Stavíme poštovní server – 10 (spam + viry)
Odpovědět | Sbalit | Link | Blokovat | Admin
smtp-amavis          unix    –       –       n       –       5       smtp
    -o smtp_data_done_timeout=1200
    -o disable_dns_lookups=yes
podle dokumentace a nektereho z prnich dilu serialu je v configu master.cf posledni sloupec nazev spustitelneho programu jez provadi sluzbu, v prikladu tedy smtp coz je soucast postfixu, jak podle tohoto nastaveni postfix pozna se ma spustit externi program amavis a ma mu predat zpravu?

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