Antivirus a antispam

Správa linuxového serveru: Antivirus a antispam

Na většině linuxových poštovních serverů běží dva základní nástroje pro boj se spamem, a sice SpamAssassin v roli antispamu a ClamAV v roli antivirového řešení. V tomto díle se dozvíte, jak je nainstalovat a nastavit i na vašem poštovním serveru.

Mnohé předešlé díly se věnovaly řešením, které by měly pomoci omezit množství spamu, které váš server propustí. Za jedno z nejúčinnějších řešení je považován greylisting, ale není to jediná technika, která může pomoci.

Dosud probírané techniky mají však jeden společný faktor – omezují spam na základě způsobu odesílání, tzn. kdo e-mail poslal, jak se jeho SMTP server choval a jak byl nastaven. To úspěšně odfiltruje řadu automatizovaných nástrojů pro posílání spamu (a bohužel i některé špatně nastavené poštovní servery), ale spam pocházející z korektně pracujících poštovních serverů, které (zatím) nejsou na žádných blacklistech, uvedené metody nezadrží. Zde je třeba nasadit poslední obrannou linii, kontrolu obsahu.

Amavis, SpamAssassin, ClamAV

Kontrolu obsahu zajišťuje SpamAssassin, nejrozšířenější antispamové řešení (nejen) na linuxových serverech. Je napsaný v Perlu a pracuje tak, že na základě sady pravidel prověřuje průchozí poštu. V případě, že konkrétnímu pravidlu e-mail vyhoví, upraví se jeho celkové skóre o počet bodů, který náleží danému pravidlu. Kupříkladu, obsahuje-li tělo e-mailu slovo „viagra“, zvýší se skóre o 2,7 bodu. Některá pravidla mohou e-mailu skóre i snížit. Výsledné skóre se pak porovná s prahovou hodnotou (výchozí je 5,0 bodů) a v případě, že e-mail hodnotu dosáhne nebo překročí, je označen jako spam.

Skóre u jednotlivých pravidel nejsou navrhována náhodně, ale měla by při prahové hodnotě 5,0 bodů dosahovat jednoho falešného pozitiva (korektního e-mailu označeného jako spam) v dvou a půl tisících regulérních e-mailech (tzv. hamech).

Prahovou hodnotu i skóre jednotlivých pravidel si můžete upravit. Dokonce si můžete tvořit i vlastní pravidla. Podstatnou informací je i to, že sada pravidel SpamAssassinu se podobně jako v případě antivirových databází časem mění a aktualizuje. Pokud chcete, můžete pomocí cronu aktualizovat nejenom antivirovou databázi, ale i pravidla pro SpamAssassin. Více v návodu níže.

Pokud uživatelé vašeho serveru nepoužívají operační systém Microsoft Windows, v podstatě antivirus nepotřebujete. Máte-li však takové uživatele, je vhodné je chránit pomocí antivirového řešení, které bude hledat viry v poště a likvidovat je. Základním antivirovým nástrojem v GNU/Linuxu je ClamAV.

Je třeba zmínit, že testování obsahu e-mailů pomocí SpamAssassinu a ClamAV je náročné na výkon serveru (nejenom na CPU, ale i na paměť), což je i důvod, proč se správci poštovních serverů tolik věnují ostatním metodám obrany proti spamu. Čím více toho odfiltrují restrikce, greylisting apod., tím méně toho zbude na antispam, potažmo antivirus.

A k čemu že je Amavis? Amavis je spolehlivý nástroj, opět napsaný v Perlu, který stojí mezi vaším MTA a filtry obsahu v podobě SpamAssassinu a ClamAV.

Instalace

Instalaci všech tří nástrojů provedete jednoduše, přes správce balíčků, v případě Debianu takto:

aptitude install amavisd-new spamassassin clamav-daemon

Schopnosti detekce antivirů můžete posílit, pokud nainstalujete nástroje pro dekompresi souborů (díky tomu bude ClamAV schopen prověřovat i obsahy archívů). Pozor! Některé z těchto nástrojů nepatří mezi svobodný software, tudíž důrazně doporučuji projít jejich licenční ujednání před tím, než je nasadíte na server. Také budete v tomto případě potřebovat contrib a non-free repozitáře Debianu.

aptitude install arj bzip2 cabextract cpio file gzip lha nomarch pax unrar unzip zip

Nastavení ClamAV

Nejprve přidejte uživatele clamav do skupiny amavis, aby měl ClamAV přístup k souborům pro antivirový sken:

gpasswd -a clamav amavis

Následně ClamAV démona restartujte:

service clamav-daemon restart

Nastavení SpamAssassinu

Tím je nastavení ClamAV hotové. Zbývá nastavit SpamAssassin. Upravte soubor /etc/default/spamassassina nastavte proměnnou ENABLED na jedničku:

ENABLED=1

Chcete-li, aby se pravidla SpamAssassinu aktualizovala každý den pomocí cronu, ve stejném souboru nastavte proměnnou CRON také na jedničku:

CRON=1

Jak už bylo řečeno výše, činnost SpamAssassinu je náročná na procesor, tudíž nemusí být úplně od věci nastavit SpamAssassinu nízkou prioritu, aby se přednostně vyřizovaly aktuální požadavky ostatních démonů. Nejnižší priorita znamená nejvyšší „niceness“ hodnotu, tedy 19, standard je 0 a nejvyšší priorita (nejnižší „niceness“) je –20. Rozumně nízká priorita (15) je v konfiguračním souboru připravená, stačí ji pouze odkomentovat (popřípadě upravit):

NICE="--nicelevel 15"

Poté nastartujte SpamAssassin:

service spamassassin start

Nastavení Amavisu

Ve výchozím nastavení Amavis neprovádí ani antispamovou, ani antivirovou kontrolu. Je tedy třeba mu říci, aby je prováděl, a to v souboru /etc/amavis/conf.d/15-content_filter_mode, kde je třeba odkomentovat následující dva bloky:

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

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

Když se podíváte do /etc/amavis/conf.d, uvidíte jednotlivé soubory obsahující nastavení Amavisu. Projděte si minimálně soubor /etc/amavis/conf.d/20-debian_default, kde jsou výchozí nastavení od tvůrců Debianu. V případě Debianu Squeeze tato nastavení nejsou optimální a je třeba je upravit (viz dále). Tento soubor však neměňte, pouze příslušné proměnné nadefinujte dle svých požadavků v souboru /etc/amavis/conf.d/50-user, který je pro lokální úpravy určen.

Do tohoto souboru můžete umístit tyto hodnoty:

@local_domains_acl = ( ".$mydomain" );

$sa_tag_level_deflt  = -999;  
$sa_tag2_level_deflt = 5; 
$sa_kill_level_deflt = 12; 

$final_spam_destiny       = D_DISCARD;

První řádek definuje domény, pro které má Amavis filtrovat poštu – domény, které zde nebudou uvedeny, nebude Amavis filtrovat (pokud vám tedy Amavis nefiltruje poštu, prověřte, zda jsou zde uvedeny všechny vaše domény). Máte-li jich více, můžete je oddělit čárkou:

@local_domains_acl = ( ".$mydomain", "example.com", "example.org" );

Proměnná @sa_tag_level_deflt udává, od jakého skóre se do e-mailu budou přidávat hlavičky X-Spam-*. Hodnota –999 zafunguje pro všechny e-maily. Pro úvodní ladění a testování je to více než vhodné, jelikož se sem vypisují i hodnoty jednotlivých testů, což vám pomůže identifikovat, proč byl e-mail označen jako spam. Proměnná @sa_tag2_level_deflt udává, od jakého skóre má být daný e-mail označen jako spam. A konečně proměnná $sa_kill_level_deflt udává, od jaké úrovně se má se spamem provést akce definovaná ve $final_spam_destiny.

Výchozí nastavení Debianu Squeeze obsahuje v této proměnné D_BOUNCE, což je pro mne nepochopitelná hodnota – tato hodnota totiž způsobí, že se e-mail s vysokým skóre odmítne a vygeneruje se zpráva o nepřijetí, která se pošle odesílateli. Jak ale sami víte, odesílatel se dá snadno zfalšovat a u spamu bývá falšován téměř vždy. Pokud byste tuto hodnotu ponechali ve výchozím stavu, váš server by na spamy „odpovídal“, což by vyústilo v tzv. backscatter, tedy odesílání e-mailů o nepřijetí nevinným osobám. Doporučuji tedy nastavit buď na D_DISCARD (zahodit, popřípadě dle konfigurace poslat do karantény) nebo D_PASS(propustit).

Následně restartujte Amavis:

service amavis restart

Nastavení Postfixu

Nejprve vložte do /etc/postfix/main.cf řádku:

content_filter = smtp-amavis:[127.0.0.1]:10024

Nyní je třeba definovat příslušnou službu v souboru /etc/postfix/master.cf:

smtp-amavis unix    -       -       n       -       2     smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
    -o max_use=20

127.0.0.1:10025 inet n    -       n       -       -     smtpd
    -o content_filter=
    -o smtpd_delay_reject=no
    -o smtpd_client_restrictions=permit_mynetworks,reject
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o smtpd_data_restrictions=reject_unauth_pipelining
    -o smtpd_end_of_data_restrictions=
    -o smtpd_restriction_classes=
    -o mynetworks=127.0.0.0/8
    -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,no_milters
    -o local_header_rewrite_clients=

Amavis jako takový naslouchá na portu 10024. Postfix musí Amavisu předat poštu pro filtrování na tento port, ale zároveň je třeba, aby mu Amavis poštu předal po filtrování zpět, což se řeší výše uvedenou definicí služby na portu 10025. Na tomto portu pak Postfix bude od Amavisu přijímat výsledek filtrování.

Na závěr je třeba Postfixu oznámit změnu konfigurace:

service postfix reload

Otestování funkčnosti

Pro základní otestování postačí, když pošlete na server e-mail, do kterého umístíte heslo „viagra“ – to poměrně spolehlivě zvýší skóre na nenulovou hodnotu. Můžete také využít GTUBE řetězec, který ve výchozím nastavení přiřadí vašemu mailu skóre 999. Tento řetězec má tuto podobu:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Slovo závěrem

Amavis je komplexní nástroj, který toho umí poměrně hodně. Pokud jej na svůj server nasadíte, doporučuji vám projít si jeho dokumentaci (můžete začít u odkazů v závěru článku), zejména pak hodnoty v souboru /etc/amavis/conf.d/20-debian_defaults.