Обычно для редактирования этого файла используется макропроцессор m4. Сначала вы подготавливаете специальный mc-файл. В этом файле записаны настройки .sendmail, но в более «читабельном» виде. При редактировании конфигурационных файлов также сказывается и их размер. Для сравнения: размер моего mc-файла — 2459 байт, а файла sendmail.cf — 46302 байт. Одно дело, редактировать файл размером в два килобайта, и совсем другое, если размер файла равен 46 килобайтам. В отличие от конфигурационного файла sendmail, вы сразу поймете, для чего предназначен тот или иной mc-файл. Затем, отредактировав mc-файл, нужно запустить макропроцессор m4 для создания файла конфигурации sendmail:
m4 my_config.mc > /etc/sendmail.cf
Перед выполнением этой команды я настоятельно рекомендую сохранить где-нибудь исходный файл sendmail.cf. В случае некорректной настройки вы всегда сможете восстановить его.
Файл конфигурации по умолчанию, который используется макропроцессором т4 для создания файла конфигурации программы sendmail (sendmail.cf), находится в каталоге /usr/share/sendmail-cf/cf. В более старых версиях программы sendmail он может быть расположен в каталоге /usr/lib/sendmail.
Как правило, этот файл называется sendmail.mc. Иногда он может называться и по-другому, например, redhat.mc, если вы используете операционную систему Red Hat или совместимую с ней.
Пример стандартного файла /usr/share/sendmail-cf/cf/redhat.mc приведен в листинге 13.1.
Листинг 13.1. Стандартный файл redhat.mc
divert(-1)
dnl This is the sendmail macro config file. If you make changes to this file,
dnl you need the sendmail-cf rpm installed and then have to generate a
dnl new /etc/sendmail.cf by running the following command: dnl
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include('../m4/cf.m4')
VERSIONID('linux setup for Red Hat Linux')dnl
OSTYPE( 'linux' )
define('confDEF_USER_ID',"8:12") dnl
undefine( 'UUCP_RELAY' )dnl
undefine('BITNET_RELAY')dnl
define('confAUTO_REBUILD')dnl
define('confTO_CONNECT', '1m')dnl
define('confTRY_NULL_MX_LIST',true)dnl
define('confDONT_PROBE_INTERFACES',true)dnl
define('PROCMAIL_MAILER_PATH', '/usr/bin/procmail')dnl
define('ALIAS_FILE', '/eto/aliases')dnl
dnl define('STATUS_FILE', '/etc/mail/statistics')dnl
define('UUCP_MAILER_MAX', '2000000')dnl
define('conf USERDB_SPEC', '/etc/mail/userdb.db')dnl
define('confPRIVACY_FLAGS', 'authwarnings,novrfy,noexpn,restrictqrun')dnl
define('confAUTH_OPTIONS', 'A')dnl
dnl TRUST_AUTH_MECH('DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') dnl
dnl define('confAUTH_MECHANISMS', 'DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define('confTO_QUEUEWARN', '4h')dnl
dnl define('confTO_QUEUERETURN', '5d')dnl
dnl define('confQUEUE_LA', '12')dnl
dnl define('confREFUSE_LA', '18')dnl
dnl FEATURE(delay_checks)dnl
FEATURE('no_default_msa', 'dnl')dnl
FEATURE('smrsh',Vusr/sbin/smrsh')dnl
FEATURE('mailertable', 'hash-o /etc/mail/mailertable.db')dnl
FEATURE('virtusertable', 'hash –o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail, '', 'procmail –t –Y –a $h –d $u')dnl
FEATURE('access_db','hash –o /etc/mail/access.db')dnl
FEATURE('blacklist_recipients')dnl
EXPOSED_USER('root' ) dnl
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
DAEMON_OPTIONS('Port=smtp,Addr=127.0.0.1, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl a kernel patch
dnl DAEMON_OPTIONS (xport=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that
do dnl not have 24x7 DNS do need this.
FEATURE('accept_unresolvable_domains')dnl
dnl FEATURE('relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
Cwlocalhost.localdomain
С помощью директивы FEATURE можно подключить ту или иную функцию программы sendmail. Например, функция mailertable предназначена для переопределения маршрутизации для конкретных доменов. Вы можете легко расширить функциональные возможности программы sendmail, добавив нужные вам функции в mc-файл.
Предположим, что вы хотите, чтобы названия компьютеров домена были скрыты. Это легко достигается с помощью добавления функции masquerade_envelope в ваш mc-файл. Для этого скопируйте файл redhat.mc в файл hide_hosts.me и добавьте в конец файла hide_hosts.me строки:
MASQUERADE_AS(my-domain.ru)dnl
FEATURE(masquerade_envelope)dnl
Затем выполните команду:
m4 /usr/share/sendmail-cf/cf/hide_hosts.me> /etc/sendmail.me
Вот и все! Названия узлов будут скрыты. Описание прочих функций представлено в табл. 13.1.
Функции программы sendmail Таблица 13.1
Функция Описание access_db Определяет таблицу доступа. В этой таблице указаны хосты, которым разрешена или запрещена отправка почты через ваш почтовый сервер. Эта опция эффективно используется для борьбы со спамом. Защита от спама подробно рассмотрена в одноименном разделе в гл. 23 accept_unresolvable_domains Разрешает отправлять почту доменам, которые не могут быть распознаны bestmx_is-local Сообщения будут приниматься только в том случае, если запись МХ-сервера DNS указывает на этот почтовый сервер blacklist_recipients «Черный список». Еще одна опция для борьбы со спамом. Для ее работы необходима опция access_db dnsbl Используется для работы с «черным списком», dnsbl — это сокращение от DNS Black List. В более ранних версиях эта опция называлась (Resolve Black List) domaintable Используется для разрешения имен доменов genericstable Используется для изменения адреса отправки в сообщениях local_procmail Указывает, что доставлять почту нужно с помощью локальной утилиты procmail mailertable Переопределяет маршрутизацию для конкретных доменов masquerade_entire_domain Используется для маскировки (сокрытия) всего домена. Данная функция должна использоваться вместе с директивой MASQUERADE AS (или MASQUERADE_DOMAIN), например, MASQUERADE_AS(f117.ru)dnl masquerade_envelope Позволяет скрыть имена хостов домена. Заменяет поле received from заголовка сообщения перед передачей сообщения другим redirect Используется для перенаправления на другой почтовый сервер. Означает отказ от принятия почты с выдачей сообщения please try <address> (попытайтесь использовать этот адрес) relay_based_on_MX Разрешает перенаправление (ретрансляцию) почты только для узлов, которые указаны в записях МХ-сервера DNS relay_hosts_only Разрешает ретрансляцию только для узлов, указанных в access_db relay_mail_from Разрешает ретрансляцию только, если отправитель указан в списке RELAY базы accessdb smrsh Использование ограниченной оболочки sendmail use_cf_file При указании этой функции sendmail будет обращаться к файлу sendmail.cf за списком доверенных пользователей use_cw_file При указании этой функции sendmail будет обращаться к файлу sendmail.cw за списком локальных узлов virtusertable Преобразует адрес получателя в адрес локального пользователя
В файле /etc/mail/sendmail.cw перечислены все псевдонимы данного почтового сервера. Предположим, что имя вашего сервера mail.dhsilabs.ru. Если отправитель отправит почту по адресу [email protected], письмо будет без проблем доставлено пользователю den. А если кто-то отправит письмо по адресу [email protected], то его доставка вызовет определенные трудности, так как не ясно какому узлу домена dhsilabs адресовано сообщение? Для решения этой проблемы в файл sendmail.cw нужно поместить строку:
dhsilabs.ru
Теперь, когда будет приходить почта формата [email protected], она будет доставлена почтовому серверу mail.dhsilabs.ru.
Напомню, что перед изменением файла sendmail.cf желательно остановить программу sendmail. Это делается с помощью команды:
/etc/init.d/sendmail stop
Запустить sendmail заново можно с помощью команды:
/etc/init.d/sendmail start
Конечно, удобнее сначала отредактировать файл sendmail.cf с помощью m4, а потом выполнить команду /etc/init.d/sendmail restart для перезапуска программы sendmail.
13.2. Аутентификация в sendmail
Программы Sendmail 8.10/8.11 поддерживают SMTP AUTH, согласно стандарту RFC 2554. Аутентификация базируется на SASL. Она позволит вам несколько повысить безопасность вашей сети, но создаст определенные неудобства для пользователей, потому что не все почтовые клиенты ее поддерживают.