Mini-HOWTO по преобразованию адресов в sendmail

Thomas Roessler

     [email protected]
   

Перевод: Станислав Рогин, SWSoft Pte Ltd.

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

Этот документ вкратце описывает, как настроить конфигурацию sendmail для пользователей, использующих доступ dial-up (по телефонной линии).


1. Авторские права

Авторские права на русский перевод этого текста принадлежат © 2000 SWSoft Pte Ltd. Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: , или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу


2. Введение

Мы предполагаем, что у вас один из наиболее распространенных в университетах и он-лайн сервисах доступ к интернету: вы дозваниваетесь по телефону к вашему провайдеру, используя PPP на последовательном порту через модем. Ваша входящая почта складывается на сервере POP или IMAP провайдера, а отправляемая почта отсылается через SMTP. У вас нет собственного домена, поэтому используется один общий электронный адрес.

Мы также предполагаем, что у вас установлена достаточно новая версия программы sendmail, написанной Eric Allman (версия 8.8.8 является текущей, на момент написания документа, и должна работать хорошо).

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

Убедитесь, что у вас под рукой находится следующая информация:

  • Адрес почтового сервера вашего провайдера

  • Ваш почтовый адрес в Internet

Файл настройки, который мы планируем сделать, ставит перед собой две главные цели:

  1. Должна работать пересылка почты между двумя любыми локальными пользователями.

  2. Внешний мир должен видеть почтовые адреса локальных пользователей, заданные провайдером, а не локальной системой.

Чтобы этого достичь, воспользуемся функцией genericstable.


3. Расположение файлов

Мы поместим все файлы конфигурации sendmail-а в отдельный подкаталог каталога /etc: /etc/mail. Обычно, sendmail использует файлы, находящиеся в /etc. Для того, чтобы избежать возможных проблем, создадим файл символьной связи (symbolic link)/etc/sendmail.cf, указывающий на /etc/mail/sendmail.cf.

В директории /etc/mail будут находиться следующие файлы:

  • aliases - содержит дополнительные локальные адреса

  • genericsdomain - содержит некоторую информацию о конфигурации вашего локального хоста (host)

  • genericstable - содержит собственно правила преобразования адреса

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

  • sendmail.mc - исходный текст sendmail.cf.

Некоторые из этих файлов будут сопровождаться файлами с расширением .db. Они содержат хешированные (hashed) базы данных, напрямую используемые sendmail-ом.

Мы также исходим из того, что остальная cf часть исходных текстов sendmail-а находится в каталоге /usr/lib/sendmail.cf. Но это в случае дистрибутива Debian GNU/Linux. Другие поставки могут поместить эту информацию в другие каталоги. Подробнее об этом читайте в документации к вашему дистрибутиву.


4. Настройка sendmail

4.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')

В начале подключается (include) файл cf.m4 Этот m4-макро файл содержит большое количство макро-определений для остальной части файла. Удостоверьтесь, что путь, который вы укажете, верный - тот который написан у нас, типичен для Debian GNU/Linux. Макрос OSTYPE используется для задания некоторых важных значений для конфигурации. Если у вас не Debian, вы должны заменить слово "debian" словом "linux". ALIAS_FILE указываеи sendmail-у, где искать список псевдонимов (alias list).

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

FEATURE(masquerade_envelope) FEATURE(genericstable, `hash
-o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') 
Функция masquerade_envelope приводит к тому, что sendmail производит преобразование адреса отправителя в заголовке, взяв его с конверта (envelope). Это тот адрес, куда внешние почтовые системы будут посылать сообщения об ошибках при доставке. Файлы generics* описываются ниже.

Теперь, мы должны определить так называемый "смарт-хост" (smart host), то есть, машину, которая будет обрабатывать почту, исходящую с вашей системы. Заметьте, что это не обязательно POP или IMAP сервер вашего провайдера. Если возникнут затруднения, свяжитесь с горячей линией. Строка в основном файле конфигурации:

define(`SMART_HOST',`mail-out.your.provider')
Здесь замените mail-out.your.provider полным именем хоста вашего интернет-провайдера.

Последние две строчки включают определения "mailer"-ов, которые нужны sendmail-у для определения действий, необходимых для работы с различными видами почты:

MAILER(local)
MAILER(smtp)

Чтобы создать файл sendmail.cf из sendmail.mc, запустите следующее (в качестве root-а):

# m4 sendmail.mc > _sendmail.cf
# mv -f _sendmail.cf sendmail.cf
Заметьте, что здесь применена техника вывода результата во временный файл, с последующим переносом этого файла на нужное место. Это помогает предотвратить чтение частично готового файла конфигурации sendmail-ом.


4.2. Преобразование адресов

Сначала, необходимо сообщить sendmail-у, что адреса являются локальными (и поэтому должны быть подвергнуты преобразованию). Это очень просто: просто поместите полное (fully qualified) имя вашего хоста в файл /etc/mail/genericsdomain. Чтобы узнать это имя, наберите:

 $ hostname -f 

Теперь перейдем к правилам преобразования адресов, т.е. к файлу: /etc/mail/genericstable. Этот файл состоит из двух колонок, разделенных пробелами. Первая колонка содержит локальный адрес, вторая колонка содержит почтовый адрес, который должен быть использован вместо локального. Файл выглядит примерно так:

harry	[email protected]
maude	[email protected]
root	[email protected]
news	[email protected]

Заметьте, что должна быт строка для каждого пользователя на локальной машине, чтобы автоматически созданная почта на локальной машине, выходя из системы, содержала правильную информацию в заголовке.

Из соображений быстродействия, sendmail не использует этот текст напрямую, а опирается на "хешированную" (hashed) версию. Чтобы создать ее, наберите:

# makemap -r hash genericstable.db < genericstable

Заметьте, что правила преобразования из файла genericstable не будут воздействовать на локальную почту, или на почту, получаемую извне - эти правила работают только тогда, когда письмо покидает вашу локальную систему, направляясь к смарт-хосту провайдера.


4.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. Она автоматически позаботится обо всем, что нужно сделать.


5. Дополнительная информация

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

Если вас заинтересовали опции конфигурации sendmail-а, прочтите книгу "Bat Book" автора O'Reilly: Bryan Costales, Eric Allman, и Neil Rickert: "sendmail". O'Reilly, 1993.