Sendmail

Původní článek:
http://linux.mikroservis.cz/sendmail.html
 

Sendmail

 

 

Ne, že bych byl odborníkem na sendmail, ale pár věcí jsem se už naučil.

V okamžiku, kdy aktualizuji tyto stránky již sice existuje sendmail 8.11.0, ale od jeho zkoušení mně zatím odrazuje údaj „beta“. Takže následující se týká verze 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:

pruser:       +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 WinProxy…) nebo alespoň používá nabídku „Pomocník pro doručenou poštu“ v M$ OutlookExpress 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


Tato stránka byla aktualizována 27.11.2000

 

 

 

Sendmail