Автор: Томас Рьослер, roessler@guug.de
Превод: Никола Колев nikky[at]minus273[dot]org

версия 0.0, 6 май 1998

Този документ описва накратко как да се променят конфигурационните
файлове на sendmail за употреба от домашни потребители с dial-up.

​1. Въведение

Приемаме, че имате такъв Интернет достъп, който е най-разпространен
в университетите и при онлайн услугите в наши дни - набирате телефона
на провайдъра си и влизате в мрежата му чрез PPP върху серийна връзка.
Входящата ви поща се събира на POP или IMAP сървъра на провайдъра,
а изходящата се изпраща чрез SMTP. Нямате собствено име на домейн, така че
за всичко това трябва да използвате един единствен e-mail адрес.

Приемаме, че вече сте инсталирали достатъчно нова версия на sendmail-а
на Ерик Олмън (текущата версия е 8.8.8 по време на написването на
документа (и 8.9.3 по време на превода, б.пр.) и работи чудесно).

В този документ отчасти става дума за специфични характеристики на
системи с Debian GNU/Linux; потребители с други дистрибуции ще трябва
да внимават.

Уверете се, че имате следната информация под ръка:

  • Пощенският сървър на вашия доставчик

  • Вашият интернет пощенски адрес

Конфигурацията, която планираме, има две основни цели:

​1. Трябва да бъде възможен обменът на поща между отделните потребители.

​2. Външният свят трябва да вижда пощенските адреси на потребителите
на пощенския сървър на доставчика ви, а не локалните.

За да постигнем това, ще се възползваме от опцията на sendmail
‘genericstable’.

​2. Разположение на файловете

Ще сложим всички конфигурационни файлове на sendmail в отделна директория
под /etc: /etc/mail. Обикновено sendmail очаква тези файлове да са точно
под /etc. За да избегнем проблемите, /etc/sendmail.cf ще бъде символична
връзка към /etc/mail/sendmail.cf.

Следните файлове ще се намират в /etc/mail/:

· =20

· aliases - съдържа допълнителни локални адреси

· genericsdomain - съдържа информация за конфигурацията на вашия
localhost.

· genericstable - съдържа същинските правила за пренаписване на адресите.

· sendmail.cf - конфигурационния файл на sendmail

· sendmail.mc - изходният код на sendmail.cf.

Някои от тези файлове ще бъдат придружавани от .db файлове. Те съдържат
hash-нати бази данни за пряка употреба от sendmail.

Приемаме, че cf частта от дървото с изходния код на sendmail се намира
в директорията /var/lib/sendmail.cf, както е при системите с Debian
GNU/Linux. Другите дистрибуции ще поставят тези неща на различно място.
За подробности се обърнете към документацията, съпътстваща вашата
дистрибуция.

​3. Конфигуриране на sendmail

3.1. Главният конфигурационен файл

Sendmail използва изключително сложна система от правила за конфигурирането
си. И докато с него можете да правите доста хитри неща, писането на
sendmail.cf от начало е твърде необичайно и отнема много време. Ако наистина
смятате да направите последното, спрете да четете този документ и вместо
него си намерете книгата “Bat Book” на O’Reilly.

Вместо да изработваме тези правила на ръка, ще се осланяме на макро
процесора m4 за сглобяването на нашия конфигурационен файл от готови
материали, които се разпространяват заедно със sendmail.

Нека погледнем първите няколко реда на файла sendmail.mc:

______________________________________________________________________
include(/usr/lib/sendmail.cf/m4/cf.m4)
VERSIONID(`sendmail.mc - roessler@guug.de’)
OSTYPE(debian)
define(`ALIAS_FILE’,`/etc/mail/aliases’)

______________________________________________________________________

В началото е включен cf.m4. Този m4 макро файл съдържа множество макро
дефиниции за останалата част от файла. Уверете се, че пътят, който се
указва тук, е правилен - представеният тук е типичен за системите Debian
GNU/Linux. Макросът OSTYPE се използва за установяването на някои полезни
стойности по подразбиране на определени конфигурационни променливи. Ако не
използвате Debian, трябва да замените думата “debian” с “linux”.
ALIAS_FILE указва на sendmail къде да търси файла с псевдонимите.

Следващите редове казват на sendmail да използва опцията genericstable, и
къде може да намери конфигурационните файлове, необходими за употребата й:

______________________________________________________________________
FEATURE(masquerade_envelope) FEATURE(genericstable, `hash
-o /etc/mail/genericstable’)
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain’)

______________________________________________________________________

Опцията masquerade_envelope казва на sendmail-a да пренаписва адреса
на изпращача в хедъра на съобщенията. Това е пощенският адрес, на който
външните подсистеми за доставка на пощата ще изпращат своите доклади
при провал на доставката и предупредителните съобщения. Файловете
generics* ще бъдат обяснени по-долу.

А сега трябва да дефинираме т.нар. “smart host”, т.е. машината, която
ще се грижи за изходящата поща от вашата система. Имайте предвид, че
тази машина може да е различна от POP и IMAP сървърите на вашия Интернет
доставчик. Ако не сте сигурни, обадете се на техничесата поддръжка.
Това е съответният код в главния конфигурационен файл:

______________________________________________________________________
define(`SMART_HOST’,`изходяща.поща.на.вашия.провайдър’)

______________________________________________________________________

Тук `изходяща.поща.на.вашия.провайдър’ трябва да бъде заменено с напълно
определеното (FQDN) име на сървъра за изходяща поща на вашия провайдър.

Последните два реда включват дефинициите “mailer”, от които sendmail се
нуждае, за да разбере как да обработва различните видове поща.

______________________________________________________________________
MAILER(local)
MAILER(smtp)

______________________________________________________________________

За да генерирате файла sendmail.cf от този sendmail.mc, напишете следните
команди (трябва да сте root):

______________________________________________________________________
# m4 sendmail.mc > _sendmail.cf
# mv -f _sendmail.cf sendmail.cf

______________________________________________________________________

Обърнете внимание на техниката на записване на изходния код на m4 във
временен файл, който след това се мести на точното място. Това се прави,
за да не би sendmail да прочете частично записани конфигурационни файлове.

3.2. Пренаписване на адресите

Първото нещо, което трябва да кажем на sendmail е кои адреси трябва да се
смятат за локални (и следователно хедърите им ще се пренаписват). Това
е съвсем лесно: просто запишете напълно определеното име на вашата машина
във файла /etc/mail/genericsdomain. За да разберете какво е напълно
определеното име на вашата машина, напишете следното:

______________________________________________________________________
$ hostname -f

______________________________________________________________________

А сега стигаме до реда, по който ще се прави пренаписването:
/etc/mail/genericstable. Този файл се състои от две разделени с паузи
колони. Първата съдържа локалният адрес, а втората e-mail-ът, който
трябва да бъде използван вместо него. Той може да изглежда например така:

______________________________________________________________________
harry harryx@your.isp
maude maudey@her.isp
root fredx@your.isp
news fredx@your.isp

______________________________________________________________________

Обърнете внимание, че за всеки акаунт на локалната машина трябва да има
по един запис, така че автоматично генерираната поща, която се измъкне
от локалната система да носи вярна информация в хедъра.

Поради причини, свързани с производителността sendmail няма да използва
този текстов файл директно, а вместо това ще се осланя на “хешната”
(от hash) версия.

______________________________________________________________________
# makemap -r hash genericstable.db < genericstable

______________________________________________________________________

Обърнете внимание, че правилата за пренаписване от genericstable няма
да се прилагат върху локалната поща или върху съобщенията, които
получавате отвън - така съставеният план се използва само когато някое
съобщение напусне вашата локална система на път за “smart host”-a на
вашия провайдър.

3.3. Псевдоними

Файлът aliases съдържа допълнителни локални имена, които са валидни само
за местни съобщения. Това е полезно за административни акаунти като този
на root, който получава автоматично генерирани съобщения от вашата
система.

Един добър старт за /etc/mail/aliases може да изглежда така:

______________________________________________________________________
root: fred
news: root
postmaster: root
mail: root
www: root

nobody: /dev/null
MAILER-DAEMON: nobody

______________________________________________________________________

Този пример ще пренасочва локалната поща за потребителите root, news,
postmaster, mail, и www към fred, докато съобщенията за nobody и MAILER-
DAEMON ще бъдат пренасочвани към /dev/null.

Също както и genericstable, aliases може да съдържа множество записи.
И отново за sendmail би било неефективно да използва текстовия файл,
който току-що описахме. За aliases се използва същият механизъм, както и
за genericstable: генерира се “хешната” база данни. Този път, вместо
да използвате makemap директно, можете да въведете командата newaliases.
Тя автоматично ще направи всичко необходимо за “хешването”.

​4. Допълнителна литература

Дистрибуцията на изходния код на sendmail включва доста документация.
Прочетете я, особено файла cf/README.

Ако имате желание да се гмурнете по-дълбоко в конфигурационните опции
на sendmail, значи ви трябва книгата “Bat Book” от O’Reilly:
Bryan Costales, Eric Allman, and Neil Rickert: “sendmail”. O’Reilly, 1993.