Linux Network Admin : SENDMAIL: Files sendmail.mc and sendmail.cf

Макропроцессор m4 генерирует файл sendmail.df, когда обрабатывает макрофайл конфигурации, созданный локальным администратором системы. Обычно он называется sendmail.mc.

Процесс конфигурации, в основном, вопрос создания подходящего файла sendmail.mc, который включает макрокоманды,
описывающие желательную конфигурацию. Макрокоманды представляют собой выражения, которые макропроцессор m4 понимает и
разворачивает в синтаксис файла sendmail.cf. Макровыражения составлены из макроимени (текст в заглавных буквах в начале), которое может быть уподоблено функции в языках программирования, и некоторых параметров (текст внутри скобок), которые используются в расширении. Параметры могут быть переданы буквально в генерируемый файл sendmail.cf или использоваться, чтобы управлять путем, которым происходит обработка данной макрокоманды в подготовленном файле sendmail.mc.

Файл sendmail.mc для минимальной конфигурации (UUCP или SMTP со всей нелокальной почтой, передаваемой на непосредственно связанный интеллектуальный хост (smart host), может быть длиной всего в 10 или 15 строк, исключая комментарии.

Два примера файла sendmail.mc

Если Вы администратор нескольких различных почтовых хостов, не стоит называть Ваш файл конфигурации sendmail.mc. Вместо этого общей традицией является называть файл именем хоста, например, example.com.m4. Имя действительно не имеет значения, пока вывод назван sendmail.cf. Обеспечение уникального имени файла конфигурации для каждого хоста позволяет хранить все файлы конфигурации в одном и том же каталоге.

Большинство конфигураций sendmail сегодня использует только SMTP. Очень просто сконфигурировать sendmail для SMTP. Пример 1 ожидает, что сервер DNS будет доступен и будет пытаться принимать и доставлять всю почту для хостов, используя только SMTP.

Пример 1. Образец файла настройки smtp.m4

divert(-1)
#
# Sample configuration file for example.com - smtp only
#
divert(0)
VERSIONID(`@(#)sendmail.mc      8.10 (Linux) 3/5/96')
OSTYPE(`linux')
#
# Include support for the local and smtp mail transport protocols.
MAILER(`local')
MAILER(`smtp')
#
FEATURE(rbl)
FEATURE(access_db)
# end

Файл sendmail.mc для example.com показан в примере 2. Машина example.com использует SMTP, чтобы общаться со всеми xостами в LAN. Кроме того, конфигурация посылает всю почту для других адресатов на межсетевой почтовый хост moria по протоколу UUCP

Пример 2. Образец файла настройки uucpsmtp.m4

divert(-1)
#
# Sample configuration file for example.com
#
divert(0)
VERSIONID(`@(#)sendmail.mc      8.10 (Linux) 3/5/96')
OSTYPE(`linux')
dnl
# moria is our smart host, using the "uucp-new" transport.
define(`SMART_HOST', `uucp-new:moria')
dnl
# Support the local, smtp and uucp mail transport protocols.
MAILER(`local')
MAILER(`smtp')
MAILER(`uucp')
#
LOCAL_NET_CONFIG
# This rule ensures that all local mail is delivered using the
# smtp transport, everything else will go via the smart host.
R$* < @ $* .$m. > $*    $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3
dnl
#
FEATURE(rbl)
FEATURE(access_db)
# end

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

Обычно используемые параметры sendmail.mc

Несколько элементов в файле sendmail.mc требуются всегда. Другие могут игнорироваться, если Вы можете избежать
неприятностей со значениями по умолчанию. Общая последовательность определений в файле sendmail.mc такая:

  1. VERSIONID

  2. OSTYPE

  3. DOMAIN

  4. FEATURE

  5. Local macro definitions

  6. MAILER

  7. LOCAL_* rulesets

Строки в sendmail.mc, которые начинаются с #, не обрабатываются m4 и будут по умолчанию выводиться непосредственно в файл sendmail.cf. Это полезно, если Вы хотите комментировать, что Ваша конфигурация делает.

Допустимы комментарии в sendmail.mc, которые не попадут в файл sendmail.cf:
Вы можете использовать лексемы m4 divert и dnl. Команда divert(-1) прекратит весь вывод, divert(0) восстановит его к значению по умолчанию. Любой вывод, сгенерированный строками между ними будет отброшен. В
нашем примере, мы использовали этот механизм для создания комментария, который появляется только в файле sendmail.mc. Чтобы достичь того же самого результата для одной строки, можно использовать команду dnl, которая означает, буквально,”удаление всех символов следующей строки и перевод на новую строку”. Это стандартные свойства m4, и Вы можете получить больше информации относительно их из man-страницы.

VERSIONID и OSTYPE

VERSIONID(`@(#)sendmail.mc  8.10 (Linux) 01/10/98')

Макрокоманда VERSIONID факультативная, но полезно записать версию конфигурации sendmail в файл sendmail.cf. Так что Вы будете часто сталкиваться с этим. В любом случае убедитесь в наличии:

OSTYPE(`linux')

Это, вероятно, наиболее важное определение. Макрокоманда OSTYPE заставляет включить файл определений, которые являются хорошими значениями по умолчанию для Вашей операционной системы. Большинство определений в файле OSTYPE устанавливают имена различных файлов конфигурации, имена разных служебных каталогов и имя почтовой программы. Стандартный комплект исходных кодов sendmail включает такой файл для Linux. Многие дистрибутивы Linux, особенно Debian, имеют собственный файл определения, который является полностью совместимым с Linux-FHS. При наличии такого файла следует использовать именно его, а не поставляемую в комплекте с sendmail версию. Определение OSTYPE должно располагаться поближе к началу файла sendmail.mc, так как много других определений зависят от него.

DOMAIN

Макрокоманда DOMAIN полезна, когда Вы желаете конфигурировать большое количество машин одним способом. Стандартная установка имеет каталог шаблонов макрокоманд m4, используемых, чтобы управлять процессом конфигурации. Этот каталог обычно называется /usr/share/sendmail.cf. Здесь Вы найдете подкаталог, названный domain, содержащий проблемно-зависимые шаблоны конфигурации. Для использования определения DOMAIN, надо создать свой файл, содержащий стандартные определения для соответствующего домена, и вписать его в каталог domain. Пакет исходных кодов sendmail приходит с рядом типовых файлов макрокоманд domain, которые Вы можете использовать как примеры при построении своего.

Если Вы сохранили Ваш файл макрокоманды domain как
/usr/share/sendmail.cf/domain/example.com.m4, надо
включить в файл sendmail.mc определение:

DOMAIN(`example.com')

FEATURE

Макрокоманда FEATURE позволяет включить предопределенные свойства sendmail в Вашу конфигурацию. Эти cвойства sendmail делают конфигурации очень простыми в использовании. Вы можете узнать подробности о свойствах из файла CF в пакете исходных текстов. Чтобы использовать любое из перечисленных свойств, Вы должны включить в Ваш sendmail.mc строку наподобие:

FEATURE(name)

где name задает имя свойства. Некоторые свойства берут один факультативный параметр. Если Вы желаете использовать нечто отличное от значения по умолчанию, Вы должны использовать запись:

FEATURE(name, param)

где param задает параметр.

Локальные макроопределения

Стандартные макрофайлы конфигурации sendmail обеспечивают большое количество обработчиков прерываний и переменных, которыми Вы можете настраивать конфигурацию. Они названы локальными макроопределениями (local macro definitions). Многие из них перечислены в файле CF в пакете с исходными кодами sendmail. Локальные макроопределения обычно вызываются, по имени с указанием изменяемого параметра.

Определение протокола транспортировки почты

Если Вы хотите использовать sendmail для передачи нелокальной почты, Вы должны сообщить какой транспорт использовать. Макрокоманда MAILER делает это очень простым. Текущая версия sendmail поддерживает ряд протоколов транспорта почты. Некоторые из них экспериментальны, другие, вероятно, очень редко используются. В нашей сети мы нуждаемся в SMTP транспорте, чтобы посылать и получать почту в локальной сети, и в UUCP транспорте, чтобы посылать и получать почту от нашего интеллектуального хоста. Чтобы достичь этого, мы просто включаем транспорты smtp и uucp. Транспорт local включен по умолчанию, но может быть определен для ясности, если Вы желаете. Если Вы включаете оба транспорта, smtp и uucp, Вы должны всегда убедиться, что определили smtp первым. Обычно используемые транспорты, доступные Вам в макрокоманде
MAILER, описаны в следующем списке:

local

Этот транспорт включает локальный агент поставки, используемый, чтобы послать почту в почтовый ящик пользователя на этой машине, и агент prog используемый, чтобы послать сообщения локальным программам. Этот транспорт включен по умолчанию.

smtp

Этот транспорт осуществляет Simple Mail Transport Protocol (SMTP), который является наиболее общим средством транспортировки почты в Internet. Когда Вы включаете этот транспорт, четыре агента будут конфигурированы:
smtp (нормальный SMTP),
esmtp (расширенный SMTP),
smtp8 (8-битный двоичный SMTP) и
relay (специально разработан для шлюзования писем между разными хостами).

uucp

Транспорт uucp обеспечивает поддержку двух агентов: uucp-old, который является традиционным UUCP, и uucp-new, который позволяет указывать много получателей, которые будут обработаны в одной передаче сразу.

usenet

Этот агент позволяет Вам посылать сообщения почты непосредственно в сети Usenet. Любое локальное сообщение, направленное к адресу news.group.usenet, будет подано в сеть новостей для группы новостей news.group.

fax

Если Вы имеете установленное программное обеспечение HylaFAX, этот агент позволит Вам направлять письма так, что можно будет создать шлюз email-fax. Это свойство было экспериментальным на момент написания книги, и
более подробная информация может быть получена на http://www.vix.com/hylafax.

Имеются другие агенты, например, pop, procmail, mail11, phquery и cyrus, которые являются полезными, но менее распространенными. Документация к ним есть в пакете исходных кодов.

Настройка маршрутизации почты для локальных хостов

Конфигурация выше, вероятно, более сложная, чем требуется для большинства мест. Большинство машин сегодня использовало бы только транспорт SMTP и не работали бы с UUCP вообще. В нашей конфигурации мы настроили “интеллектуальный хост (smart host)”, который используется, чтобы обработать всю исходящую почту. Так как мы используем транспорт SMTP в нашей локальной сети, мы должны сообщить sendmail, что он не должен посылать локальную почту через smart host. Макрокоманда LOCAL_NET_CONFIG позволяет Вам вставить правила sendmail непосредственно в sendmail.cf, чтобы изменять путь, которым локальная почта обработана. Позже эти правила будут рассмотрены подробнее, пока же примем тот факт, что любая почта для хоста example.com должна доставляться через SMTP.

Scroll to top