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