Pokud nebude explicitně uvedeno jinak, poštovní brána využívá operační systém Linux a jako poštovní server je nainstalován Postfix. Pošta je přijímána pro domény firma.cz a firma.com.
Uvedené řešení bylo zprovozněno na linuxových distribucích Debian 3.0 a RedHat 6.2, popis se však týká Debianu.
Celkový pohled
Ochrana by mohla být rozdělena do čtyřech stupňů:
- aplikování záplat na programové vybavení (nejčastěji prohlížeče a poštovní klienti, občas operační systém)
- antivirová ochrana koncové stanice
- kontrola potenciálně nebezpečného kódu uvnitř zprávy spolu s filtrováním přípon a jmen souborů na poštovním serveru
- kontrola obsahu elektronické pošty proti vzorům ve virových databázích (na poštovním serveru)
Aplikování záplat na programové vybavení
Tady je základ toho, proč má šíření takovou úspěšnost – nejčastějším důvodem je automatické spuštění e-mailové přílohy způsobené nekorektní MIME hlavičkou pomocí ActiveX nebo VB komponenty. Jistě se najdou i další způsoby. Způsob obrany – sledovat informace o odhalených chybách a aplikovat dostupné záplaty (v případě MSIE6.0 nejlépe tu nejčerstvější).
Antivirová ochrana koncové stanice
Antivirovou kontrolu pro viry nejčastěji napadanou platformu MS Windows zajistí celá řada produktů – AVG, AVAST, Norton Antivirus,
Mcafee Antivirus, NOD apod.
Kontrola potenciálně nebezpečného kódu zprávy spolu s filtrováním přípon a jmen souborů
Lze zajistit např. pomocí procmail sanitizeru, anebo vlastními skripty. Některá řešení poštovních serverů v sobě zahrnují definování znakových vzorů (jména souborů, názvy přípon), které jsou blokovány nebo přejmenovávány.
Kontrola obsahu elektronické pošty proti vzorům ve virových databázích
Pokud je poštovní server vybaven vlastností spolupráce s externím programem pro kontrolu obsahu průchozí zprávy (Postfix, Sendmail-libmilter, Exim), lze v určitém bodě zpracování zprávy zavolat sadu externích programů, které provedou kontrolu a podle nějakého návratového příznaku je zpráva buď odmítnuta, anebo dále zpracována.
Instalace, konfigurace
Postfix
SMTP poštovní brána je počítač se dvěma síťovými rozhraními, z nichž jedno je připojeno do Internetu a druhé do lokální sítě. V lokální síti je druhý, řekněme cílový SMTP server s libovolným programovým vybavením. Na linuxové SMTP poštovní bráně běží Postfix, emailový „analyzátor“ AMaViS a jako antivirový program je používán linuxový McAfee Antivirus.
Nastavení Postfixu pro režim SMTP brány je ve třech souborech (základ byl převzán z FAQ Postfixu):
(kvůli šířce mohou býtřádky zalomeny, při kopírování se však zlomy objeví tam, kde mají)
- /etc/postfix/main.cf
- přijímá poštu pro domény firma.cz (hlavní firemní doména) a firma.com
myhostname = mail.firma.cz
mydomain = firma.cz
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, $mydomain, firma.com - naslouchá na všech rozhraních
inet_interfaces = all
- má zakázáno doručovat poštu na lokální stroj
local_transport = error:local
mail delivery is disabled on this machine - povoluje relaying pro lokalní a vniřní rozhraní
mynetworks = 127.0.0.0/8, 192.168.1.0/24
relay_domains = $mydestination
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination - definuje obsluhu filtru obsahu (musí být postfix-snaphot-20000529 a novější)
content_filter = vscan:
- definuje způsob předávání (směrování) pošty pro vybrané domény (zde firma.cz a firma.com)
transport_maps = hash:/etc/postfix/transport
- omezuje velikost průchozí zprávy (zde 10MB – je to výsledná velikost hlavičky, těla a příloh)
message_size_limit = 10240000
- přijímá poštu pro domény firma.cz (hlavní firemní doména) a firma.com
- /etc/postfix/master.cf
- Přidání dvou řádků na konec souboru:
vscan unix – n n – 10 pipe user=amavis argv=/usr/sbin/amavis ${sender} ${recipient}
localhost:10025 inet n – n – – smtpd -o content_filter=
- Přidání dvou řádků na konec souboru:
- /etc/postfix/transport
- firma.cz smtp:smtp.firma.cz
firma.com smtp:smtp.firma.cz
Poznámky:
- smtp.firma.cz musí být přeloženo přes DNS (např. ve vnitřní síti), anebo musí být záznam v souboru /var/spool/postfix/etc/hosts
- po vytvoření textového souboru transport je třeba vytvořit hashovaný transport.db z textového transport, a to pomocí postmap /etc/postfix/transport
- firma.cz smtp:smtp.firma.cz
Výše uvedené parametry nastaví Postfix do režimu, kdy je pošta na jednom rozhraní přijata, poté zkontrolována a nakonec odeslána dále přes druhé rozhraní k cíli.
Antivirový program
Nainstalujeme antivirový program, v našem případě řádkový McAfee Virus Scan pro Linux. Je dodáván v tgz formě, součástí je install skript. Standardně se nainstaluje do adresáře /usr/local/uvscan, kde jsou virové vzory, knihovny a samotný binární soubor, a vytvoří si linky v /usr/local/bin/ a /usr/local/lib/. Zde bych ještě upozornil (a je to i v manuálu k antivirovému programu), že pro běh je nutné mít nainstalovánu knihovnu libstdc++2.8.
Důvodem, proč jsem zvolil právě Virus Scan, byla dostupnost, jednoduchost instalace, podpora u řady antivirových řešení a docela rychlá reakce na nové viry (k aktualizaci dojde někdy i 5× denně).
Pokud by bylo nutné zrychlit přístup k virové databázi, je dobrou myšlenkou umístit tyto soubory na RAM disk.
AMaViS
A přichází na řadu AMaViS. Jedná se o e-mailový analyzátor, který zprávu rozdělí na jednotlivé části (hlavička, tělo, přílohy), za pomoci dekompresních programů získá skutečné podoby těla a příloh a spolupracující antivirový program provede kontrolu těchto dat. Pokud některá část obsahuje virus, antivir nastaví návratovou proměnnou a AMaViS vrátí do poštovního serveru vlastní zprávu s popisem akce. Na straně poštovního serveru musí být samozřejmě podpora pro kontrolu obsahu procházející zprávy (u Postfixu parametr content_filter). Pokud vás zajímají detaily, dovolil bych si vás odkázat na dokumentaci a zdrojové kódy.
Protože existují rpm
i deb balíčky, není nutné AMaViS kompilovat ze zdrojových souborů (pokud nepožadujete poslední verzi). Výkonná část AMaViSu je perlový skript, proto je nutné mít Perl nainstalován a k tomu ještě další podpůrné moduly (informace o nich je na stránkách s balíčky uvedena). Rád bych upozornil, že při instalaci z balíčků je pracovním adresářem u distribuce Debian /var/lib/amavis, u RedHatu /var/amavis. Při instalaci je vytvořen uživatel a skupina amavis, jsou vytvořeny příslušné adresáře (/var/lib/amavis a /var/lib/amavis/virusmails) a soubory (amavis a amavisd v /usr/sbin/, amavisd.conf v /etc, spuštěcí skript a příslušné linky na něho v jednotlivých rcX.d adresářích).
Vše proběhne jistě v pořádku a my upravíme konfigurační soubor /etc/amavisd.conf:
- adresář, kde leží Virus Scan:
# NAI AntiVirus (uvscan)
$uvscan = "";změníme na
$uvscan = „/usr/local/uvscan/uvscan“;
- rozhodneme se, zda využívat syslog, nebo záznamový soubor:
# yes – syslog, no – file logging
$DO_SYSLOG = „no“; - když ne syslog, tak kde záznamový soubor leží a jak se jmenuje:
# Directory to put log entries (if not using syslog)
$LOGDIR = „${prefix}/../var/lib/amavis“;
$LOGFILE = „amavis.log“; - kolik nám AMaViS řekne o své činnosti:
# 0: default – startup/exit/failure messages
# 1: args passed from client
# 2: virus scanner output
# 3: server client
# 4: decompose parts
$log_level = 0; - komu se pošle pošta, když se něco zachytí – má smysl nechat posílat sobě jako adminovi a ostatní o tom neinformovat, protože odesílatel je ve většině případů stejně falešný (pokud nepoužijete adresu z Return-Path) a příjemce bude mít jednak zbytečné obavy a jednak je taková zpráva v naprosté většině případu pro něho nepotřebná
# Notify admin/sender/recipient?
$warnadmin = „yes“;
$warnsender = „no“;
$warnrecip = „no“; - kde bude adresář se zachycenými exempláři:
# Location to put infected mail – empty for not quarantining
$QUARANTINEDIR = „/var/lib/amavis/virusmails“; - hlášení o průchodu zprávy filtrem, které se vloží do hlavičky pošty:
# Add X-Virus-Scanned line to mail?
$X_HEADER_TAG = „X-Virus-Scanned“;
# Leave empty to add no header
$X_HEADER_LINE = „by AMaViS snapshot-XXXXXXXX“; - cesty k dekompresním programům:
$arc = „/usr/bin/arc“;
$bunzip = „/usr/bin/bunzip2“;
$file = „/usr/bin/file“;
$lha = „/usr/bin/lha“;
$unarj = „/usr/bin/unarj“;
$uncompress = „/bin/uncompress“;
$unrar = „/usr/bin/unrar“;
$zoo = „/usr/bin/zoo“; - port a adresa, kde se AMaViS spojuje s Postfixem:
# postfix-specific
$smtp_port = „10025“;
$localhost_name = „localhost“;
$localhost_ip = „127.0.0.1“;
Je vhodné zvolit omezení, aby nedošlo k vyčerpání zdrojů při „porcování“ procházející zprávy a také informovat příslušné uživatele.
- kolik rekurzí při rozbalení/dekódování
# The next three are resource limitations – exit with EX_TEMPFAIL if exceeded
# Maximum recursion level for extraction/decoding
$MAXLEVELS = 20; - kolik archivů v archivu
# Maximum nesting level for compressing archive formats
$MAX_ARCHIVE_NESTING = 3; - maximum rozbalených souborů
# Maximum number of extracted files
$MAXFILES = 100; - od koho půjde zpráva o nalezení viru
# Who reports are sent from
$mailfrom = ‚postmaster‘; - komu poslat zprávu o nálezu viru
# Where to send virus reports
$mailto = ‚virusalert‘;
Ostatním proměnným ponecháme přednastavené hodnoty. Připomínám, že pošta na virusalert a postmaster by měla být doručitelná.
Aby byla zajištěna správná komunikace mezi AMaViSem a Postfixem, musí být:
- AMaViS spuštěn ještě před Postfixem (to lze snadno zajistit pomocí vhodných jmen linků spouštěcích skriptů)
- v pracovním adresáři (zde /var/lib/amavis) zajištěna správná přístupová práva (viz pozn.)
- nalezen alespoň jeden podporovaný antivirový program (viz amavisd.conf)
Pozn.: Stane-li se, že ani „čisté“ zprávy neprocházejí přes poštovní server, zcela jistě bude v souboru mail.log u záznamů od Postfixu status deferred od doručovatele vscan. Je to nejčastěji z důvodu nesprávných práv v komunikačním adresáři (zdá se to být nejčastější téma v amavis-user konferenci). Tento problém jsem naštěstí neměl, instaloval jsem systém z balíčků. Mohl by ale vzniknout při kompilování a instalaci ze zdrojových kódů. Uvádím proto informace k souborům a adresářům při funkční instalaci:
Adresář nebo soubor | Práva | Uživatel | Skupina |
/var/lib/amavis | drwxr-xr-x (40775) | amavis | root |
/var/lib/amavis/virusmails | drwxr-xr-x (40775) | amavis | root |
/var/lib/amavis/amavisd.sock | srwx------ (100600) | amavis | nogroup |
/usr/sbin/amavis | -rwxr-xr-x (100755) | root | root |
/usr/sbin/amavisd | -rwxr-xr-x (100755) | root | root |
Spuštění
Pokud máme vše nainstalováno, spustíme AMaViS a poté Postfix. V pracovním adresáři AMaViSu by měly vzniknout soubory amavisd.sock a amavis.log (pokud je v proměnné $DO_SYSLOG = „no“, jinak v syslogu). V logu bude záznam podobný tomuto:
Aug 13 16:00:56 mail amavisd[14916]: starting. amavisd snapshot-xxxxxxxx
Abychom ověřili funkčnost systému, sami sobě zkusíme poslat zazipovanou verzi neškodného testovacího viru
Eicar a prohlédneme si záznamy. Mělo by tam být zhruba toto:
Aug 13 16:03:10 mail amavisd[14918]: infected (EICAR test file), from=<xxx@freemailserver.xx>, to=<jmeno.prijmeni@firma.cz>, quarantine virus-20020813–160310–14918
Teď víme, že AMaViS je schopen zprávu rozdělit na části, zavolat unzip na příslušné přílohy, rozbalit je, zavolat antivirový program a zkontrolovat jednotlivé části. Na adresu virusalert@firma.cz je zaslána zpráva s informací o práci antiviru a s hlavičkou zavirované zprávy, odkud můžeme vysledovat původce. Celá zpráva je uložena v souboru /var/lib/amavis/virusmails/virus-20020813–160310–14918.
Aby byl systém funkční i do budoucna, musí být antivirový program pravidelně aktualizován. U Virus Scanu jsem aktualizaci zajistil pomocí perlového skriptu uvupdate, který je spouštěn přes cron každou hodinu a kontroluje aktuální databázi virů i verzi jádra antivirového programu. Pokud je nová verze databáze (nebo i jádra), stáhne ji pomocí wget a zajistí rozbalení, MD5 kontrolu a instalaci. Můžete si nastavit i zaslání zprávy o aktualizaci.
Závěr
Pokud probíhá vše tak, jak je výše popsáno, pak je systém funkční a vy máte zase o trochu více klidu. Osobně tento systém využívám více jak půl roku a díky jemu jsem přežil útoky virů Klez.H (ten hlavně vzhledem k jeho destrukční povaze) i Frethem.L beze ztráty kytičky. Pokud se zajímáte o výkon systému, tak jsem jej zatím neměřil a ani jsem nezkoušel jeho limity. Na počítači s CPU 1Ghz a 256MB RAM dokáže bez problémů zkontrolovat 250 zpráv (součet v obou směrech) za hodinu, ale myslím, že jeho možnosti jsou daleko větší, což se projevilo zejména v době, kdy byl aktivní e-mailový virus Frethem.L, kdy systém během půl hodiny zkontroloval přes 450 zpráv (zavirované i normální) a známky zátěže nejevil.
Přeji vám hodně štěstí úspěšný boj s viry.