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.spammers.com, podaří se to. Vyhrává totiž přesnější zápis namísto obecnějšího. Z ostatních serverů (např. server2.spammers.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@nejakyobchod.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@jinafirma.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@tretifirma.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(`mailertable', `dbm /etc/mail/mailertable')
Ještě existuje makro define(`DATABASE_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.mojefirma.cz, maškarádou to napravíte.
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.