Hlavní navigace

Sendmail: konfigurace poštovního serveru

7. 1. 2009
Doba čtení: 5 minut

Sdílet

Pokračování seriálu o velmi mocném pošťákovi Sendmail. Dnes se podíváme na konfigurační soubory access, virtusertable a genericstable. Pomocí nich si nastavíme přístupy pro jednotlivé domény, vytvoříme nějaké virtuální účty, trochu se zmíním o .mc souboru a na závěr si ukážeme maškarádu adres.

Access – přístupová databáze

Náš sendmail ve výchozím stavu odmítá veškerou poštu, pokud není určena pro vlastní stroj nebo pro domény uvedené v /etc/mail/local-host-names. Další chování můžeme ovlivnit pomocí souboru /etc/mail/access. Ve většině distribucí bude ještě ukázkový soubor access.sample. Formát souboru je jednoduchý. Na levé straně je uveden odesílatel, vpravo je pak typ přístupu (RELAY, OK, REJECT, ERROR:###). Je možno zapsat DNS jméno, IP adresu nebo jen část IP (192.168.1 projde vše začínající 192.168.1).

Jednotlivé druhy přístupu:

RELAY  – předávání pošty. Zde uvedený host může přes náš stroj předávat poštu dál. Zapište si zde  localhost.

REJECT  – od takového hosta odmítneme veškerou poštu

OK  – takový host může poslat poštu pouze pro náš stroj

Poslední možností je zápis spammer.com ERROR:"550 We do not accept mail from spammers". Pokud se pokusí přes nás spamovat host spammer.com, bude mu vrácena výše zapsané chybové hlášení. Starší zápis „550 text chyby“ už není doporučován používat.

Ještě poslední zmínka – pokud uvedeme zápis:

spammers.com             REJECT
server1.spammers.com     OK

Pokud se nám pokusí poslat e-mail server1.spammer­s.com, podaří se to. Vyhrává totiž přesnější zápis namísto obecnějšího. Z ostatních serverů (např. server2.spammer­s.com) bude pošta odmítána.

Dále je možné řešit odmítání zpráv i podle From: a To: z obálky e-mailu. Tím můžeme docílit jednosměrného zákazu, ale druhý směr zůstane povolený. První řádek zakazuje veškerou komunikaci s adresou nabidky@nejaky­obchod.cz, další dva už pak jen zakazují jen jeden směr.

nabidky@nejakyobchod.cz       REJECT
From:osklivy@spammer.net      REJECT
To:nekdo@firma.cz             REJECT

virtusertable – virtuální uživatelé

Pokud na serveru běží jen jedna doména, vše je jednoduché. Při více doménách to funguje následovně. Sendmail přijímá poštu pro všechny domény uvedené v local-host-names  a v tuto chvíli se nestará o část před zavináčem. To řeší až lokální doručovatel a toho zase nezajímá doména. Takže pokud máme domény firma.cz, jinafirma.cz a definovaného uživatele třeba obchod, nejsou to 2 fyzické mailboxy, ale jen jeden – obchod. Vše, co přijde na obchod@firma.cz nebo obchod@jinafir­ma.cz, skončí ve schránce obchod. To může být někdy vhodné, třeba když firma přikoupí další doménu. V některých případech ale vzniká problém, pokud chceme mít třeba adresy info@firma.cz a info@jinafirma.cz. K tomu využijeme soubor virtusertable.

V sample souboru uvidíte několik příkladů. Můžete směrovat do lokálních mailboxů nebo na jiné stroje. Systém je podobný jako v souboru aliases, ale tento umí pracovat i s doménovými jmény.

info@firma.cz            pm
info@jinafirma.cz        nekdojiny@jinde.cz
@tretifirma.cz           tretifirma@freemail.cz
@domenax.cz              $1@domenay.cz

První dva řádky jsou řešením výše popsaného problému s info@… Takto můžeme každé info poslat do jiného mailboxu (třeba 2 lokálních nebo na úplně jiné adresy). Třetí řádek je doménový koš, nerozlišujeme část před zavináčem, vše, co přijde pro cokoli@tretifir­ma.cz, pošleme na jeden mailbox. Poslední možnost se může také někdy hodit, co přijde na libovolného uživatele v doméně domenax.cz, bude posláno na stejné uživatelské jméno v doméně domenay.cz.

Tento soubor se vyhodnocuje ze shora dolů, takže přesnější zápisy patří nahoru. Například obchod@firma.cz a dole např. doménový koš. A nezapomeňte, že domény uvedené na levé straně musí být uvedeny také v souboru local-host-names.

Mailertable

Tento soubor už jsme si vysvětlili v jednom z předchozích dílů našeho seriálu o Sendmailu. Pomocí něj můžeme poštu předávat na další server. Sendmail např. provede odvirování a odspamování a předá ji na další poštovní server v lokální síti.

Genericstable

Vlastně opak virtusertable. Můžeme lokální odesílatele maskovat za jiné. Například když odesíláte přímo ze shellu, sendmail vám za zavináč doplní hostname, takže např. pm@mail.firma.cz. Vytvořte soubor genericstable:

pm        pm@firma.cz
jan       honza@jinadomena.cz

Databázové soubory

Od všech výše popsaných konfiguračních souborů je nutné vytvořit databázi, kterou používá sendmail. Program makemap, který použijeme, umí typy hash, btree a dbm. Budeme se držet hash, který je výchozí. FreeBSD má dobře připravený Makefile, takže stačí v adresáři /etc/mail pouze zadat make. Jinak spustit:

makemap hash genericstable.db < genericstable
makemap hash virtusertable.db < virtusertable
makemap hash mailertable.db < mailertable
makemap hash access.db < access

Zároveň ještě musí být pro tyto vlastnosti M4 makra v mc souboru:

FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
FEATURE(`genericstable',`hash -o /etc/mail/genericstable')

V dobře připravených mc souborech patrně budou. Pokud je ručně dopisujete, nezapomeňte potom v /etc/mail spustit:

make
make install
make restart

Pokud chcete použít jiný typ databází, musíte upravit M4 makra FEATURE, např. FEATURE(`mailer­table', `dbm /etc/mail/mai­lertable')

Ještě existuje makro define(`DATABA­SE_MAP_TYPE', `dbm'), ktere definuje výchozí typ. V případě použití potom u FEATURE maker typ zadávat nemusíte.

Maškaráda

Sendmail má i M4 makra pro maškarádu. Byla detailně rozebraná v článku Pošta pro každého (2). Jen ji zde pro úplnost zmíním. Maškaráda nám umožní změnit doménové jméno u odchozích e-mailů, podobně jako genericstable, ale pouze pro doménová jména. Pokud vám vadí, že sendmail posílá e-maily s adresami nekdo@mail.mo­jefirma.cz, maškarádou to napravíte.

root_podpora

dnl maskovat se jako mojefirma.cz
MASQUERADE_AS(`mojefirma.cz')dnl
dnl maskovat jména v doméně moje_firma.dialup.muj_provider.cz
MASQUERADE_DOMAIN(`moje_firma.dialup.muj_provider.cz')dnl

Tyto vlastnosti jsou pak volitelné:

dnl maskovat celou místní doménu
FEATURE(`masquerade_entire_domain')dnl
dnl maskovat i obálku zprávy
FEATURE(`masquerade_envelope')dnl
dnl maškaráda i pro lokální poštu
dnl (aby šla přes providera)
FEATURE(`allmasquerade')dnl

Zdaleka jsme nevyčerpali možnosti sendmailu, vybral jsem běžně používané věci. Další náměty očekávám v diskuzi.

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

Autor článku

Petr Macek studoval aplikovanou informatiku na Jihočeské univerzitě, pracuje jako síťový specialista ve firmě Kostax, s. r. o. Baví ho především FreeBSD, sítě a monitoring Cacti.