**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
> .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