Linux jako server/Etch/Pošta

Z Wikiknih

Pozor, tento návod je právě tvořen, nic podle něj nenastavujete - jedině na vlastní rizoto! :o)

Tento návod byl inspirován tímto textem. Hodní lidé. :o)

Zadání, východiska[editovat | editovat zdroj]

Budeme nastavovat poštovní systém, který zvládne přijímat poštu i pro více domén.

Je více variant jak poštu vyřešit. V tomto návodu se popisuje řešení s:

  • Postfix jako smpt server - homepage. O Postfixu taky vyšla hezká kniha v češtině. Za těch 490 vočí určitě stojí.
  • Dovecot jako imap a pop server - homepage, wiki
  • MySQL jako úložiště informací o virtuálních doménách a uživatelích
  • Postfix admin jako nástroj pro správu virtuálních domén / užvatelů v databázi SQL - homepage
  • antivirus / antispam: SpamAssassin, ClamAV to vše pod Amavis-new
  • Webmail Squirrelmail - homepage

Pro Postfix admina a pro Squirrelmail budeme potřebovat i web server Apache2 a PHP s podporou MySQL. Jejich instalace je popsána v návodu Web.

Jak to bude fungovat dohromady[editovat | editovat zdroj]

Nejhezčí by bylo udělat takový ten obrázek s obdélníčkama a šipečkama. Ale to bych se do toho stejně zamotal. Takže začněme hezky od prostředka:

Pošta bude fungovat pro:

  • lokání uživatele (to jsou ti, co mají na serveru zřízený opravdový účet)
  • virtuální uživatele ve virtuálních doménách (ti budou mít své účty uloženy v SQL databázi).

O předávání pošty se bude starat PostFix. Umožní jednak příjem pošty, tak i její odesílání (pro klienty z vnitřní sítě).

Finální doručení do schránek svěříme (kupodivu) Dovecotu, který má svého LDA (Local Delivery Agent), takže o tuto práci bude Postfix ošizen (i když mám vyzkoušeno, že by to zvládnul taky). Je ale asi přeci jen lepší, když poštu umístí do schránky stejný program, který ji pak bude ze schránky pro uživatele zase vyzvedávat.

Hlavní funkcí Dovecotu je ale sloužit jako IMAP a POP3 server. Takže poštovní klienti uživatelů budou komunikovat s ním.

Aby se do pošty dalo koukat i nezávisle na poštovním klientovi, bude na serveru fungovat i webmail Squirrelmail. Je to príma, když se do pošty dostanete i z internet kafé někde v Chile, nebo kam jezdíte na dovolenou.

Správa virtuálních domén a uživatelů je svěřena programu PostFix Admin, který má příjemné webové rozhraní. Má dva stupně administrátorů: Superadmina, který je bohem (smí vytvářet normální adminy a domény) a normální adminy, kteří mají svěřené domény v nichž mohou spravovat uživatelské účty. PFadmin taky umožňuje přihlášení normálním smrtelníkům (uživatelům), kteří si tu mohou třeba změnit heslo, nebo přidat aliasy.

No a někde v pozadí si brumlají servery MySQL, Spamassasin a ClamAV. MySQL je úložištěm virtuálních domén a virtuálních uživatelů. SpamAssassin se stará o indentifikaci spamu. ClamAV zas odchytává oblíbené utility operačního systému MS Windows.:o)

Řekněme si ještě, že Postfix/Dovecot/PostFix-admin dovedou nastavovat a hlídat uživatelům kvóty - kolik že prostoru jejich e-maily na HDD zabírají. Nastavení v PFadminu je brnkačka. Pozdravujte vytočené uživatele! :o)

A z venku to vypadá tak jednoduše...:-P

Nastavení DNS záznamů[editovat | editovat zdroj]

Aby pošta mohla být doručována, je potřeba o tom říci DNS systému. Ve svých DNS záznamech byste měli mít řádek s MX (MailExchange) záznamem:

mail.server.com MX 10 www.server.com

A někde před ním pochopitelně řádek s IP adresou www.server.com:

www.server.com A 11.22.33.44

Má-li pošta fungovat pro víc domén, nastavíme to u ostatních podobně:

www.jinadomena.com  A 11.22.33.44
mail.jinadomena.com MX 10 www.jinadomena.com

Všimneme si, že obě domény spojuje stejná IP adresa (zde vymyšlená).

Výchozí situace[editovat | editovat zdroj]

V GNU Debian Linux Etch je po instalaci nainstalován jako smtp server program Exim4. Není špatný, jen k němu není, na rozdíl od Postfixu, česká knížka...

Pokud jste při instalaci systému zaškrtli v "task selectu" volbu "mail server", pak kromě Eximu máte nainstalovaný POP3 server Qpopper a IMAP server UW-IMAP.

Ale ještě než provedeme změny, je dobré si říci, že smtp servery (Exim i Postfix) jsou po nainstalování nastaveny tak, že fungují. Umí doručovat poštu lokálním uživatelům a rovněž jim odesílat poštu kamkoliv do Internetu. Na druhou stranu nefungují pro "cizí" počítače, takže se nemusíte bát, že by váš smtp server fungoval na Internetu jako "open-relay".

Instalujeme potřebný základ - jednodoménové řešení[editovat | editovat zdroj]

Postfix - smtp server[editovat | editovat zdroj]

Budeme potřebovat balíčky:

  • postfix
  • postfix-mysql (nebo -pgsql, ale ten v tomto návodu není)
  • postfix-doc

Při instalaci dojde automaticky k odinstalování balíčků Exim4. Doporučuji nastavit důraznější formu odinstalace vyčistit (purge), místo výchozí odstranit (remove) - zbavíme se tak nepotřebných konfiguráků.

Po nainstalování funguje Postfix jak už bylo popsáno - pro lokální uživatele jako plnohodnotný smtp server, který umí maily z Internetu přijmout a doručit do schránky. A naopak může být použit k odesílání mailů do Internetu.

Dovecot - imap a pop server[editovat | editovat zdroj]

Je obsažen v balíčcích:

  • dovecot-common
  • dovecot-imapd
  • dovecot-pop3d

Při instalaci Dovecotu dojde k případnému odinstalování jiného POP3 a IMAP serveru, pokud jste si je nainstalovali kupř během prvotní instalace systému.

Dovecot není po nainstalování rovnou spuštěn. Budete muset navštívit jeho konfigurační soubor /etc/dovecot/dovecot.conf a nastavit direktivu

protocols imap imaps pop3 pop3s

Povolte jen ty protokoly které hodláte používat k zpřístupnění pošty klientům. Upozorňuji, že pokud budete instalovat webmailový program Squirrelmail, budete potřebovat protokol imap, nebo imaps (stačí nešifrovaný imap).

Po nastavení této direktivy můžete Dovecot spustit:

/etc/init.d/dovecot start

A můžete se přesvědčit, že jede ps -e.

Sorry, ale tento odstavec je trochu mlžení: Jelikož kombinace přístupu přes IMAP a POP do jedné schránky není právě ideální, možná budete chtít balíček -pop3d vynechat. Na druhou stranu není na škodu nechat, ať si uživatel vybere, co chce. Nicméně naše řešení vychází z uspořádání pošty v Maildiru, tudíž použijeme imap.

Dovecot je nyní ve fázi Release Candidate. Je zcela v pohodě vychytaný. Důvodem, proč stále nebyl vydán jako finální verze 1.0 je "pouze" nedostatečná dokumentace. V současnosti v /usr/share/doc/dovecot-common najdete několik textů, které jsou poněkud zatuchlé a taky tu najdete doporučení hledat dokumentaci ve wiki. Ale i taky to chce brát trochu s rezervou. Nechcete s dokumentací pomoct vy?

Hotovo pro jednu doménu[editovat | editovat zdroj]

Možná mi to nebudete věřit, ale v tuto chvíli máte nastavený Internetový poštovní server pro jednu doménu.

Každý uživatel, kterého přidáte do systému useradd má automaticky mailovou schránku v /var/mail ve formátu mailbox - to je jeden soubor, do kterého se příchozí maily připojují na konec. Používá-li uživatel přístup k poště přes POP3, pak se mu do jeho počítače stahuje obsah právě tohoto souboru. Používá-li IMAP, pak tento soubor na serveru zůstává a uživatel si je prohlíží svým mailovým klientem, jako by to nebyl jeden soubor ale sada odděleným e-mailových zpráv. IMAP klient umožňuje na serveru zřizovat složky/schránky jako je Odeslaná pošta, Koš ap. Tyto schránky se fyzicky vytvářejí v adresáři mail v jeho domovském adresáři.

Nastavení odesílání z vnitřní sítě[editovat | editovat zdroj]

Je-li mailserver určen k odesílání pošty pro počítače ve vnitřní síti, pak je potřeba to povolit v konfiguraci Postfixu v /etc/postfix/main.cf. Tam najdeme direktivu mynetworks a dáme do ní sítě, které hodláme přeposílat:

mynetworks = 127.0.0.0/8, 192.168.1.0/24, 192.168.2.0/24

Po restartu Postfixu

/etc/init.d/postfix restart

už bude odesílání fungovat.

AntiSpam a AntiVirus: Amavis-new, ClamAV, SpamAssassin[editovat | editovat zdroj]

Amavisd-new je neutrální spouštěč pro různé antispamové a antivirové programy. Je to takový dispečer, který přebírá maily od Postfixu a předává je připojeným AV a AS programům. Po profiltrování vrátí mail zpátky Postfixu ke konečnému doručení.

V knize o Postfixu se dočtete, že spolupráce Postfixu a Amavisu může mít dvě formy:

  • content-filter
  • smtpd-proxy-filter

My tady popisujeme variantu první content-filter, nicméně je dobré znát obě. Takže stručně: Postfix obdrží požadavek na doručení mailu. Během úvodní konverzace má Postfix možnost přijetí mailu odmítnout, neučiní-li tak, postupuje mail k dalšímu zpracování uvnitř systému.

smtpd-proxy-filter se uplatní už během té úvodní komunikace. Postfix má cca 5 minut na to, aby vzdálenému systému neřekl, jestli mail bere, nebo ne. Během této doby se může zeptat Amavisu, co si o tomto mailu myslí. Slepička běží od selky ke kravičce... Tedy Amavis se zeptá spřažených AV a AS programů a když je to špatňáckej mail, tak může Amavis říct Postfixu, že ten mail nechce a Postfix řekne vzdálenému serveru to samé.

content-filter fungje tak, že Postfix mail prostě přijme - tj. vzdálený systém je uchlácholen, že mail byl doručen, a teprve pak ho předá Amavisu k přežvýkání. Je jasné, že v této variantě už není možno mail odrazit jako nedoručitelný.

smtpd-proxy-filter se tak jeví daleko pružnější. Jeho jedinou nevýhodou je onen časový limit, během něhož musí vzdálenému systému odpovědět zde bere, nebo ne. Kdyby to nestihnul (což se u velmi zatíženého systému může přihodit), bude se vzdálený systém pokoušet doručit mail znovu. A znovu. A znovu... Chápete? :o)

Není-li váš systém příliš zatížený, bude smtpd-proxy-filter správnou volbou.

Pro zajímavost: Onen pětiminutový limit je využíván při tzv. graylistingu, což je jeden z nástrojů boje se spamem. Vychází se z toho, že spamové servery nečekají na definitivní soud přijímajícího mail serveru a tedy se nepokoušejí o opětovné odeslání mailu, nepřijde-li do těch pěti minut odpověď.

Amavis-new[editovat | editovat zdroj]

Nejdříve nainstalujeme balíček amavisd-new. V Aptitude se můžeme podívat do seznamu navrhovaných balíčků a přidat i dosud nenainstalovaná rozbalovadla na různé archivy (rar, lha, cab,...). Po nainstalování amavisd-new rovnou pojede.

V tuto chvíli o amavisu postfix neví; zapojíme ho tedy do hry. Budeme editovat /etc/postfix/main.cf a přidáme řádek:

content_filter = amavisd-new:[127.0.0.1]:10024

Ten říká, ze má Postfix na portu 10024 filtr s názvem amavisd-new. Další informace o tomto filtru přidáme do /etc/postfix/master.cf:

amavisd-new 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

To zajistí, aby Postfix do Amavisu posílal maily. Ještě musíme zajistit cestu zpět. Opět do /etc/postfix/master.cf přidáme řádky:

127.0.0.1:10025 inet n  -       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_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 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

To říká Postfixu aby naslouchal na portu 10025. Tam mu totiž Amavis bude profiltrované e-maily vracet. Je to tedy druhý port (vedle 25), kde náš Postfix čeká na poštu. Je důležité, aby naslouchal jen na lokální smyčce, aby nám tudy někdo ftipný nemohl posílat maily z Internetu. Ta spousta paramatrů je opsána z originál dokumentace, ale stručně řečeno vidíme, že jsou vypnuty různé kontorly, protože ty proběhly v první fázi v Postfixu, před předám mailu do Amavisu. Teď už by jejich opakování jen zdržovalo.

Před vyzkoušením je potřeba říct Postfixu, aby si znovu přečetl svoje konfiguráky:

# /etc/init.d/postfix force-reload

A syslog není na parádu:

# tail /var/log/syslog

Nyní pošleme e-mail. Třeba z konzoly a hned si necháme ukázat, jak to v syslogu maká:

# mail uzivatel && tail -f /var/log/syslog

Všimněte si v syslogu, že mezi řádky, které vypsal Postfix je i jeden, který vypsal Amavis. Váš uživatel by měl mít nový e-mail. Tak se na něj podíváme Muttem.

su -c "mutt" uzivatel

Otevřte si ho a klávesou h zapnete zobrazení všech hlaviček. Druhá hlavička Recieved: bude obsahovat informaci, že mail přijal Amavis na portu 10024. Funguje to! Ani to nebolelo.

Kdybyste fakt chtěli mít zážitky, tak můžete amavis stopnout a pak ho pustit v debug režimu:

/etc/init.d/amavis stop
/etc/init.d/amavis debug

Amavis pojede a na současné konzoli bude vypisovat vše, co se mu děje.

Teď přidáme filtrování spamu.

ClamAV[editovat | editovat zdroj]

Jak už jsme si řekli, antivirový program ClamAV je využíván Amavisem. Amavis si ho najde sám při (re)statru.

Takže si nainstalujeme balíček clamav-daemon. Automaticky to přibere i balíčky clamav, clamav-freshclam, clamav-base. Daemon je tím čemu bude Amavis předávat maily ke kontrole, freshclam je démon, který se stará o pravidelné stahování aktualizací virové databáze. Pro testování se nám možná bude hodit balíček clamav-testfiles.

Opět se podíváme do seznamu navrhovaných balíčků, kde ještě najdeme dokumentaci k ClamAV a balíček daemon. První mi připadá užitečný, o druhém si nejsem jistý. Ostatně, je to jen "navrhované".

Po nainstalování běží ClamAV, včetně freshclamu automaticky. Teď je potřeba říct Amavisu, aby začal kontrolovat zprávy pomocí ClamAV. Upravíme soubor /etc/amavis/conf.d/15-content_filter_mode, kde odkomentářujeme dva řádky, začínající #@bypass_virus_checks_maps.

A restartujeme amavisd:

# /etc/init.d/amavis restart

Můžete se též podívat do syslogu, co tam při restartu amavis vypsal.

# tail -n100 /var/log/syslog | less

Je to fakt dlouhý :o) Najdeme si řádek, kde je ANTI-VIRUS code s informací "loaded". A na konci najdeme řádky říkající, že ClamAV je naš kamarád.

Ještě přidáme uživatele clamav do skupiny amavis (viz /usr/share/doc/libclamav2/READMDE.Debian.gz)

# usermod -a -G amavis clamav

K testování použijeme testovacího "virusa" ze stránek http://eicar.org (odkaz ke stažení najete vpravo nahoře). Stáhněte ten "eicar.com" třeba do adresáře /tmp. A pošleme e-mail:

# mail uzivatel < /tmp/eicar.com

A podíváme se do syslogu, kde ke konci bude řádek, že Amavis "blocked infected". Uživateli nic nepřijde, páč mail je v tuto chvíli zahozen. To je výchozí chování v Debianu. Změnit se to dá, viz Další poladění

Čerstvá databáze virů[editovat | editovat zdroj]

Je trochu problém. Debian se drží politiky, že ve Stable verzi se neaktualizuje na nové verze balíků, ale jen na opravené verze. To znamená, že víc než rok budete mít ClamAV ve stále stejné verzi. Databáze virů se sice aktualizuje, ale jak to znáte i z jiných antivirových systémů, občas je potřeba aktualizovat program samotný.

Debian udělal archiv, který je jakýmisi kompromisem: http://volatile.debian.org/. Tady se najde software, který ve Stable verzi přeci jen aktualizaci verzí potřebuje. Znalejší lidé by měli pochopit, že se nejedná o nějaký "Backport" server.

Takže uděláme dvě věci:

  • přidáme odkaz na archiv do /etc/apt/sources.list
deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free
  • stáhneme a nainstalujeme veřejný klíč arichvu volatile: Na stránce http://www.debian.org/volatile/ najdeme odkaz na "Archive signing key" etch-volatile.asc, a ten stáhneme a uložíme do /etc/apt/. Pak se do tohoto adresáře přepneme a přidáme klíč na klíčenku důvěryhodných zdrojů:
# cd /etc/apt
# gpg --no-default-keyring --keyring /etc/apt/trusted.gpg --import etch-volatile.asc

Když teď spustíme Aptitude a necháme aktualizovat zdroje "u", pak se nové verze z volatile objeví.

SpamAssassin[editovat | editovat zdroj]

Nainstalujeme balíček spamassasin, k němu se automaticky přidá spamc a jak uvidíme před spuštěním instalace, i spousta dalších balíčků. Opět nakoukneme do navrhovaných balíčků. Přidat se určitě hodí razor a dcc-client.

SpamAssassin po nainstalování nejede (možná si té hlášky v Aptitude všimnete;o). Je potřeba v /etc/default/spamassassin nastavit ENABLED na "1" a SpamAssassin uvést do chodu:

# /etc/init.d/spamassassin start

a (toho už se nezbavím):

# tail /var/log/syslog

Jede? Jesli je tam jen jeden řádek, byli jste moc rychlí. Dejte ten "tail" tak za půl minuty znova.

Stejně jako u ClamAV bude potřeba odkomentářovat řádky v /etc/amavis/conf.d/15-content_filter_mode, tentokrát ty, co začínají @bypass_spam_checks_maps. A restartovat Amavis:

# /etc/init.d/amavis restart

A opět si necháme ukázat posledních hafo řádků v syslogu, kde budeme hledat, že ANTI-SPAM code byl "loaded".

sa-update je utilita, která stahuje aktualizace spamassassinní databáze do /var/lib/spamassassin. Musí se spouštět ručně a spouští ji root. Ručně je to prý proto, že je to docela nové. Ale lidé znalí crontab -e si s tím poradí.

Ve výchozím nastavní není SpamAssassin právě ukecaný. Vlastně jen Amavis přidá do mailu, který je spam hlavičku:

Precedence: junk

To na filtrování není právě nejvíce, že? Takže do /etc/spamassassin/local.cf přidáme na konec řádky:

rewrite_header Subject {Spam?}
add_header all Flag _YESNOCAPS_
add_header spam Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_
add_header spam Level _STARS(s)_

které do všech e-mailů (header all) přidají řádek s hlavičkou X-Spam-Flag (YES/NO) a do spamových mailů další dvě hlavičky. Ta "Level" obsahuje tolik znaků "s", kolik dostal e-mail "spamových" bodů. To se dobře používá v poštovních klientech pro filtrování pošty. Např. při pěti "s" přesunout do schránky "spam", při patnácti "s" rovnou smazat.

Hlavička spamových mailů (těch co mají aspoň 5 bodů) je navíc obohacena o text {Spam?}.

No a čekáte nějaký testovací mailík, že? Takže teď to bude víc hardcore. Nejprve zjistíme, že v /usr/share/doc/spamassassin/examples je soubor sample-spam.txt. V něm se dočteme, že on je opravdu tím testovacím mailem, ale že ho musíte poslat odněkud jinud než z lokálního stroje. Takže, jste-li na server připojeni přes ssh z domova, pošlete to z domova. Jste-li u serveru osboně, tak se přes ssh připojte na jiný stroj a pošlete to z něj. Použijeme program telnet (hvězdiškou odsadím řádky, které se vypisují samy).

# telnet nas.server.com 25
*Trying 81.2.210.31...
*Connected to mail.no-frost.cz.
*Escape character is '^]'.
*220 nas.server.com ESMTP Postfix (Debian/GNU)
ehlo druhej.server.com
*250-nas.server.com
...
*250 DSN
mail from: ja@tady.com
*250 2.1.0 Ok
rcpt to: nekdo@nas.server.com
*250 2.1.5 Ok
data
*354 End data with <CR><LF>.<CR><LF>
--- následující řádky jsou zkopírovány z testovacího souboru sample-spam.txt ----
Subject: Test spam mail (GTUBE)
Message-ID: <GTUBE1.1010101@example.net>
Date: Wed, 23 Jul 2003 23:30:00 +0200
From: Sender <sender@example.net>
To: Recipient <recipient@example.net>
Precedence: junk
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

This is the GTUBE, the
        Generic
        Test for
        Unsolicited
        Bulk
        Email

If your spam filter supports it, the GTUBE provides a test by which you
can verify that the filter is installed correctly and is detecting incoming
spam. You can send yourself a test mail containing the following string of
characters (in upper case and with no white spaces and line breaks):

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

You should send this test mail from an account outside of your network.
.
--- konec testovacího souboru sample-spam.txt ----
*250 2.0.0 Ok: queued as 7A9861003A8A5
quit
*221 2.0.0 Bye
*Connection closed by foreign host.

Nahlédnutím do syslogu zjistíme, že zpráva nebyla doručena, ale "BOUNCE". To je podle mě špatně. O zahazování pošty má rozhodovat adresát. Takže bude potřeba Další poladění.

Funguje i jednoduché testování, které funguje i přímo na lokále (serveru):

spamc < sample-spam.txt | less

Tady ovšem nejde spam poštovním systémem, jen testujeme, co s ním provede spamassassin.

Další poladění[editovat | editovat zdroj]

Konfigurace amavisu je v adresáři /etc/amavis/conf.d/. Zajímavé čtení (neupravovat!) je v souboru 20-debian-default. Změny si dáme do 50-user. Chceme-li, aby Amavis všechno doručil, nic nezahazoval, nic neodrážel, dáme sem:

$final_virus_destiny      = D_PASS;
$final_banned_destiny     = D_PASS;
$final_spam_destiny       = D_PASS;
$final_bad_header_destiny = D_PASS;

Reloadneme Amavis:

# /etc/init.d/amavis restart

A juchú! Spamové zprávy jsou nyní doručeny a mají přidanou hlavičku:

Precedence: junk

Zprávy obsahující viry jsou rovněž doručeny (což možná stojí za další poladění) a mají přidanou hlavičku:

X-Amavis-Alert: INFECTED, message contains virus: jméno viru

Další parametry mohou změnit "vážnost" spamu:

$sa_tag_level_deflt = 0;
$sa_tag2_level_deflt = 5;
$sa_kill_level_deflt = 15;

Tag přidává X-Spam hlavičky do mailu. Tag2 přidá i další. Kill maily maže, nebo doručuje podle nastavení $final_spam_destiny nastaveného výše. Číslo je počet "spamových bodů", které mailu přidělil SpamAssassin.

Více domén, virtuální domény[editovat | editovat zdroj]

Úvodem, shrnutí předchozího[editovat | editovat zdroj]

Pokud postupujete od začátku až sem, máte nyní jednodoménový server, který umí filtrovat spam a viry.

V čem je vícedoménové řešení odlišné? No, hodně. Linuxový systém má svoje jméno z něhož je odvozeno i jméno domény. Všechny serverové služby tohle umí přečíst a pracují s tím ve svém výchozím nastavení. Proto jsme do teď zas tak moc pracovat nemuseli.

Vícedoménové řešení představuje domény jako virtuální. Skutečná doména může být jen jedna. Vícedoménové řešení tedy přidává zcela novou dimenzi.

Zatímco u jednodoménového řešení má každý uživatel přidaný do systému automaticky schránku, u vícedoménového to tak jednoduché není. Virtuální domény si žádají virtuální muže! A ženy. A děti. Jenže kam s nimi? Do databáze! A do jaké? No, nabízí se především SQL, či LDAP. LDAP je (jak říká kamarád) řešení "overkill", takže zůstaneme u SQL.

Programy, které použijeme, umějí pracovat jak s MySQL, tak s PostgreSQL. Ačkoli tu popisujeme řešení s MySQL, řešení s PostreSQL je tak podobné, že by bylo zbytečné ho tu rozpitvávat.

V SQL databázi budeme mít tabulky:

  • s virtuálními uživateli, jejich hesly (šifrovaná MD5) a umístěním adresářů na poštu
  • s aliasy uživatelů
  • s virtuálními doménami
  • s administrátory

Databázi budeme spravovovat přes webové rozhraní programu Postfix Admin, což je vážně pohoda. Naší databázi bude rozumět jak Postfix, tak Dovecot. Co víc si přát? Dejme se do toho

Instalace MySQL[editovat | editovat zdroj]

Dá se předpokládat, že SQL databázi už máte nainstalovanou, pokud ne, vyhoví nám MySQL ve verzi 4.1 a vyšší.

Pokud máte raději PostgreSQL, tak vás snad potěší, že všechny použité programy umí i tuto databázi. Pokud tuto variantu vyzkoušíte, bude skvělé, když tento návod o případné ochylky obohatíte.

Chcete-li mít v MySQL jako výchozí kódování znaků UTF-8 a třídit česky, dejte do /etc/mysql/conf.d/ soubor (název libovolný) s tímto obsahem:

[mysqld]
language         = /usr/share/mysql/czech
character_set_server	= utf8
collation_server	= utf8_czech_ci

Squirrelmail[editovat | editovat zdroj]

Budeme instalovat balíčky:

  • squirrelmail
  • squirrelmail-locales

Počítáte-li s exotickými kódováními v e-mailech, dejte ještě balíček

  • squirrelmail-decode

Postfix admin (pfadmin)[editovat | editovat zdroj]

Není součástí Debianího archivu, takže si ho stáhneme ze SourceForge.

Stažený soubor je zagzipovaný tar archiv. Rozbalíme ho do /var/www/postfixadmin.

Nyní budeme věnovat pozornost dvěma konfiguračním souborům: config.inc.php a DATABASE_MYSQL.TXT. Samozřejmě se nedopustíme chyby přečtením INSTALL.TXT.

config.inc.php[editovat | editovat zdroj]

Vyrobíme zkopírováním config.inc.php.sample:

cp config.inc.php.sample config.inc.php

A pak si ho trochu upravíme.

  • Můžeme změnit default_language na "cs"
  • database_type bude "mysqli" (ano, na konci je i).
  • Bude vhodné si změnit heslo pro přístup do databáze database_password.
  • admin_email - třeba postmaster@skutecna.cz
  • generate_passwords bych nastavil na "NO". Automaticky generovaná hesla stejně nikdo nemá rád. Ale na druhou stranu, není to nic špatně.
  • default_aliases - tomu se dá rozumět.
  • kvóty; hlavně maxquota - výchozí hodnta 10MB se mi nezdá moc. Já přidal nulu, takže 100.
  • quota - vynucení kvóty změníme na YES, ale třeba až bude všechno fungovat. Když "NO", tak bude mít uživatel informaci o tom, kolik prostoru zabírá, ale nebude omezován.
  • logging - bych nechal na "YES". Log se zapisuje do SQL databáze a obsahuje informace o přidaných/změněných uživatelích, doménách, aliasech... Tedy užitečné informace.
  • footer_text se objeví dole na každé stránce a dá se na něj kliknout. Dostanete se pak na stránku na adrese v dalším parametru footer_link. Tam bych dal odkaz na postfixadmin - login.php. Bude-li pfadmin na vlastní doméně třetí úrovně, pak by to mohlo vypadat takto: https://pfadmin.skutecna.cz:4440/login.php.

Ostatní věci v tomto konfiguráku si pročtěte taky. Já jen chtěl upozornit na ty podstatnější.

generování sql databáze[editovat | editovat zdroj]

DATABASE_MYSQL.TXT je další soubor, který nás bude extrémně zajímat.

Hned první "INSERT" vytváří uživatelele pro přístup do naší SQL databáze. Ta se bude jmenovat "postfix", ale heslo nenecháme "postfix", ale nastavíme si tu jiné.

O pár řádek níž je další "INSERT" pro uživatele "postfixadmin". Tomu upravíme heslo na stejné, jako jsme dali do database_password v config.inc.php výše.

A pak už jen spustíme tvorbu databáze:

# mysql -u root [-p] < DATABASE_MYSQL.TXT

Nastavení virtuální domény pro pfadmina[editovat | editovat zdroj]

Přečtěte si Linux jako server/Etch/web. Tady to jen velmi stručně ukážu.

Pfadmin bude naslouchat na portu 4440 a bude přístupný pouze po šifrované lince (ssl). Port si samozřejmě můžete vybrat jiný.

  • Budeme muset vygenerovat klíč/certifikát pro doménu pfadmin.skutecna.cz a uložit do adresáře "ssl" v adresáři /etc/apache2.
  • Uděláme konfigurák pro doménu v sites-available s názvem "pfadm.skutecna.cz".
Listen 4440
NameVirtualHost *:4440
<VirtualHost *:4440>
  DocumentRoot /var/www/postfixadmin
  ServerName pfadm.no-frost.cz
  SSLEngine On
  SSLCertificateFile /etc/apache2/ssl/pfadm.skutecna.cz.crt
  SSLCertificateKeyFile /etc/apache2/ssl/pfadm.skutecna.cz.key
</VirtualHost>
  • Zadáme příkaz, který nám doménu přidá do sites-enabled:
# a2ensite pfadm.skutecna.cz

No a teď když si pustíme internetový prohlížeč a zadáme do něj https://pfadmin.skutecna.cz:4440/, dostaneme se na stránku s úvodními informacemi a s klik-odkazem na "setup", který nám ověří, že všechno je jak má být. Další klik nás dostane na přihlašovací stránku.

Postfix[editovat | editovat zdroj]

Po nainstalování umí Postfix doručovat do schránek typu mailbox uživatelům, kteří existují v systému. Samozřejmě nějaká další nastavení neuškodí.

Upřesněme si dva typy uživatelů:

lokální
ti mají v systému zřízen účet (passwd, shadow)
virtuální
ti v systému neexistují. Účet mají v SQL databázi.

My budeme chtít, aby poštu dostávali jak lokální uživatelé, tak i virtuální uživatelé. Budeme tedy muset říct Postfixu, které domény má považovat za "vlastní" a které za virtuální.

Nejlepší bude, když se podíváme do hlavního konfiguračního souboru main.cf, který je v adresáři /etc/postfix. Všimněte si hlavně částí LOCAL a VIRTUAL:

 # Debian specific:  Specifying a file name will cause the first
 # line of that file to be used as the name.  The Debian default
 # is /etc/mailname.
 #myorigin = /etc/mailname
 smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
 biff = no
 # appending .domain is the MUA's job.
 append_dot_mydomain = no
 # Uncomment the next line to generate "delayed mail" warnings
 #delay_warning_time = 4h

 # TLS parameters
 smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 smtpd_use_tls=yes
 smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
 smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
 # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
 # information on enabling SSL in the smtp client.

 relayhost =
 mynetworks = 127.0.0.0/8
 mailbox_command = procmail -a "$EXTENSION"
 mailbox_size_limit = 0
 recipient_delimiter = +
 inet_interfaces = all

 # --- LOCAL -------------------------------------------------
 # Zde uvádíme domény, které nemají být považovány za virtuální.
 # Doručuje se uživatelům, kteří existují v /etc/passwd (tedy v systému)
 myhostname = mail.skutecna.cz
 alias_maps = hash:/etc/aliases
 alias_database = hash:/etc/aliases
 myorigin = $mydomain
 mydestination =
  skutecna.cz,
  mail.skutecna.cz,
  localhost

 # --- VIRTUAL -------------------------------------------------
 virtual_mailbox_base = /var/vmail
 virtual_uid_maps = static:333
 virtual_gid_maps = static:8
 virtual_mailbox_domains = mysql:/etc/postfix/sql/virtual_mailbox_domains.cf
 virtual_mailbox_maps = mysql:/etc/postfix/sql/virtual_mailbox_recipients.cf
 virtual_alias_maps = mysql:/etc/postfix/sql/virtual_alias_maps.cf
 virtual_trasnport = dovecot

 # --- ANTI-SPAM-VIRUS -----------------------------------------
 #content_filter = amavisd-new:[127.0.0.1]:10024

Z konfiguráku nás teď budou zajímat hlavně části LOCAL a VIRTUAL.

Lokální domény/uživatelé[editovat | editovat zdroj]

V části LOCAL uvádíme domény, které mají lokální uživatele. Tedy, co přijde na tuto doménu, bude doručeno uživateli, který má v systému účet (/etc/passwd). Schránky těchto uživatelů jsou v souborech /var/mail/uživatel. Doména localhost je určena pro lokání doručování - např. když chce nějaký systémový program napsat rootovi, nebo když je uživatel přihlášený na serveru (třeba přes ssh) a napíše jinému lokálnímu uživateli mail (třeba pomocí příkazu mail).

Virtuální domény/uživatelé[editovat | editovat zdroj]

Část VIRTUAL popisuje konfiguraci virtuálních domén a uživatelů - o nich systém nic neví (jsou uloženi v SQL databázi). Je jasné, že pokud budeme chtít jen lokální uživatele, část virtual se nás netýká a nepoužijeme ji.

Všimněme si ještě řádku virtual_trasnport = dovecot. Ten odkazuje do dalšího konfiguračního souboru Postfixu - master.cf a znamená, že o doručování do schránek se bude starat Dovecot, který to taky umí. Má to tu výhodu, že schránku bude vytvářet stejný program, který z ní pak bude číst.

Takže do /etc/postfix/master.cf přidáme někam na konec řádky:

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d ${recipient}

Další pozoruhodnou věcí je adresář /var/vmail, kde bude hnízdečko pro virtuální domény a jejich uživatele. Taky vytvoříme uživatele vmail, který bude vlastníkem tohoto adresáře a adresářů domén:

# useradd -g mail -u 333 vmail
# mkdir /var/vmail
# chown vmail.mail /var/vmail
# chmod 770 /var/vmail

Jestli vás zajímá, jak se budou přidávat virtuální domény, buďte trpěliví - píše se o tom dále. Hezky pohromadě s ostatními věcmi.

Ale zpátky ke konfiguráku. Vidíme tam direktivy virtual-uid-maps a virtual-gid-maps se záhadnými čísly. To jsou čísla uživatele vmail - které jsme mu právě přidělili ("333") a skupiny mail, která ve vašem systému nemusí být právě "8". Tak si to v /etc/group zjistěte a v main.cf případně upravte.

Ještě bude dobré zkontrolovat, zda master.cf obsahuje řádek pro doručování do virtuálních domén (měl by tam být):

virtual   unix  -       n       n       -       -       virtual

Odesílání pošty[editovat | editovat zdroj]

V našem příkladu je vidět, že prostřednictvím našeho serveru smí poštu odesílat pouze lokální klienti (tedy hlavně systémové programy). Potřebujete-li využít tento server i pro odesílání pošty i z jiných počítačů, pak pro klienty, kteří jsou ve vaší vnitřní síti to umožníte přidáním jejich sítě do parametru mynetworks. Například:

mynetworks =
  127.0.0.0/8,
  192.168.4.0/24,
  192.168.5.0/24

Potřebujete-li nastavit odesílání pro klienty, kteří jsou mimo vaši lokální síť, pak budete muset sáhnout k smtp autentifikaci a to vás lituju. Hledejte v dokumentaci k Postfixu.

Další části konfiguráku main.cf[editovat | editovat zdroj]

Jak vidíme, je tu ještě část týkající se TLS. Poštovní klienti/servery, které nám budou chtít poslat poštu šifrovaně tak mohou učinit. Tato část konf. souboru tu je vytvořena defaultně. Stejně tak certifikáty (s krásným názvem "hadí maz") se vygenerují automaticky při instalaci Postfixu. TLS prostě jede samo.

Ostatní části snad dovedete přečíst sami. Komentář k nim nemám.

Slovní shrnutí[editovat | editovat zdroj]

Naše pošta tedy bude běhat na serveru s názvem mail.skutecna.cz. Tento název uvedeme i souboru /etc/mailname. Je to doménové jméno, podstatné pro poštovní systém. Z něj je odvozeno mj. $mydomain (to co zbyde za první tečkou - tedy "skutecna.cz").

Postfix poštu přijímá od klientů, nebo jiných smtp serverů a předává ji buď dovecotímu LDA k lokálnímu doručení, nebo ji posílá dál do Internetu (je-li příjemcem ne-naše doména). Odesílá dál samozřejmě jen v případě že je odesílatel v naší lokální síti. Jinak by to byla žádost o zápis do OpenRelay Black Listu (RBL) a s poštou utrum.

Dovecot[editovat | editovat zdroj]

Dovecot je nastavený tak, aby se k němu dalo přihlásit jen po šifrované lince. Váš poštovní program tak musí zvládat buď spojení pomocí SSL (na portu 993), nebo TLS (na portu 143). Nešifrované spojení je umožněno pouze lokálním klientům, což je v našem případe webmail Squirrelmail. Důvod je jasný - aby nešlo na síti odposlouchávat zasílaná hesla. Ta totiž putují v plaintextu.

Já chci pokračování ... :-) HATEX