Sendmail v.8.9.3

Pro správnou konfiguraci je potřeba si přeložit vlastní konfigurační soubor sendmail.cf. Není to nic složitého, jen je potřeba do systému doinstalovat balík sendmail-cf-8.9.3-xx.i386.rpm, ve kterém jsou zdrojové texty konfigurace. Nejprve však základní nastavení:

/etc/mail/access - ve starších verzích sendmailu existoval ještě soubor /etc/mail/relay-domains. Nyní je vše přestěhováno do tohoto souboru. Takže nejprve je potřeba zde vyjmenovat všechny domény, pro které náš server zpracovává poštu, a uvést u nich akci „RELAY“. Musí zde být uvedena i položka localhost. Toto je ten správný soubor pro editaci, pokud se nám vrací maily s hlášením „we do-not relay“. V další části mohou být vyjmenovány domény nebo e-mailové adresy, ke kterým máme výhrady (spammeři). Zde je ve sloupečku akce text, který dotyčnému vrátíme.

například:

localhost RELAY
194.213.243.1 RELAY
mikros RELAY
mikros.mikroservis.cz RELAY
mikroservis.cz RELAY
kozakov.cz RELAY
linux.mikroservis.cz RELAY

juno.com „571 Sorry, too much spam is your domain“
'Art@hotmail.com „571 Go Home, Spammer !!“
bsmith@aol.com „571 Sorry, too much spam is your address“
LVLOVE@aol.com „571 No more spam !“
scottgreen132@hotmail.com „571 No more spam !“
nppi.edu.tw „571 Sorry, too much spam is your domain“


/etc/sendmail.cw - do tohohle souboru zapsat všechny domény, pro které náš server přijímá poštu. Úmyslně zdůrazňuji slovo přijímá, protože zde naopak nesmí být uvedeny domény, pro které je pošta MX-záznamy v DNS směrovaná dále (na zákazníkův počítač).

/etc/mail/aliases - zde se ke každému poštovnímu jménu může přiřadit poštovní přezdívka. Nebo se v tomto souboru dá přesměrovat pošta na jinou adresu. Možností využití je několik:

hromadné adresy:

zakaznici: :include:/etc/mail/vsichni.list
web: :include:/etc/mail/webmasters.list

pomocí tohoto zápisu je možné zasláním jednoho mailu na adresu web@domena.cz informovat všechny webmastery. Jejich emailove adresy jsou vyjmenovány v souboru /etc/mail/webmasters.list a jsou odděleny čárkami.

poštovní přezdívky:

martin: smartin
Martin.Patka: smartin
Patka.Martin: smartin

Tímto způsobem je možný si zajistit příjem pošty i na více ve skutečnosti neexistujících adres.

přesměrování pošty:

nehoda: +420603000000@sms.paegas.cz
nekdo: nekam@krakonos.cz
martin.pager: +420603000000@sms.paegas.cz
karel.pager: +420603000000@sms.paegas.cz

Takto je možno směrovat poštu i pro neexistující poštovní boxy (existující se dají směrovat souborem .forward v domovském adresáři)

vlastní poštovní server zákazníka:

Pokud má zákazník vlastní poštovní server (třeba Win Proxy) nebo alespoň používá nabídku „Pomocník pro doručenou poštu“ v MS Outlook Express může přijímat více poštovních adres do jednoho mail-boxu.

vyvoj.firma: firma
expedice.firma: firma
reditel.firma: firma
ucetni.firma: firma

Pokud běží na serveru více domén, pro které sendmail přijímá poštu, tak se již konkrétní doména nerozlišuje. Sendmail prostě poštu přijme bez ohledu na jméno, které je před @, a doménové jméno, které je za @ zase vyhodnocuje jen podle souboru /etc/sendmail.cw. Konečné doručení pošty zajišťuje procmail, a tomu je zase doménové jméno naprosto lhostejné. V konečném důsledku to znamená, že každý uživatel, který má na serveru mail-box, může přijímat poštu s jakýmkoliv doménovým jménem, pro které sendmail poštu přijímá. Pokud například na serveru běží doména mikroservis.cz a semily.cz, tak s uživatelským jménem smartin používat adresy jak smartin@mikroservis.cz, tak i smartin@semily.cz . To může být v některých případech na závadu, například při výskytu požadavku na stejné jméno v různých doménách (nejtypičtější jsou adresy typu info@ , webmaster@ apod.). Zde musí přijít ke slovu další konfigurační soubor, a to:


/etc/mail/virtusertable - směrování pošty celých domén do jednoho mail-boxu. Jde ale i některé adesy vyjmout a směrovat do jiného mail-boxu nebo dokonce i na jinou adresu. Vyhodnocování se děje shora dolů, takže ty selektivní adresy musí být jako první, a na konci teprve „zbytek“ (viz první tři řádky). Na čtvrtém a pátém řádku jsou tzv. sběrné koše pro doménovou poštu, kdy adresa cokoliv@kozakov.cz příjde do mailboxu „charlie“. Na posledních dvou řádcích je naznačeno řešení popsané v minulém odstavci (shoda jmen s různou doménou).

vedeni@tofa.cz tofa@mbox.vol.cz
info@tofa.cz tofa@mbox.vol.cz
@tofa.cz tofa@mikroservis.cz
@kozakov.cz charlie@mikroservis.cz
@semily.cz semily@mikroservis.cz
info@mikroservis.cz smartin@mikroservis.cz
info@proaktiv.cz proaktiv@mikroservis.cz

Výše popsaný problém s vícenásobnými doménovými adresami mně až zase tak moc netrápí, i když na našem serveru běží již více než 100 domén - co zákazník neví, to nepoužije. Pokud by to však na závadu bylo, nenapadá mně jiné řešení, než v souboru /etc/mail/virtusertable vyjmenovat postupně všechny zákazníky pro danou doménu a na konci udělat „sběrný koš“, směrovaný třeba na blackhole (/dev/null). A to zopakovat pro všechny domény, které nepoužívají samostatný sběrný koš. Ovšem tohle by ve větším měřítku ručně udržovat nešlo.

/etc/mail/domaintable - směrování pošty pro celou doménu na jiný počítač.

Například:

ontex.cz ontex.mikroservis.cz
dianag.cz diana.mikroservis.cz

domény ontex.cz a dianag.cz běží jako virtuální WWW na našem serveru, avšak tyto firmy mají pevnou linku a svůj gateway do sítě. Tento gateway (linux + masquerade) slouží i jako mail-server. Takže se pošta přesměruje na jejich počítač (ontex.mikroservis.cz nebo diana.mikroservis.cz). Tato kombinace je volena ze dvou důvodů - buď má zákazník relativně pomalou pevnou linku (jen 33.6k) nebo má na pevné lince měřený objem dat. V obou případech je tedy vhodnější, aby WWW-stránky (a tedy i domény) běžely na našem serveru a pošta byla takto směrována. Pokud je však přístup k DNS těchto domén, je však toto jednodušší vyřešit změnou MX-záznamů.

/etc/mail/mailertable - tento soubor se využije například v případě, kde vedle linuxového serveru, který dělá bránu do Internetu, běží ve vnitřní síti (192.168..) třeba Novell, nebo Lotus, a veškerá pošta se vyřizuje na těchto vnitřních serverech. Protože tyto servery nemají platnou IP-adresu, nelze na ně poštu směrovat pomocí MX-záznamů v DNS.

estrela.cz smtp:lnotes

kde jméno počítače „lnotes“ musí být definováno v souboru /etc/hosts. Na oddělení položek se zde MUSÍ použít tabelátor !, nikoliv mezery.

/etc/mail/genericstable - slouží k přepisování hlaviček pro odchozí poštu pro virtuální domény. Normálně sendmail do odchozí pošty zadává jméno mail-serveru, což se někomu nemusí líbit.

pavel pavel@efg.cz

Takže uživatel pavel bude mít v odchozí hlavičce mailu změněnou adresu na pavel@efg.cz , i kdyz poštovní server je mikros.mikroservis.cz. Využití je dle mého názoru celkem minimální. Položky musí být odděleny tabelátorem!


Všechny vyjmenované soubory musí projít konverzí do .db - tvaru. Převod z textového tvaru do tvaru .db probíhá u souboru /etc/mail/aliases zadáním příkazu newaliases, u ostatních se musí zadat „makemap hash soubor < soubor“. Protože však všechny soubory (mimo /etc/mail/aliases) načítá sendmail pouze v okamžiku spuštění, a startovací script /etc/rc.d/init.d/sendmail již obsahuje příkazy pro tento převod, stačí po každé změně jen restartovat sendmail a nějaké převody nás nemusejí zajímat. Pouze v případě použití genericstable je potřeba startovací script poupravit a genericstable do něj doplnit. Patřičný řádek pak vypadá takto:

 for i in virtusertable access domaintable mailertable genericstable; do\\


Nyní nastal čas přikročit k vlastní konfiguraci sendmailu. Ta se provádí v souboru /etc/sendmail.mc. Zřejmě nejdůležitější změnou je zákaz příjmu pošty z domén, které nejdou zpětně resolvovat. To se zajistí smazáním nebo zakomentováním řádku (pro komentář se zde používá sekvence „dnl“)

dnl FEATURE(`accept_unresolvable_domains')

Dále zde nejsou implicitně vyhodnocovány genericstable a domaintable. Pro jejich použití stačí doplnit:

FEATURE(`genericstable',`hash -o /etc/mail/genericstable')
FEATURE(`domaintable',`hash -o /etc/mail/domaintable')

a následující řádky zajistí mírné restrikce - maximální velikost jednoho mailu může být 2000000 bytů, ale pozor - tato hodnota je už po transportním překódování (MIME…), takže vstupní velikost mailu je někde okolo 1.7MB. A druhý řádek omezí maximální počet adresátů jednoho e-mailu na 10.

define(`confMAX_MESSAGE_SIZE',`2000000')
define(`confMAX_RCPTS_PER_MESSAGE',`10')

Dále je z hlediska nežádoucího relayingu vhodné povolit volbu „relay_based_on_MX“, ale někde jsem zahlédl upozornění, že v některých případech to může přinést problémy u „překládaných“ adres typu jméno%domena.cz@jina.domena.cz . V takovém případě je prý vhodná ještě volba „loose_relay_check“. Hlouběji jsem po tom nepátral, a ten druhý řádek jsem raději doplnil:

FEATURE(`relay_based_on_MX') FEATURE(`loose_relay_check')

Je možné využívat i některou z „černých listin spammerů“, například RBL ( http://maps.vix.com/rbl/ ). To se zajistí volbou:

FEATURE(`rbl')

Po všech těchto úpravách je nutno soubor sendmail.mc přeložit do sendmail.cf. Nejprve však původní sendmail.cf někam zazálohujeme! Překlad je jednoduchý a je i v souboru sendmail.mc uveden:

m4 /etc/sendmail.mc > /etc/sendmail.cf

Nyní se spustí/restartuje sendmail a může se začít testovat.

Základní kontrola na otevřený relaying se provede telnetem:

[root@mikros /etc]# telnet mail.mikroservis.cz 25 Trying 194.213.243.1… Connected to mikros.mikroservis.cz. Escape character is '^]'. 220 mikros.mikroservis.cz ESMTP Sendmail 8.9.3/8.9.3; Fri, 4 Aug 2000 05:02:16 +0200 MAIL FROM: nekdo@nekde.cz 501 nekdo@nekde.cz… Sender domain must exist

na pokus zadat neexistující doménu odesilatele (@nekde.cz) je při zakázané volbě „accept_unresolvable_domains“ jediná odpověd - „Sender domain must exist“

Další testování je již potřeba provést někde z jiného počítače. Je možné se dohodnout se správcem jiného serveru o založení uživatelského konta, nebo nedávno začal nabízet shell-account server www.egarden.cz . Po přihlášení pomocí SSH se provede další test:

[1 smartin@penguin smartin]$ telnet mail.mikroservis.cz 25 Trying 194.213.243.1… Connected to mikros.mikroservis.cz. Escape character is '^]'. 220 mikros.mikroservis.cz ESMTP Sendmail 8.9.3/8.9.3; Fri, 4 Aug 2000 05:08:36 +0200 MAIL FROM: smartin@mikroservis.cz 250 smartin@mikroservis.cz… Sender ok RCPT TO: smartin@penguin.cz 550 smartin@penguin.cz… Relaying denied

Pokud z cizího počítače chceme poslat mail přes náš mail-server na cizí adresu, pak jediná odpověd musí být „Relaying denied“

Kontrola funkčnosti RBL se provede dle návodu za stránky http://maps.vix.com/rbl/usage.html#DNSuse

[root@mikros RPMS]# sendmail -bt -C /etc/sendmail.cf ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address>

.D{client_addr}127.0.0.1
Basic_check_relay <>

rewrite: ruleset 190 input: < > rewrite: ruleset 190 returns: OK

.D{client_addr}127.0.0.2
Basic_check_relay <>

rewrite: ruleset 190 input: < > rewrite: ruleset 190 returns: $# error $@ 5 . 7 . 1 $: „Mail from “ 127 . 0 . 0 . 2 „ refused by blackhole site rbl.maps.vix.com“

kde ukázková adresa 127.0.0.1 není zařazena do blacklistu, adresa 127.0.0.2 zařazena je.

V konferenci jsem narazil ještě na jednu zajímavou věc (ještě jsem to nepotřeboval, ale mohlo by se to někdy hodit - a kdo to má potom hledat). Sendmail totiž implicitně resolvuje jména přes DNS. To může být někdy na obtíž - třeba u gatewaye (lokální síť za masqueradou s vytáčenou linkou). Takže tímto způsobem lze sendmail přesvědčit, aby nejprve používal soubor /etc/hosts (který stejně udržujeme aktuální, že.) a teprve v případě, že neuspěje, tak použije DNS.

Založit soubor /etc/services.switch a do něj zapsat:

hosts files

a do souboru /etc/sendmail.cf přidat řádek:

O ServiceSwitchFile=/etc/services.switch