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.