Sendmail

Josef Cacek, xcacek@fi.muni.cz


Obsah


Sendmail

Nejrozšířenějším Mail Transfer Agentem (MTA) v Internetu je bezesporu program sendmail. Je to velice variabilní program, poskytující bohaté možnosti konfigurace. Při doručování pošty dokáže vyvolávat i další programy, díky čemuž jej lze použít pro vytvoření poštovní brány do jiného přenosového systému (např. UUCP). Nejnovější verze je
Sendmail 8.11.1.

/etc/sendmail.cf

Program samotný lze najít v adresáři /usr/lib. Řídí se konfiguračním souborem /etc/sendmail.cf Známá moudrost prý říká "Pokud jste nikdy neupravovali sendmail.cf, nejste skutečný správce Linuxu. Jestlíže jste to dělali víc než jednou, jste blázen!" (Kniha Sendmail, která se zabývá pouze sendmailem má cca 800 stran.)

Jedná se o textový soubor, složený z jednotlivých příkazů, z nichž každý je na samostatné řádce. Prázdné řádky a řádky začínající # se ignorují. Většina akcí je definována prostřednictvím jedno- až dvoupísmenných zkratek.

Příkaz je definován prvním písmenem na řádku. Největší část souboru tvoří přepisovací pravidla, která zahajuje písmeno R. Tyto příkazy umožňují upravovat adresy a rozhodovat, co se má s dopisem stát. Mají formu:

R<Levá strana>TAB<Pravá strana>TAB<Komentář>

Pravidlo se použije, jen když adresa vyhovuje <Levé straně>, pak <Pravá strana> určuje co se má s dopisem udělat. Může např. pouze změnit adresu,ale může také ukončit zpracování dopisu a předat ho nějakému Maileru k odeslání. Mailery se definují příkazy M.

Klíčovou roli v konfiguraci hraje, kdy dojde k použití jednotlivých pravidel - k určení slouží rozdělení do sad. Každá sada je identifikována číslem a začíná příkazem Sčíslo. Končí buď začátkem další sady nebo koncem souboru. Sada je jakýmsi podprogramem, je-li použita na zpracovávanou adresu, začnou se aplikovat její jednotlivé příkazy (přepisovací pravidla). Každý se používá tak dlouho, dokud zpracovávaná adresa vyhovuje levé straně. Realizace pravé strany může způsobit vyvolání další sady pravidel, když obsahuje konstrukci $>číslo.

Celé zpracování dopisu začíná několika standardními sadami. Sendmail nejprve zpracovává cílovou adresu. Na ní se použije sada č. 3, která převede adresu do kanonického tvaru. Poté se uplatní sada 0, která má určit doručovatele dopisu (tato sada bývá měněna nejčastěji, protože stanoví kudy a kam dopis odejde).

Standardní sady pravidel pro sendmail:

Sada Určení
0    určení doručovatele
1    zpracování adresy odesilatele
2    zpracování adresy příjemce
3    kanonizace adresy
4    závěrečná úprava adresy
5    zpracování odesilatele v hlavičkách dopisu (jen IDA)
6    zpracování adresáta v hlavičkách dopisu (jen IDA)
Příklad přepisovacího pravidla sendmailu:
R$+@$D    $#ether$@netware.fi.muni.cz$:$1@netware.$D

IDA sendmail

IDA je rozšíření programu sendmail, usnadňující konfiguraci. Základním přínosem je zde rozložení informací do několika souborů s jednoduchou strukturou. Za tento "komfort" zaplatíme omezením možností, ale většinou případů vyřešíme bezproblémově.

Výchozí podoba konfiguračních souborů je textová, ta je kompilována do binární. Základem je soubor zpracovaný procesorem m4. Bývá pojmenován [počítač].m4. Obsahuje definice hodnt jednotlivých parametrů (proměnných), ovlivňujících činnost programu. Tento soubor se mění jen zřídka. Většina změn se týká dílčích souborů (tabulek). Žádné úpravy se neprovádí v souboru sendmail.cf.


Základní konfigurační soubor

Ačkoliv máme velký sortiment proměnných, které ovlivňují chování IDA sendmailu, hlavní konfigurační soubor bývá jednoduchý. Standardně se počítá s podporou lokální pošty a protokolů SMTP a UUCP (popř. DECNET)

První skupina proměnných slouží k identifikaci zdejšího počítače:
DEFAULT_HOST a DEFAULT_DOMAIN - uvádějí jméno a doménu počítače. V normálních případech se nedefinují program je schopen si příslušné informace najít sám.
PSEUDONYMS - uvádí další jména tohoto počítače např.:
  define(PSEUDONYMS,posta.fi.muni.cz mail.fi.muni.cz localhost)
ALTERNATENAMES - podobný proměnné PSEUDONYMS, ale jména zde uvedená nejsou jmény tohoto počítače, ale počítačů pro které se pošta ukládá na náš počítač
UUCPNAME - jméno zdejšího počítače pro UUCP poštu (když nepoužíváme, nemusíme definovat)

Další typ proměnných stanoví, kde budou uloženy jednotlivé konfigurační tabulky:
MAILERTABLE - Mailery pro jednotlivé adresy
PATHTABLE - Neobvyklé cesty
GENERICFROM - přepisování adres odesilatelů

Můžeme také využít možnosti obstarávat poštu pro doménu na jednom počítači (mail relay) pak se nám hodí tyto proměnné:
HIDDENDOMAIN - jméno domény pro kterou ve které chceme maskovat počítače HIDDENDOMAINHOST - udává jakým jménem má být nahrazen libovolný počítač domény, není-li definováno, pak se použije přímo hodnota HIDDENDOMAIN
HIDDENNET, HIDDENNETHOST - stejné jen ne pro celou doménu, ale pouze pro skupinu počítačů (uvedenou v HIDDENNET)
Ukrývané jméno by mělo být registrováno v DNS (minimálně by měl existovat MX záznam?

Další proměnné:
RELAY_HOST, RELAY_MAILER - adresa a příslušný Mailer, kam se posílá pošta se kterou si sendmail neporadí
ALIASES - jméno souboru, obsahující definici aliasů
POSTMASTERBOUNCE - adresa, na kterou se doručí kopie každého dopisu, jehož doručování skončilo chybou
LOADQUEUE - udává zatížení systému, při kterém sendmail přestává doručovat dopisy a místo toho je jen řadí do fronty (implicitně 11)
LOADAVEREJ - zatížení při kterém sendmail odmítá vnější pokusy o navázání spojení (implicitně 7)
FORCE_NAME - definuje se při používání DNS (normální stav), na hodnotě nezáleží.

Posledním příkazem souboru by vždy mělo být:
include(Sendmail.mc)
což zajistí vytvoření souboru sendmail.cf

Po zpracování konfiguračního souboru programem m4, dostaneme na std výstup sendmail.cf.


Konfigurační tabulky

Tyto tabulky (zvané DBM databáze) jsou základním kamenem IDA sendmailu. Jejich cílem je převod klíče na hodnotu. Mají jednotný tvar:
<hodnota> <klíč> [<klíč> ...]
Z textové podoby do binární jsou převáděny programem dbm.

Jména souborů jsou definována v hlavním konfiguračním souboru. Uvádějí se bez přípony např. /etc/mail/mailertable. Ve skutečnosti však v daném adresáři existují dva soubory s příponami .dir a .pag. Vytvoříme je pomocí příkazu:
dbm -d mailertable make mailertable.conf
Předpokládáme, že zdrojový text je v souboru mailertable.conf. Volba -d říká, která databáze se má vytvořit.

MAILERTABLE řídí zpracování pošty, určuje, kterým Mailerem a kam se předávají určité dopisy. Při implicitním chování IDA sendmailu, je-li pošta určena na tento počítač, předá se Maileru local. Pro ostatní adresy se použije Mailer TCP (dotaz na MX záznam a odeslání protokolem SMTP). Pomocí MAILERTABLE lze do tohoto mechanizmu přidávat rozšíření a vyjímky. Klíčem je v tomto souboru doménové jméno, hodnota je tvořena trojicí:
<Mailer><oddělovač><počítač>


<Mailer>  Funkce
 local    -uloží do schránky lokálního uživatele
 prog     -spustí program a dopis mu pošle na vstup
 TCP      -doručí protokolem SMTP
 UUCP     -doručí klasickým UUCP
 UUCP-A   -doručí protokolem UUCP, ale používá RFC822 adresy
 error    -ohlásí odesilateli dopisu chybu

<oddělovač> Význam ; - adresa beze změny ! - z adresy se odřízne doména (pro UUCP a local) : - z adresy se odřízne doména, jen pokud ve zbylé části zůstane nějaka doména

<počítač> specifikuje na který stroj má Mailer odeslat dopis.

PATHTABLE slouží pro ruční směrování pošty. Definuje cesty, kterými mají být dále dopravovány dopisy. Zpravidla se používá jen ve spojení s UUCP.

DOMAINTABLE převádí případné zkratky a přezdívky na doménová jména. Jestliže IDA sendmail dostane ke zpracování doménové jméno, podívá se nejprve do DOMAINTABLE a poté do DNS, zda se nejedná o přezdívku. Pokud ano, řídí se dál jen kanonickým jménem.

UUCPXTABLESlouží k převodu doménových jmen počítačů na jména protokolu UUCP.

GENERICFROM obsahuje pravidla pro přepisování adres odesilatelů v dopisech. Umožňuje zaměnění domény a jména uživatele za jména symbolická (např pnovak@anxur.fi.muni.cz za Pavel.Novak@muni.cz). Přezdívky (aliasy) fungují obousměrně, o převod na konkrétní adresu se stará soubor ALIASES. Údržba dvou soborů je práce navíc a tak IDA sendmail obsahuje i program xalparse, který umožňuje z jednoho datového souboru automaticky vyrobit oba zmiňované.


Aliasy

Standardní sendmail používá pro definici přezdívek soubor aliases (většinou v /etc), IDA zavádí rozšiřující soubor (zpravidla xaliases). Ten je předložen programu xalparse, který z něho vytvoří jednak klasický aliases, jednak tabulku GENERICFROM.

Soubor xaliases má tvar řádku:
<přezdívka>: <oddělovač><adresa>
Na obou stranách mohou stát seznamy, oddělené čárkami

<oddělovač> Význam
  >         - dopis směrovaný na <přezdívku> poslat na <adresu>;
              (vytvoří položku v aliases)
  <         - adresu v hlavičce From nahradit <přezdívkou>;
              (vytvoří položku v GENERICFROM)
  <>        - oboje
 chybí      - jako >
Na vytvořený soubor xaliases je třeba použít program xalparse:
xalparse xaliases aliases genericfrom
Aby se sendmail začal řídit novým /etc/aliases je potřeba spustit newaliases.