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

Thomas Roessler

Перевод: Станислав Рогин, ASPLinux

Аннотация

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


Содержание
Авторские права
Введение
Расположение файлов
Настройка sendmail
Дополнительная информация

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

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

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

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

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

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


Введение

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

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

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

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

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

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

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

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


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

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

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

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

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


Настройка sendmail

Основной файл конфигурации

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

В начале подключается (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-ом.


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

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

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

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

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

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

# makemap -r hash genericstable.db < genericstable

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


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


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

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

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