Hlavní navigace

Sendmail: pošťák, který nekouše

29. 9. 2008
Doba čtení: 4 minuty

Sdílet

Sendmail? Proboha proč něco takového? Oživování mrtvoly. Díra do linuxu na 8: sendmail. Jeho konfigurace - jízdní řád čínských drah, výbuch v továrně na interpunkční znaménka... Ale je o něm i spousta mýtů a předsudků, proto vzniká tenhle nový seriál. V dnešním dílu si povíme něco o jeho vzniku a vývoji.

Trocha historie

Možná to někoho překvapí, ale sendmail je starší než někteří čtenáři roota. Erric Allman napsal v roce 1979 program delivermail, který řešil směrování e-mailů mezi třemi v té době používanými sítěmi – ARPAnet, UUCP a BerkNet. Žádné TCP/IP ani SMTP. V té době ale ARPAnet přecházel právě na rodinu protokolů TCP/IP a začal se pro doručování pošty používat protokol SMTP. Delivermail byl ale těžko konfigurovatelný, síť se změnila a proto vzniká v roce 1980 sendmail. V roce 1983 se stává součástí systému 4.0 BSD. Sendmail i dále podporuje ostatní sítě, dále se vyvíjí. Momentálně máme verzi 8.14.3, od verze 8.10 podporuje IPv6 a dnes běžně používané standardy – smtp autorizace, blacklisty, filtry (v sendmailu nazývané milter). Dnes existují i další MTA, například postfix, exim,… Každý má svá specifika. Hodně lidí nezkusí sendmail kvůli různým mýtům a pověrám o něm.

Mýty a pověry

Nepochopitelná a šílená konfigurace. V diskuzi pod naším dříve vydaným článkem někdo označil obsah souboru sendmail.cf jako „pornofilm v ascii“ nebo „abstraktní ascii art“. Obsah tak opravdu může vypadat:

# strip group: syntax (not inside angle brackets!) and trailing semicolon
R$*                     $: $1 <@>                       mark addresses
R$* < $* > $* <@>       $: $1 < $2 > $3                 unmark <addr>
R@ $* <@>               $: @ $1                         unmark @host:...
R$* [ IPv6 : $+ ] <@>   $: $1 [ IPv6 : $2 ]             unmark IPv6 addr
R$* :: $* <@>           $: $1 :: $2                     unmark node::addr
R:include: $* <@>       $: :include: $1                 unmark :include:...
R$* : $* [ $* ]         $: $1 : $2 [ $3 ] <@>           remark if leading colon
R$* : $* <@>            $: $2                           strip colon if marked
R$* <@>                 $: $1                           unmark
R$* ;                      $1                           strip trailing semi

Uznávám, že vypadá dost divně v porovnání třeba s konfigurací postfixu, kde je vše pěkně okomentované. Při troše snahy se v sendmail.cf  i zorientujete. Teď možná někoho překvapím, ale pro běžné fungování sendmailu nemusíte do tohoto souboru vůbec sáhnout. To uděláte jen v případě, že chcete dosáhnout nějakého atypického chování sendmailu. Stalo se mi to za dobu používání sendmailu asi jen 2×. Sendmail pro 99,9 % úkonů budeme konfigurovat jinak a mnohem jednodušeji. V konfiguraci je i výhoda sendmailu – zásahem do cf souboru si můžeme jeho chování upravit dle svých přání. Jiné MTA takovou volnost asi nenabídnou.

Více s o tomto zmíníme příště. Teď jen ukázka, jak vypadá čitelná konfigurace, se kterou se budeme setkávat my:

dnl Uncomment to activate Realtime Blackhole List
dnl information available at http://www.mail-abuse.com/
dnl NOTE: This is a subscription service as of July 31, 2001
dnl FEATURE(dnsbl)
dnl Alternatively, you can provide your own server and rejection message:
dnl FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')

dnl Dialup users should uncomment and define this appropriately
dnl define(`SMART_HOST', `your.isp.mail.server')

Sendmail je děravý

Věc, kterou si musíme uvědomit, je stáří a doba vzniku sendmailu. Jsou to už vlastně desítky let. V té době se neřešila bezpečnost tak jako dnes, neexistoval spam, viry šířené e-mailem, přes MTA neprocházely miliony zpráv denně,… Sendmail byl děravý, stejně tak jako spousta dalšího software. Ta doba už je ale dávno pryč. V poznámkách k vydání se můžete přesvědčit, že vývoj jde dál. Nakonec je zajímavé, že program navržený před 30 lety je dodnes hojně používán a slouží dobře.

Dále je sendmailu vytýkáno, že je to jeden velký program, starající se o všechno. To jde proti filozofii unix systémů – program má být malý, dělat jednu činnost a dělat ji dobře. Tak na to jde třeba postfix – spousta malých prográmků, každý se stará o jednu věc, můžete jednotlivé chrootovat. Sendmail je moloch, ale svou činnost dělá dobře. Nepřijde mi jako rozumné ho nepoužívat jen kvůli tomu, že je „velký“.

Výhody

Některé výhody jsem zmínil už výše. Jako další bych uvedl jeho rozšířenost. Na mnoha unix systémech (třeba FreeBSD) je to výchozí MTA. Nemusím tedy nic dalšího instalovat. Dle mého další výhoda sendmailu je v jeho log souborech. Nenašel jsem žádné jiné MTA, které tak pěkně loguje události a průběh mailu. Ale tento můj subjektivní dojem mi můžete třeba v diskuzi vyvrátit.

CS24 tip temata

Možná máte dojem, že jsem nějaký fanatický zastánce sendmailu. Nejsem. Používám sendmail asi 5 let. Dále používám postfix, hrál jsem si s qmailem. Každé MTA má něco do sebe. V tomhle miniseriálu chceme ukázat:

  • základní konfiguraci, zabezpečení
  • antivir (clamav), antispam (spamassassin), blacklisty
  • uživatele, aliasy, přesměrování
  • smtp autorizace, smart host

Kde se objeví sendmail, bývá i vášnivá diskuse. Doufám, že bude přínosná a objeví se i nějaké tipy od čtenářů.

Autor článku

Petr Macek studoval aplikovanou informatiku na Jihočeské univerzitě, pracuje jako síťový specialista ve firmě Kostax, s. r. o. Baví ho především FreeBSD, sítě a monitoring Cacti.