Hlavní navigace

Stavíme mailový server: Razor, DCC, Spamassassin a Amavis

19. 11. 2003
Doba čtení: 9 minut

Sdílet

V minulých dílech jsme společně nainstalovali a nakonfigurovali základní systém a mailový program Postfix. Dneska nainstalujeme perlové moduly, online spamové databáze Razor a DCC, Spamassassin a nainstalujeme a nakonfigurujeme Amavis.

Instalace perlových modulů

Spamassassin a Amavisd jsou programy napsané v perlu. Ke svému běhu potřebují mnoho modulů, které nejsou defaultně v systému nainstalovány. Proto je nyní musíme nainstalovat.

Instalaci provedeme interaktivně ze sítě perlových archivů CPAN. Spustíme příkaz

# perl -MCPAN -e shell

Když příkaz spustíme poprvé, budeme dotázáni na spoustu dotazů. Odpovíme následovně (kde není za hranatými závorkami nic uvedeno, jen zmáčkněte enter, čímž zvolíte odpověď nabízenou v hranatých závorkách):

Are you ready for manual configuration? [yes]
CPAN build and cache directory? [/root/.cpan]
Cache size for build directory (in MB)? [10]
Perform cache scanning (atstart or never)? [atstart]
Cache metadata (yes/no)? [yes]
Your terminal expects ISO-8859-1 (yes/no)? [yes]
Policy on building prerequisites (follow, ask or ignore)? [ask]
Where is your gzip program? [/usr/bin/gzip]
Where is your tar program? [/bin/tar]
Where is your unzip program? [] /usr/local/bin/unzip
Where is your make program? [/usr/bin/make]
Where is your lynx program? [/usr/bin/lynx]
Where is your wget program? [] /usr/local/bin/wget
Where is your ncftpget program? [] /usr/local/bin/ncftpget
Where is your ftp program? [/usr/bin/ftp]
What is your favorite pager program? [/usr/bin/less]
What is your favorite shell? [/bin/sh]

Parameters for the 'perl Makefile.PL' command?
Your choice: []
Parameters for the 'make' command?
Your choice: []
Parameters for the 'make install' command?
Your choice: []
Timeout for inactivity during Makefile.PL? [0]
Your ftp_proxy?
Your http_proxy?
Your no_proxy?

Select your continent (or several nearby continents) [] 4
Select your country (or several nearby countries) [] 6
Select as many URLs as you like,
put them on one line, separated by blanks [] 1 2
Enter another URL or RETURN to quit: []
Your favorite WAIT server?
[wait://ls6-www.informatik.uni-dortmund.de:1404]

Nyní se objeví příkazový řádek CPAN shellu:

cpan>

Příkazem install nainstalujeme následující perlové moduly. Pokud již nějaký modul je nainstalován, budeme na to upozorněni a můžeme pokračovat modulem dalším. Během instalace budeme občas něco muset potvrdit, občas budeme tázáni, jestli chceme do fronty instalovaných modulů také připojit nějaký modul, na kterém ten zrovna instalovaný závisí – odpovíme ano. Více informací o CPAN a perlu najdete na www.cpan.org.

  • MD5
  • LWP
  • Mail::Internet
  • Archive::Tar
  • Archive::Zip
  • IO::Wrap
  • IO::Stringy
  • Unix::Syslog
  • MIME::Words
  • MIME::Head
  • MIME::Body
  • MIME::Entity
  • MIME::Parser
  • Net::SMTP
  • Net::DNS (pokud budeme dotázáni na povolení testů, odpovíme ne)
  • Net::Ping
  • Net::Server
  • Net::Server::Pre­ForkSimple
  • Convert::TNEF
  • Convert::UUlib
  • MIME::Decoder::Ba­se64
  • MIME::Decoder::Bi­nary
  • MIME::Decoder::Gzip64
  • MIME::Decoder::NBit
  • MIME::Decoder::Qu­otedPrint
  • MIME::Decoder::UU
  • Time::HiRes
  • Digest::SHA1
  • Digest::Nilsimsa
  • Getopt::Long
  • File::Copy
  • Bit::Vector
  • Date::Calc
  • Mail::SpamAssas­sin

Během instalace posledního balíku budeme tázáni, zda-li si přejeme spustit Razor2 a DCC testy, odpovíme ne.

SpamAssassin

Tím jsme hotovi s instalací perlových modulů. Na příkazovou řádku CPAN shellu můžeme napsat q a odenterovat, čímž shell ukončíme.

Spamassassin jsme již do systému nainstalovali jako perlový modul. Stačí ho jen nakonfigurovat. Vytvoříme soubor /etc/mail/spa­massassin/local­.cf a opíšeme do něj následující nastavení z tohoto vzorového konfiguráku. Komentáře v souboru popisují, co která proměnná mění. Některé hodnoty (například doménu) musíte vyplnit.

Toť ke Spamassassinu vše. Ještě vytvoříme chrootový adresář, ve kterém poběží Amavis a Clamav:

mkdir -p /var/amavisd
chown _amavisd:_amavisd /var/amavisd
chmod 750 /var/amavisd
cd /var/amavisd
mkdir .spamassassin
touch .spamassassin/user_prefs
chown -R _amavisd:_amavisd .spamassassin

Razor a DCC

Nyní nainstalujeme klienty online spamových databází Razor a DCC. Stáhneme zdrojáky, zkompilujeme a nainstalujeme:

# cd /root
# ftp http://unc.dl.sourceforge.net/sourceforge/razor/razor-agents-2.22.tar.gz
# tar -zxvf razor-agents-2.22.tar.gz
# cd razor-agents-2.22
# perl Makefile.PL
# make
# make test
# make install

Pozor, poslední příkaz nainstaluje pomocné programy Razoru do /usr/bin.

Vytvoříme defaultní konfigurační soubory v /root/.razor:

# razor-client
# razor-admin -create

A zaregistrujeme se v síti Razor. Za parametr -user zadejte adresu vašeho postmastera:

# razor-admin -register -user postmaster@domain.org

Tím se vytvoří v adresáři /root/.razor konfigurační soubory. Pokud se registrace nepodaří, zkontrolujte, zda máte na firewallu povolený port TCP 2703 směrem ven.

Konfigurační soubory musíme zkopírovat do chrootu, kde poběží Amavis:

# cp -r /root/.razor /var/amavisd
# chown -R _amavisd:_amavisd /var/amavisd/.razor

Aby Razor správně fungoval, když je volán SpamAssassinem, musíme aplikovat patch. Pokud ho neaplikujeme, Razor se bude tvářit, že funguje, ale neoznačí žádnou zprávu. Patch aplikujeme následovně:

# cd /usr/local/libdata/perl5/site_perl/i386-openbsd/Razor2/Client
# ftp http://www.ijs.si/software/amavisd/Razor2.patch
# ftp http://www.ijs.si/software/amavisd/Razor2.patch2
# patch < Razor2.patch
# patch < Razor2.patch2

Razor máme nainstalovaný, nyní začneme instalovat DCC. Stáhneme a rozbalíme zdrojáky DCC:

# cd /root
# ftp http://www.dcc-servers.net/dcc/source/dcc-dccd.tar.Z
# tar -zxvf dcc-dccd.tar.Z

Vlezeme do rozbaleného adresáře, který se jmenuje podle aktuální verze DCC (V době psaní článku byla aktuální verze 1.2.7), zkompilujeme a nainstalujeme. Po spuštění configure scriptu se nenechte znepokojit hláškami, že skript nenalezl includy k Sendmailu a že bez nich DCC nezkompilujete – není to pravda.

# cd dcc-dccd-1.2.7
# ./configure
# make
# make install

Po instalaci ozkoušíme, zda DCC funguje. Nezapomeňte se přesvědčit, že máte na firewallu povolený port 6277 UDP (obousměrně). Spusťte příkaz:

# /usr/local/bin/cdcc 'info'

Na obrazovce by se měla objevit odezva ve formě hromady řádků podobných těmto:

dcc1.dcc-servers.net,- RTT+0 ms anon
# 38.144.80.234- Servercave ID 1183
# 100% of 1 requests ok 798.28+0 ms RTT 300 ms queue wait
# 137.118.60.88- neonova ID 1127
# 100% of 1 requests ok 833.33+0 ms RTT 334 ms queue wait
# 194.85.132.210- SPAMCHECK.NET ID 1168
# 33% of 3 requests ok 1964.45+0 ms RTT 196 ms queue wait
# * 194.109.153.82- NIET ID 1080
# 100% of 1 requests ok 551.31+0 ms RTT 112 ms queue wait

Protože DCC bude spouštěno z chrootovaného Amavisu, je nutné v chrootu /var/amavisd vytvořit adresářovou strukturu a binární soubory nakopírovat na příslušné místo do ní. Do chrootu také musíme přidat shell, který vyžaduje SpamAssassin pro správné pouštění DCC. Shell v chrootu není příliš bezpečný, ale je tam nutný.

# mkdir -p /var/amavisd/var /var/amavisd/usr/bin /var/amavisd/usr/libexec
# mkdir -p /var/amavisd/var/dcc /var/amavisd/usr/lib /var/amavisd/bin
# cp -r /var/dcc /var/amavisd/var/
# cp /usr/local/bin/dccproc /var/amavisd/usr/bin
# cp /usr/libexec/ld.so /var/amavisd/usr/libexec
# chown -R _amavisd:_amavisd /var/amavisd/var/dcc
# cp /bin/sh /var/amavisd/bin/

Nakonec do chrootu ještě přidáme knihovny, které DCC používá. Příkazem ldd zjistíme, které knihovny DCC používá, a nakopírujeme je do chrootu do příslušného adresáře. Čísla verzí knihoven se mohou lišit, zde je příklad pro můj systém:

# ldd /usr/local/bin/dccproc
/usr/local/bin/dccproc:
        Start    End      Type Ref Name
        00000000 00000000 exe   1  /usr/local/bin/dccproc
        027e4000 227eb000 rlib  1  /usr/lib/libm.so.1.0
        04949000 24982000 rlib  1  /usr/lib/libc.so.30.1
        0b8af000 0b8af000 rtld  1  /usr/libexec/ld.so
# cp /usr/lib/libm.so.1.0 /var/amavisd/usr/lib/libm.so.1.0
# cp /usr/lib/libc.so.30.1 /var/amavisd/usr/lib/libc.so.30.1
# cp /usr/libexec/ld.so /var/amavisd/usr/libexec/ld.so

Instalace a konfigurace Amavisu

Instalace Amavisu je jednoduchá, protože celý Amavis je napsán v perlu a perl včetně všech modulů jsme si již připravili. Perl na druhou stranu přináší nevýhody ve formě nestability, snížené rychlosti a zbytečné zátěže procesoru.

Když se kouknete třeba na Freshmeat, najdete tři různé Amavisy, ale pokaždé se jedná o jiný software. My budeme instalovat Amavisd-new. Když budete stahovat Amavis, stáhněte poslední verzi, v době psaní článku byla aktuální verze amavisd-new-20030616-p5, přestože se jedná například o patch verzi. Amavis se stále vyvíjí, a proto poslední verze obsahuje nejnovější bugfixy. Stabilní verze Amavisu de-facto neexistuje.

Krom nakopírování příslušných perlových souborů ještě musíme nastavit přístupová práva a vytvořit potřebné adresáře. Těmito příkazy Amavis nainstalujete:

# cd /root
# ftp http://www.ijs.si/software/amavisd/amavisd-new-20030616-p5.tar.gz
# tar -zxvf amavisd-new-20030616-p5.tar.gz
# cd amavisd-new-20030616
# cp amavisd /usr/local/sbin/
# chown root:wheel /usr/local/sbin/amavisd
# chmod 550 /usr/local/sbin/amavisd
# cp amavisd.conf /etc/
# chown root:wheel /etc/amavisd.conf
# chmod 644 /etc/amavisd.conf
# touch /var/amavisd/amavis.log
# chown _amavisd:_amavisd /var/amavisd/amavis.log

# mkdir /var/amavisd/tmp
# chown _amavisd:_amavisd /var/amavisd/tmp
# chmod 750 /var/amavisd/tmp
# mkdir /var/amavisd/quarantine
# chown _amavisd:_amavisd /var/amavisd/quarantine
# chmod 750 /var/amavisd/quarantine

Teď přijde poněkud náročnější část – konfigurace Amavisu. Konfigurační soubor je podobný konfiguráku od Postfixu, opět se konfigurace provádí nastavováním spousty proměnných a opět konfigurační soubor obsahuje vysvětlující komentáře.

Otevřete si v editoru konfigurační soubor /etc/amavisd.conf a nastavte v něm konfigurační proměnné na uvedené hodnoty – zde je okomentovaný vzorový konfigurák (je zde uveden jen jako odkaz, protože by se z důvodů formátování do článku nevešel). Ve vzorovém konfiguráku jsem nepopisoval všechy proměnné, ale jen ty důležité. Význam ostatních proměnných je dostatečně vysvětlen v komentářích v originálním konfiguračním souboru. Proměnné jsou popisovány v pořadí, jak se objevují v konfiguráku.

Maximální počet serverů max_servers a maximální počet požadavkůmax_re­quests můžete dle potřeby změnit, mně uvedené hodnoty fungují dobře.

Logování je zapnuto pouze, než Amavis spustíme a ozkoušíme, že spolehlivě chodí. Pro lepší ladění je nastavena nejvyšší úroveň log_level 5. Než spustíme server „na ostro“, nastavíme úroveň na 0.

Maily se zakázaným obsahem (banned) jsou například spustitelné přílohy a další nežádoucí maily. Proměnná banned_filena­me_re popisuje, které maily budou považovány za zakázané. V originálním konfiguráku Amavisu je několik různých příkladů, podle čeho zakázaný mail určit. V mém vzorovém konfiguráku se rozhoduje podle přípon souborů (všechny spustitelné: exe, pif, vbs, …).

Propouštění a zahazování podezřelých mailů: Vzorová konfigurace, kterou jsem uvedl, propouští spamy a maily s poškozenou hlavičkou. Spamy jsou označeny a každý uživatel si je může individuálně odfiltrovat např. procmailem. Je to lepší než spamy hromadně zahazovat, neboť antispam může omylem označit za spam nějaký pro uživatele důležitý mail, který je jenom „blbě napsaný“. Maily s vadnou hlavičkou nesplňující RFC nejsou zahazovány, neboť mnoho mailových programů (zejména od nejmenovaného Microsoftu) prostě hlavičku podle RFC napsat neumí.

Viry a maily se zakázaným obsahem (spustitelné přílohy atd.) nejsou doručovány, ale po jejich přijetí mailserver odešle jak původci mailu, tak adresátovi upozornění, že takovýto „podezřelý“ mail přišel. Zavirované maily si navíc adresát může vyzvednout v karanténě (adresář, kde se zavirované maily archivují) na serveru. Hláška, která přijde původci/adresátovi mailu, se nastavuje pomocí proměnných notify_virus_sen­der_templ, notify_spam_sen­der_templ (a další např. pro spamy, …). Tyto soubory vytvoříme později.

Komu má přijít varovná hláška, to se nastavuje pomocí proměnných warnvirussender, warnvirusrecip atd. Jestliže má chodit postmasterovi notifikace o každém příchozím viru, nastavte postmasterovu adresu do proměnné virus_admin.

Proměnná warn_offsite musí být nastavena na 1, jestliže chceme varovat příjemce mailů, které nejsou lokální na serveru. Pokud máte jako já ještě druhý server, odkud si uživatelé čtou maily přes IMAP, a nenastavíte tuto proměnnou, začnete se divit, že vám varování o virech a spamech nechodí.

root_podpora

Proměnná warnbadhsender nastavuje, zda se má odesilatelům mailů, které nesplňují RFC a mají v hlavičce v adrese neenkapsulované non-ASCII (např. české) znaky, posílat varování. Když jsem tuto proměnnou zapnul, nestačil jsem se divit, kolik mi přišlo stížností od uživatelů, kteří posílají takovéto vadné maily, že jejich mail nebyl doručen. Amavis totiž ve varování píše, že mail byl zahozen (respektive je nedoručitelný), nehledě na nastavení proměnné $final_bad_he­ader_destiny. Proto buďto tuto proměnnou nenastavujte, nebo upravte varovací mail, aby informoval pravdivě.

Tím je konfigurace Amavisu hotová. Zbývá dotvořit chrootový adresář, spustit a odladit Amavis, nainstalovat Clamav a dodělat několik podpůrných drobností. Na to se můžete těšit v příštím dílu.

Byl pro vás článek přínosný?