Този документ описва накратко как да се променят конфигурационните
файлове на sendmail за употреба от домашни потребители с dial-up.
1. Въведение
Приемаме, че имате такъв Интернет достъп, който е най-разпространен
в университетите и при онлайн услугите в наши дни - набирате телефона
на провайдъра си и влизате в мрежата му чрез PPP върху серийна връзка.
Входящата ви поща се събира на POP или IMAP сървъра на провайдъра,
а изходящата се изпраща чрез SMTP. Нямате собствено име на домейн, така че
за всичко това трябва да използвате един единствен e-mail адрес.
Приемаме, че вече сте инсталирали достатъчно нова версия на sendmail-а
на Ерик Олмън (текущата версия е 8.8.8 по време на написването на
документа (и 8.9.3 по време на превода, б.пр.) и работи чудесно).
В този документ отчасти става дума за специфични характеристики на
системи с Debian GNU/Linux; потребители с други дистрибуции ще трябва
да внимават.
Уверете се, че имате следната информация под ръка:
- Пощенският сървър на вашия доставчик
- Вашият интернет пощенски адрес
Конфигурацията, която планираме, има две основни цели:
- Трябва да бъде възможен обменът на поща между отделните потребители.
- Външният свят трябва да вижда пощенските адреси на потребителите
на пощенския сървър на доставчика ви, а не локалните.
За да постигнем това, ще се възползваме от опцията на sendmail
'genericstable'.
2. Разположение на файловете
Ще сложим всички конфигурационни файлове на sendmail в отделна директория
под /etc: /etc/mail. Обикновено sendmail очаква тези файлове да са точно
под /etc. За да избегнем проблемите, /etc/sendmail.cf ще бъде символична
връзка към /etc/mail/sendmail.cf.
Следните файлове ще се намират в /etc/mail/:
- 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 - [email protected]')
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 [email protected]
maude [email protected]
root [email protected]
news [email protected]
Обърнете внимание, че за всеки акаунт на локалната машина трябва да има
по един запис, така че автоматично генерираната поща, която се измъкне
от локалната система да носи вярна информация в хедъра.
Поради причини, свързани с производителността 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.
Край
Забележка: Много е важно да проверите къде точно се намира cf.m4 файла за вашата дистрибуция, както и да попитате
коя точно машина да ползвате за SMART_HOST - не се срамувайте да попитате Вашият ISP (доставчик на Интернет) за това, защото много често
ще се окаже, че това не е машината, която сте си мислили, че е, както и много често това няма да е машината, която ползвате за POP3 или IMAP сървър.
Ето по-долу една примерна конфигурация на sendmail.mc, която работи при мен върху Red Hat Linux и с моят доставчик Infoserve Omega - Пловдив:
include(/usr/lib/sendmail-cf/m4/cf.m4)
VERSIONID(`sendmail.mc - [email protected]')
OSTYPE(linux)
define(`ALIAS_FILE',`/etc/sendmail.ppp/aliases')
FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/sendmail.ppp/genericstable')
GENERICS_DOMAIN_FILE(`/etc/sendmail.ppp/genericsdomain')
define(`SMART_HOST',`server.plov.omega.bg')
MAILER(local)
MAILER(smtp)
Както може би забелязвате в директивата include e оказан малко по-различен път от примера с Debian, освен това аз разполагам
файловете в директория /etc/sendmail.ppp, а не в /etc/mail, защото последната на моята машина съществува и се използва за други цели.
Йовко Ламбрев