Конфигурирование Sendmail


Все удобочитаемые и неудобочитаемые конфигурационные файлы Sendmail находятся в каталоге /etc/mail. В большинстве случаев, когда сервер занимается приемом входящей почты, предметом беспокойства для вас будут всего четыре файла: /etc/mail/access, /etc/mail/aliases, /etc/mail/mailertable и /etc/mail/relay-domains.

Файл access позволяет управлять доступом к почтовому серверу на уровне доменов и отдельных хостов.

Файл aliases содержит карту перенаправлений электронной почты для локального хоста.

Файл mailertable позволяет переопределять записи типа MX для данного почтового сервера. Файл mailertable особенно удобен при использовании системы FreeBSD для обеспечения дополнительной степени защиты в проприетарных системах с недостаточным уровнем безопасности, таких как Microsoft Exchange.

Файл relay-domains содержит перечень имен доменов и адресов, для которых ваш сервер будет выполнять функции ретранслятора электронной почты. В основном, в этот список будут включаться клиенты, использующие вашу машину в качестве почтового сервера, однако в этот список могут попасть и другие домены, для которых ваш сервер будет играть роль резервного ретранслятора почты.

Для каждого из этих файлов (за исключением relay-domains) имеется соответствующая база данных, файл с расширением .db. Подобно файлам /etc/passwd.db и /etc/spwd.db, они создаются из текстовых файлов для обеспечения программ более быстрым способом доступа к данным. После изменения текстового файла вам придется обновлять и соответствующий файл базы данных, о чем подробнее рассказано при рассмотрении каждого конкретного файла.

Файл access

Файл /etc/mail/access позволяет явно определить, кто сможет передавать почту через вашу систему. Этот файл обычно используется, чтобы ограничить прием почты от нежелательных корреспондентов. По умолчанию Sendmail отвергает любые почтовые сообщения, не предназначенные для локальной системы. Этот файл позволит переопределить другие правила Sendmail, в частности — черные списки. База данных с правилами доступа в идеале должна использоваться для описания редких исключений из других правил, описываемых параметрами настройки Sendmail, хотя есть и задачи, которые можно решить только с помощью базы данных access.

Файл /etc/mail/access состоит из двух колонок. В левой колонке указываются имя домена, имя хоста, IP-адрес или блок IP-адресов, откуда приходит электронная почта. В правой колонке указываются инструкции, определяющие действия с электронной почтой. Это может быть одна из инструкций RELAY, OK, REJECT или DISCARD. Кроме того, здесь же с помощью инструкции ERROR можно определить текст своего сообщения об ошибке для определенных хостов или доменов. Умудренные опытом администраторы Sendmail могут также указывать свои коды ошибок, но для этого требуется более глубокое знание протокола SMTP, чем может дать эта книга.

Например, ниже разрешается прием почты от локального хоста с IP-адресом 127.0.0.1. Это всегда желательное правило, на случай если кто-то по ошибке занесет локальный хост в черный список базы данных о спамерах. Правило RELAY предписывает Sendmail перенаправлять электронную почту локального происхождения в любом направлении. Перечень допустимых IP-адресов локальной сети также поможет преодолеть ограничения, если вдруг ваша компания попадет в черный список, которым вы пользуетесь. Безусловно, вы прекратите пользоваться черным списком, в котором перечислена ваша компания, но когда вас занесут в черный список, данное правило позволит безболезненно дожить до того момента, когда вы это обнаружите. Подобно /etc/login.access, в файле /etc/mail/access нельзя указывать диапазоны IP-адресов в современной нотации, но можно указывать часть IP-адреса, соответствующую диапазону адресов. Ниже я хотел включить диапазон адресов 192.168.0.0/23, но из-за недостатка, указанного выше, мне пришлось включить два блока IP-адресов 192.168.0 и 192.168.1:

127.0.0.1    RELAY
192.168.0    RELAY
192.168.1    RELAY

Инструкция OK — более строгая, она означает, что демон Sendmail должен только принимать, но не ретранслировать электронную почту от указанных хостов. Допустим, у вас имеется компания-партнер, постоянно попадающая в черный список только потому, что ее интернет- провайдер также обслуживает известного спамера. В этом случае с помощью инструкции OK можно определить правило, по которому будет приниматься почта от этой компании:

theircompany.com     ОК

Еще более строгой инструкцией является инструкция REJECT, которая предписывает категорически отвергать любую почту, поступающую из указанного источника. Предположим, некто с IP-адресом 192.168.8.83 передает вам огромные объемы электронной почты, пытаясь вызвать переполнение жесткого диска на вашем почтовом сервере. В этом случае вы можете отказаться от приема почты с помощью инструкции REJECT:

192.168.8.83     REJECT

Вы можете отвергнуть почту, послав в ответ собственное сообщение об ошибке и указав текст сообщения правее инструкции ERROR. Обычно, отвергая прием почты, Sendmail генерирует код сообщения 550. Ваше сообщение об ошибке увидит конечный пользователь, поэтому проявляйте определенную долю такта при создании своих сообщений. Текст сообщения должен окружаться кавычками, чтобы Sendmail не удалил пробелы и не изменил его каким-либо другим способом.

suckycompany.com ERROR: 550 "Ваша мама весьма забавно одевает вас"

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

absolutefreebsd.com     DISCARD

Файл aliases

Файл /etc/mail/aliases содержит пути перенаправления электронной почты для конкретных учетных записей или пользователей. Каждая строка в этом файле начинается с псевдонима, а после него через двоеточие указывается список действительных пользователей системы, которым должна быть перенаправлена почта. Почтовые псевдонимы учитываются как в конфигурации приема, так и в конфигурации передачи почты.

Пересылка почты от одного пользователя другому

Многие администраторы предпочитают пересылать почту, отправленную пользователю root, на действительную учетную запись. Следующий пример демонстрирует, как организовать пересылку почты пользователя root на другую учетную запись:

root:     mwlucas@AbsoluteFreeBSD.com

В действительности многие адреса электронной почты не имеют учетных записей, связанных с ними. Например, обязательный адрес postmaster@ обычно не связан с действительной учетной записью. Пересылать такую электронную почту на действительную учетную запись можно с помощью псевдонима:

postmaster:     root

Согласно этим двум примерам почта для postmaster будет пересылаться на адрес root, а с адреса root — мне, то есть я буду получать всю почту, которая поступает на адреса root@ и postmaster@ на этой машине.

Файл aliases уже содержит несколько стандартных адресов интернет-сервисов, а также псевдонимы для всех учетных записей сервисов FreeBSD, используемых по умолчанию. Все они по умолчанию выполняют переадресацию на учетную запись root. Определив действительный адрес электронной почты для псевдонима root, вы автоматически будете получать все системные электронные сообщения.

Псевдонимы как списки рассылки

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

sales:     mwlucas, bpollock, sales@nostarch.com

Пересылка почты в файлы

С помощью файла aliases можно реализовать еще более интересную возможность — пересылку сообщений в другие пункты назначения, не являющиеся адресами электронной почты. Если указать имя файла, Sendmail будет дописывать сообщения в этот файл. Можно организовать протоколирование всей почты, поступающей на электронный адрес, например так:

mwlucas:     /var/log/mwlucas-mail, mwlucas

Пересылка почты программам

Кроме того, можно пересылать почту программам для автоматической обработки. Для этого просто укажите полный путь к программе после символа вертикальной черты (|). Например, если у вас есть сценарий для обработки входящей почты, поступающей на определенный адрес, организовать пересылку почты можно с помощью такого определения псевдонима:

orders:     |/usr/local/bin/process-orders.pl

Включения

Наконец, в файл aliases можно включать содержимое других файлов. Это позволит доверенным пользователям изменять свои псевдонимы самостоятельно. Включаемый файл должен содержать список электронных адресов, по одному адресу в строке.

clientlist:     include:/usr/home/salesdude/clientlist.txt

Файл mailertable

Файл mailertable позволяет выборочно переопределять записи MX. Такая возможность была важна, когда сети использовались для подключения к почтовым системам вроде UUCP, но и сегодня она позволяет превратить FreeBSD в своего рода брандмауэр или бастион. В ряде случаев я применяю Microsoft Exchange — продукт, который нельзя напрямую соединять с Интернетом из соображений безопасности. Задействовав машину FreeBSD в качестве общедоступного ретранслятора почты и файл mailertable на ней, я смог организовать защиту системы Exchange без покупки дорогого брандмауэра электронной почты.

У меня нет системы Exchange в домене absolutefreebsd.com, но для примера предположим, что она есть. Мои хосты называются freebsd.absolutefreebsd.com и exchange.absolutefreebsd.com. Моя запись DNS могла бы выглядеть так:

absolutefreebsd.com     IN    MX    10    freebsd.absolutefreebsd.com

Теперь все могут посылать электронную почту на машину с операционной системой FreeBSD.

На этой машине я добавил бы в файл mailertable такую строку:

.absolutefreebsd.com    smtp:[exchange.absolutefreebsd.com]

Это позволило бы машине с операционной системой FreeBSD игнорировать запись MX для домена, указанного в левой колонке, и пересылать всю почту для этого домена на хост exchange.absolutefreebsd.com.

Файл relay-domains

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

Файл /etc/mail/relay-domains содержит список всех доменов и/или IP-адресов, для которых ваш сервер будет играть роль ретранслятора. Имена доменов и адреса следует указывать по одному в строке. Например, ниже приводится запись, которая образует сервис резервного ретранслятора почты для домена absolutefreebsd.com:

absolutefreebsd.com

Трудно, да? Не забудьте указать сервер в DNS-записи домена, чтобы резервный МХ-сервис заработал.

Активизация изменений

Для файлов access, aliases и mailertable имеются соответствующие файлы базы данных (.db). Подобно файлу паролей, эти файлы обеспечивают простой и быстрый способ получения ссылки на содержимое конфигурационных файлов Sendmail и других программ. Изменив один из этих файлов, следует обновить и соответствующий ему файл базы данных. Современные версии Sendmail обеспечивают управление этими файлами базы данных с помощью утилиты make(1). Чтобы обновить файлы access и mailertable, следует перейти в каталог /etc/mail и ввести команду make maps:

# cd /etc/mail
# make maps

Утилита make(1) сравнит время последнего изменения каждого файла с временем последнего изменения соответствующего файла базы данных и выполнит пересборку базы данных, если текстовый файл окажется новее.

Чтобы перестроить базу данных aliases, нужно запустить команду newaliases(8) либо make aliases:

# cd /etc/mail
# make aliases

Почему для перестройки базы данных aliases используется отдельная команда? Дело в том, что aliases стала первой базой данных в Sendmail, поэтому для ее обновления была написана специальная команда. С появлением новых файлов базы данных был выработан более универсальный метод.

Изменения в базе данных вступают в силу немедленно, сразу после ее пересборки. Однако другие изменения требуют перезапуска всей почтовой системы. Изменения в файле mailertable относятся именно к таким изменениям. Почтовую систему можно перезапустить разными способами, но я рекомендую использовать для этого систему начального запуска FreeBSD, чтобы обеспечить нормальное поведение почтового сервера после перезагрузки:

# /etc/rc.d/sendmail restart

Это обеспечит вступление в силу всех изменений, включая изменения в текстовых файлах.

Самые наблюдательные могут заметить, что /etc/rc.d/sendmail в действительности является интерфейсом к сценарию командного интерпретатора /etc/rc.sendmail. Файл /etc/rc.sendmail был создан еще до появления системы запуска rc.d и остается для обеспечения обратной совместимости.

Комментарии запрещены.