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') |
Теперь, мы должны определить так называемый "смарт-хост" (smart host), то есть, машину, которая будет обрабатывать почту, исходящую с вашей системы. Заметьте, что это не обязательно POP или IMAP сервер вашего провайдера. Если возникнут затруднения, свяжитесь с горячей линией. Строка в основном файле конфигурации:
define(`SMART_HOST',`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-у, что адреса являются локальными (и поэтому должны быть подвергнуты преобразованию). Это очень просто: просто поместите полное (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 не будут воздействовать на локальную почту, или на почту, получаемую извне - эти правила работают только тогда, когда письмо покидает вашу локальную систему, направляясь к смарт-хосту провайдера.
Файл алиасов содержит локальные имена, которые верны только для внутренней почты. Это применимо для администраторов, например 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. Она автоматически позаботится обо всем, что нужно сделать.