Hlavní navigace

Stavíme mailový server: instalace

20. 10. 2003
Doba čtení: 6 minut

Sdílet

Nový seriál o instalaci a konfiguraci mailového serveru s ochranou proti virům a spamům. První díl se zabývá nainstalováním operačního systému a nastavením firewallu.

Nedávno jsem měl tu čest stavět poměrně důležitý mailový server s antivirem a antispamem. Nebyla to vůbec legrace – bylo nutné studovat mnoho dokumentací, mailinglistů, nastavovat řadu konfiguráků a hlavně rozvláčně ladit, proč tu a tam některá služba nefunguje či padá. Celá instalace s odladěním do všech detailů trvala ve dvou lidech zhruba týden. Proto jsem si řekl, že postup popíšu, dokud ho mám v živé paměti, abych příště já nebo někdo z vás čtenářů nemusel již tolik tápat.

Základ instalace serveru vychází z dokumentu anti-spam.html, kde je poměrně dobře popsán postup, kterak postavit mailový server na bázi Postfixu se zabudovaným antispamem Amavis. Tato dokumentace však pořádně nepopisuje instalaci antiviru Clamav a v některých bodech je neúplná nebo nepřesná, takže jsem musel poměrně dlouho „špekulovat“, proč to či tamto nechodí. Clamav jsem instaloval částečně podle dokumentu anti-spam.html a částečně podle dokumentace na domácí stránce Clamav. Zbytek jsem musel empiricky ozkoušet a odladit.

Ještě musím upozornit, že pokud budete podle návodu instalovat, spouští se veškeré uváděné příkazy pod uživatelem root.

Architektura serveru

Nejprve zkusím popsat, jak celý systém funguje. Na serveru běží mailový program Postfix, který má za úkol přijímat a doručovat maily přes protokol SMTP. K němu je připojen virus-scanner Amavis (A Mail Virus Scanner), který spolupracuje s virus detektorem Clamav a SpamAssassinem.

Když na server přijde nějaký mail, dostane ho Postfix, který naslouchá na portu 25. Postfix zjistí, zda je mail určen pro nás (pro naši doménu, náš server, či zda u nás vůbec existuje uživatel, pro kterého je mail určen) a zda mail splňuje základní SMTP pravidla.

Pokud mail projde touto počáteční kontrolou, Postfix jej předá přes TCP spojení na localhost Amavisu. Ten rozloží mail na části (text a jednotlivé soubory příloh, případně rozbalí zabalené části) a uloží je do dočasných souborů, na které je spuštěn virus scanner Clam. Clam umí jen virus detekovat, ale neumí ho odstranit, zavirované maily se proto nedoručují, ale ukládají do karantény, odkud si je může příjemce vyzvednout. Ke své práci používá Clam databázi virů, která je pravidelně aktualizována ze sítě.

Po antivirovém testu přijde detekce spamů. Amavis ve spolupráci s perlovým modulem SpamAssassin, online spamovými databázemi Razor a DCC a pomocí blacklistů zjistí, zda se jedná o spam. K určení, zda se jedná o spam, je používán bodový systém. Každá uvedená heuristika nebo test udělí mailu určitý počet bodů, které se sečtou. Pokud celková suma překročí jistou hranici, je mail podezřelý, a pokud překročí ještě vyšší hranici, mail je prohlášen za spam.

Amavis podle výsledků spolupracujících programů označí mail, případně mail zahodí či odešle upozornění odesilateli nebo administrátorovi mailserveru. Pokud mail celým bezpečnostním mechanismem projde, je vrácen postfixu, který ho doručí adresátovi.

Nastavení firewallu

Před zahájením vlastní instalace serveru musíme upravit nastavení firewallu (samozřejmě jen pokud je naše síť firewallem zabezpečena). Samotný server bude vyžadovat ke svému běhu krom standardního TCP portu 25 (SMTP) též UDP port 6277 pro spojení s DCC servery, TCP port 2703 pro spojování s Razor servery a TCP port 7 (ping) pro hledání zapnutých Razor serverů. Nastavení firewallu shrnuje následující tabulka. Hodnota server značí adresu našeho mailového serveru a hodnota any znamená kteroukoliv adresu na vnější síti.

Tabulka č. 508
Zdrojová adresa Cílová adresa Protokol Port
server any TCP 25
any server TCP 25
server any UDP 6277
any server UDP 6277
server any TCP 2703
server any TCP 7

Nebo stačí mít na firewallu povolena veškerá spojení ze serveru ven a firewall mít nastaven tak, aby udržoval stav UDP spojení (keep state).

Pro instalaci pravděpodobně budete též potřebovat povolit ze serveru ven TCP porty 22 (SSH), pokud instalujete vzdáleně po síti, 21 (FTP) pro stahování souborů a 80 (HTTP) pro čtení dokumentací a stahování souborů. Z bezpečnostních důvodů je vhodné tyto porty po nainstalování vypnout, proto nejsou v tabulce uvedeny.

V dokumentu anti-spam.html tabulku ještě komplikují demilitarizovanou zónou. My budeme předpokládat, že vnitřní síť je od okolního světa oddělena firewallem a mailový server je na vnitřní síti (mezi serverem a ostatními počítači na vnitřní síti již není žádný firewall), jak ukazuje obrázek.

Základní instalace operačního systému

Server je postaven na operačním systému OpenBSD, který byl vybrán zejména pro svoji stabilitu a bezpečnost, já jsem kompiloval a instaloval aktuální verzi ze zdrojáků z CVS, tedy verzi pre3.4 (vydání verze 3.4 se plánuje na 1. listopad). Celý postup včetně verzí software je tedy vztažen k této verzi OpenBSD. Instalace probíhá podle standardního postupu, jak je popsán v instalačním FAQ k OpenBSD.

Pozor, pokud přeinstalováváte starší verzi OpenBSD na nejnovější a chcete bootovat bsd.rd, nepodaří se vám nabootovat („staré“ BSD odmítne nahrát „nové“ bsd.rd) kvůli poměrně zásadním změnám ve verzi 3.4. Proto je nutné vytvořit bootovací disketu a startovat z ní.

Nároky serveru na CPU, paměť, ani swap kupodivu nejsou velké, pro ilustraci: mailserver pro 8000 uživatelů jsem instaloval na Duron 650MHz se 128MB paměti. Při rozdělování disku tedy můžeme celý systém umístit na jednu partition, velikost swapu nastavíme minimálně na dvojnásobek velikosti operační paměti. Antispamový a antivirový software poběží v adresáři /var/amavisd, kam bude též zapisovat dočasné soubory. Pokročilí uživatelé si tedy mohou vyhrát s umístěním /var/amavisd na paměťový filesystém (MFS), je však nutné správně zvolit rozdělení paměti. Další možností je vyhradit pro /var/amavisd, případně pro celý /var, vlastní partition, není to však nutné.

Ze základních komponent systému OpenBSD jsem instaloval následující:

  • bsd
  • base34
  • etc34
  • comp34
  • man34
  • game34
  • xbase34

Poslední tři části nejsou povinné, manuálové stránky jsou však užitečné, kdo nemá rád fortune, balík game vůbec instalovat nemusí. xbase jsem instaloval kvůli knihovnám.

Ladění výkonu a konfigurace systému

Po dokončení instalace základního systému počítač rebootujeme a můžeme se vrhnout na konfigurování a ladění výkonu BSD, jak je popsáno ve FAQ k ladění výkonu OpenBSD.

Nejprve nastavíme velikost bufferů na síťové kartě – parametr NMBCLUSTERS. Hodnota parametru odpovídá použité síťové kartě, pro 100Mbps kartu nastavíme hodnotu 8192. Abychom nemuseli překompilovávat kernel, použijeme příkaz config (viz man config(8)):

# config -e -o /bsd.new /bsd

ukc> nmbclust 8192
nmbclusters = 8192
ukc> quit
Saving changes

# mv /bsd /bsd.old
# mv /bsd.new /bsd

V případě potřeby můžeme též nastavit další parametry jádra – například zvětšit velikost diskových bufferů. Parametry lze též doladit dodatečně, až po rozběhnutí zjistíme, jak se server chová.

Pro pohodlí ještě můžeme pomocí příkazu vipw změnit v /etc/passwd rootovský shell z defaultního csh na shell shpáně Korna.

Instalace softwarových balíků

Nyní začneme instalovat softwarové balíky. Jejich instalaci provedeme příkazem pkg_add (viz man pkg_add(1)).

Krom základních balíků pro ulehčení práce, kterými jsou například vim, mc či screen, je nutné nainstalovat následujicí balíky. Jedná se zejména o archivační a komprimační programy, které budou potřeba pro rozbalování příloh v mailech.

  • arc-5.21e
  • bzip-0.21
  • bzip2–1.0.2
  • lha-1.14i
  • unace-1.2b
  • unarj-2.43
  • unrar-3.20beta3
  • unzip-5.50p2
  • zoo-2.10.1
  • gcpio-2.5

Dále nainstalujeme následujících pět balíků. Postfix jakožto vlastní mailový server a wget a ncftp pro instalaci perlových modulů.Wget ještě vyžaduje knihovny gettext a libiconv:

  • postfix-2.0.13p0
  • libiconv-1.8
  • gettext-0.10.40p1
  • wget-1.8.2
  • ncftp-3.1.5p0

Tím jsme dokončili přípravu operačního systému. V dalším dílu nakonfigurujeme a rozběhneme mailový server Postfix.

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