В этой лекции
В предыдущей лекции
были детально рассмотрены программа sendmail и
ее файл конфигурации. В этой лекции даются
рекомендации, где получить и как установить
программу sendmail на своем сервере.
Рассматривается также макропроцессор GNU m4,
который используется в программе sendmail для
упрощения создания файла конфигурации.
Попросту говоря, функции, включаемые
администратором почтовой системы в файл
конфигурации, реализуются в простых файлах
макросов. Затем эти файлы макросов
обрабатываются макропроцессором, и
создается полноценный файл конфигурации.
За многие годы существования программы sendmail было разработано много ее различных версий. В настоящее время широко используется версия 8.9.3 (последняя версия 8.10.2 — Прим. пер.). Так как в программе sendmail появляются все новые и новые дополнения или исправления ошибок, целесообразно устанавливать самую последнюю версию sendmail. Версия sendmail 8.9.3 была разработана в основном для защиты от TCP-атак типа "отказ в обслуживании" (Denial of Service), против которых была беззащитна программа sendmail. После уточнения всех параметров файла конфигурации можно обновлять бинарные программы без его воссоздания. В этом разделе описывается установка программы sendmail из бинарных программных пакетов, входящих в поставку большинства версий ОС Linux, или из исходных кодов sendmail, полученных с Web-сервера sendmail, путем их компиляции.
Большинство версий ОС Linux поставляется с бинарными пакетами sendmail. В этих программных пакетах содержится скомпилированная программа sendmail и базовые файлы конфигурации, которые необходимы для работы sendmail с конкретной версией ОС Linux. К сожалению, последние версии sendmail в большинство версий ОС Linux не входят. Хотя, как правило, более старые версии sendmail лучше работают с небольшими почтовыми серверами. Если требуется подключение почтового сервера на базе ОС Linux в сеть Internet, то желательно получить новую версию sendmail. Это можно сделать на Web-сайте http://www.sendmail.org. Если же имеющаяся у вас ОС Linux поставляется с последней версией sendmail — прекрасно! Берите и пользуйтесь! Если нет, то можно получить последнюю версию, следуя инструкциям, приведенным ниже.
В большинстве версий ОС Linux, в
которых используется механизм установки
бинарных программных пакетов RPM (RedHat, Mandrake и
Caldera), программный пакет sendmail разбит на три
отдельных пакета. Так, в Mandrake Linux 6.0
используются sendmail-8.9.3-9mdk.i586.rpm, sendmail-cf-8.9.3-9mdk.i586.rpm
и sendmail-doc-8.9.3-9mdk.i586.rpm.
Эти файлы составляют программный пакет
sendmail версии 8.9.3. Для просмотра файлов,
содержащихся в каждом дистрибутивном
пакете можно использовать утилиту RPM. На рис. 11.1
показан внешний вид утилиты kpackage
для графической оболочки X Window, в которой
отображается информация о пакете sendmail-8.9.3-9mdk.i586.rpm.
(рис 11.1) Окно утилиты kpackage c файлом sendmail-8.9.3-9mdk.i586.rpmВ листинге 11.1 представлены файлы,
которые входят в состав пакета sendmail-8.9.3-9mdk.i586.rpm.
В этом RPM-пакете содержатся основные
бинарные файлы, сконфигурированные для
работы в ОС Mandrake Linux.
1 /etc/aliases 2 /etc/aliases.db 3 /etc/mail 4 /etc/mail/deny 5 /etc/mail/deny.db 6 /etc/mail/ip_allow 7 /etc/mail/name_allow 8 /etc/mail/relay_allow 9 /etc/rc.d/init.d/sendmail 10 /etc/rc.d/rc0.d/K30sendmail 11 /etc/rc.d/rc1.d/K30sendmail 12 /etc/rc.d/rc2.d/S80sendmail 13 /etc/rc.d/rc3.d/S80sendmail 14 /etc/rc.d/rc4.d/S80sendmail 15 /etc/rc.d/rc5.d/S80sendmail 16 /etc/rc.d/rc6.d/K30sendmail 17 /etc/sendmail.cf 18 /etc/sendniail.cw 19 /etc/smrsh 20 /etc/sysconfig/sendmail 21 /usr/bin/hoststat 22 /usr/bin/mailq 23 /usr/bin/makemap 24 /usr/bin/newaliases 25 /usr/bin/purgestat 26 /usr/bin/rmail 27 /usr/lib/sendmail 28 /usr/lib/sendmail.hf 29 /usr/man/man1/mailq.1.bz2 30 /usr/man/man1/newaliases.1.bz2 31 /usr/man/man5/aliases.5.bz2 32 /usr/man/man8/mailstats.8.bz2 33 /usr/man/man8/makemap.8.bz2 34 /usr/man/man8/praliases.8.bz2 35 /usr/man/man8/rmail.8.bz2 36 /usr/man/man8/sendmail.8.bz2 37 /usr/sbin/mailstats 38 /usr/sbin/makemap 39 /usr/sbin/praliases 40 /usr/sbin/sendmail 41 /usr/sbin/smrsh 42 /var/log/sendmail.st 43 /var/spool/mqueue
В строках 21–26 листинга 11.1
указывается, что выполняемые модули sendmail
находятся в Mandrake Linux в каталоге /usr/bin.
Сама же программа sendmail находится в каталоге /usr/sbin. Строки 9–16
отображают сценарии sendmail, которые
применяются для автоматического запуска и
останова sendmail на различных уровнях init.
В строках 29–36 вы видите файлы, в которых
хранятся справочные сведения о работе sendmail.
В строке 43 для хранения почтовых сообщений,
ожидающих доставки, создается каталог /var/spool/mqueue.
Как видите, в этот пакет включены все файлы,
необходимые для конфигурирования,
поддержки работоспособности и справки о
sendmail.
Для установки RPM-пакета sendmail
можно использовать специальную программу
инсталляции kpackage
в сеансе X Window. Также можно использовать
обычную утилиту rpm из
командной строки. Для этого следует
выполнить (с правами пользователя root ):
rpm -Uvh sendmail-8.9.3-9mdk.i586.rpm.
Второй файл дистрибутива — sendmail-cf-8.9.3-9mdk.i586.rpm —
включает в себя файлы, необходимые для
реконструкции файла конфигурации с помощью
макропроцессора GNU m4
(см. раздел "Конфигурирование sendmail"). После
его установки необходимые файлы
конфигурации sendmail помещаются в каталог /usr/lib/sendmail-cf.
Этот пакет можно также установить, с
помощью команды rpm -Uvh,
как показано выше.
И, наконец, третий файл — это sendmail-doc-8.9.3-9mdk.i586.rpm,
который включает в себя всю документацию на
программный продукт sendmail. Все файлы с
документацией о sendmail помещаются в каталог /usr/doc/sendmail.
Туда входят документы "Руководство по
установке и работе с sendmail" и "Введение в
sendmail" в формате PostScript. Все эти файлы также
можно установить с помощью команды rpm -Uvh, как показано выше.
Пользователи программы sendmail
должны постоянно следить за новостями с Web-сервера sendmail.org. Новую
версию sendmail всегда можно получить в виде
исходного кода с сервера ftp.sendmail.org.
Все дистрибутивы sendmail находятся на нем в
каталоге /pub/sendmail.
Как правило, там всегда можно получить
несколько версий sendmail, поэтому внимательно
читайте описания версий и комментарии к ним.
В то время, когда писалась эта книга,
текущей версией была sendmail.8.9.3.tar.gz
(а к моменту выхода книги — sendmail.11.0.tar.gz ).
Это файл сжатый UNIX-утилитой tar
и программой GNU-проекта zip.
Имеется также альтернативный файл sendmail.8.9.3.tar.Z,
где используется метод компрессии,
принятый в UNIX. Скорее всего, пользователи ОС
Linux предпочтут получить файл, сжатый
программой GNU zip,
так как он меньшего размера.
Методы сжатия файлов в ОС Linux
В операционной системе Linux
поддерживается несколько методов сжатия
файлов. Три наиболее популярных метода
сжатия базируются на использовании утилиты
сжатия UNIX ( .Z
файлы), утилиты GNU gzip (.gz
файлы) и утилиты поблочной сортировки
сжатых файлов ( .bz2
файлы). Часто файлы дистрибутивов
предлагаются сжатыми во всех трех
вариантах. Для сокращения времени загрузки
по сети пользователи ОС Linux могут получить
файл с наименьшим размером. Для извлечения
из архивов исходных кодов файлов .Z
и .gz
достаточно задать команду tar
с параметром -z.
После помещения исходного кода в рабочий каталог его можно извлечь с помощью команды:
tar -zxvf sendmail.8.9.3.tar.gz
С помощью этой команды файлы
исходного кода извлекаются в базовый
подкаталог рабочего каталога с именем sendmail-8.9.3.
Далее из исходного кода
необходимо скомпилировать бинарные
выполняемые модули. Для этого перейдите в
подкаталог sendmail-8.9.3 и
выполните в нем команду make all. В поставку sendmail входит подкаталог BuildTools,
который активно используется в процессе
компиляции. С целью создания бинарных
пакетов из различных Makefile
применяется файл сценария Build.
Этот сценарий определяет, запущена ли
система, выдавая команду uname -a и создавая
подкаталоги, где содержатся выполняемые
модули, на основе значения uname.
В системе Mandrake 6.0 с помощью этого сценария
создаются каталоги с именами obj.Linux.2.2.9-19mdk.i586.
Для установки созданных
выполняемых модулей sendmail в подкаталоге sendmail-8.9.3
воспользуйтесь командой make install. Но прежде убедитесь, что у вас
имеются права пользователя root,
в противном случае вам не будет дано право
поместить файлы в соответствующие каталоги
в системе с ОС Linux.
После того как программа sendmail
установлена, ее нужно сконфигурировать для
работы на конкретном почтовом сервере под
управлением ОС Linux с учетом окружения. В
лекции 10, "Программа sendmail", описывается
файл конфигурации и его основные параметры.
Однако не отчаивайтесь, существует более
простой способ конфигурирования sendmail, чем
настройка параметров файла конфигурации
вручную строчка за строчкой. Для создания
небольшого и понятного файла макросов, в
котором описываются все параметры sendmail,
администраторы почтовых систем могут
воспользоваться макропроцессором GNU m4.
Измененный файл макросов налагается на
базовый файл макросов sendmail, и на его основе
с помощью процессора создается файл
конфигурации sendmail.cf.
В этом разделе рассматриваются вопросы
работы с макропроцессором GNU m4
и формат файла макросов, который
используется при создании файла
конфигурации.
Для создания файла конфигурации
sendmail из набора файлов макросов
используется макропроцессор GNU m4.
Как только файл макросов считывается на
входе, он расширяется и записывается в
выходной файл.
Некоторые макроопределения
создаются самим процессором m4.
Другие макроопределения могут быть
определены отдельно и обрабатываться при
запуске макропроцессора. Кроме расширения
макросов, макропроцессор m4
имеет и другие функции, такие как запуск
оболочки командной строки, манипулирование
текстом и выполнение арифметических
операций с целыми числами. Текущая версия
макропроцессора GNU m4 —
1.4, и она поставляется с большинством версий
ОС Linux. На рис. 11.2 демонстрируется схема
считывания процессором m4
созданного файла макроса и его
преобразование в файл конфигурации с
применением заранее определенных файлов
макросов.
(рис 11.2) Схема работы макропроцессора GNU m4В начальную конфигурацию sendmail
входят файлы макросов m4,
в которых определены общие настройки и
параметры sendmail. Местоположение начальной
конфигурации sendmail может меняться. В Mandrake Linux
пакет начальной конфигурации называется sendmail-8.9.3-9mdk.i586.rpm.
При его установке в системе создается
каталог /usr/lib/sendmail-cf,
в который помещаются файлы макросов sendmail.
Если же программа sendmail получена с сайта sendmail.org
в сети Internet, то файлы макросов конфигурации
находятся в подкаталоге cf, который, в свою очередь, расположен в
исходном каталоге (для рассматриваемой
нами версии это sendmail-8.9.3 ).
Не стоит заблуждаться. Файл
конфигурации sendmail можно полностью создать
и вручную без помощи m4.
Однако следует помнить о том, что
разработчики sendmail создали этот
макропроцессор именно для того, чтобы
упростить администраторам систем
электронной почты создание файла
конфигурации sendmail. В макропроцессоре m4
используются собственные директивы
макроязыка, с помощью которых генерируются
соответствующие строки файла конфигурации.
Изучение директив m4
в этом разделе является альтернативой
изучению строк конфигурации sendmail и
созданию файла конфигурации вручную.
Генерация файла конфигурации с помощью
макропроцессора m4
намного проще, чем его создание вручную.
Часто для создания полнофункционального
файла конфигурации для sendmail нужен
небольшой файл макросов. При написании
директив для m4
полезно знать настройки и параметры sendmail —
это облегчит понимание директив, которые
вносятся в файл макросов. Если этот раздел
покажется вам непонятным, обратитесь к
примерам, приведенным в конце этой лекции. В
них достаточно ясно иллюстрируется работа
директив m4 при
создании файла конфигурации sendmail.
Макропроцессор m4
считывает исходный файл макросов и на
основе заранее определенных директив
создает файл конфигурации sendmail. Каждая
макродиректива m4 в
файле макросов расширяется и преобразуется
в раздел конфигурационного файла sendmail.
Например, директивой m4:
FEATURE ('virtusertable', 'hash /etc/virtusertable')
в файле конфигурации sendmail
создается К' -строка
следующего содержания:
#Virtual user table (maps incoming users) Kvirtuser hash /etc/virtusertable
Когда известны настройки и
параметры sendmail, с помощью директив m4
можно приступить к созданию файла
макросов. Затем на его основе
макропроцессор m4 сможет
создать полнофункциональный файл
конфигурации для sendmail. Несмотря на то что
данный пример весьма тривиален, часто одна
директива макроса может в файле
конфигурации выразится в десятке строк, что,
безусловно, экономит время при его создании.
В этом разделе мы рассмотрим макродирективы. Их можно свободно применять при создании файла макросов. В последующих разделах демонстрируются возможные комбинации директив и создание файла конфигурации для работы sendmail в определенной системе.
Предупреждение
Будьте внимательны!
Макропроцессор m4 чувствителен
к регистру задаваемых символов. Перед
обработкой файла макросов убедитесь в том,
что все директивы заданы в соответствующем
регистре, в противном случае они не будут
восприняты правильно. Помните также, что во
многих директивах начало параметра
обозначается символом обратного апострофа
( ` ).
Применяйте именно этот символ, а не какой-либо
иной. Конец параметра, наоборот, помечается
символом апострофа ( ' ).
Часто ошибки в этих символах являются
причиной неправильной работы файла
конфигурации sendmail.
Чаще всего первыми двумя директивами в файлах макросов следуют:
divert (-1) divert (0)
Директива divert(-1) используется
для очистки буфера макросов от данных,
оставшихся от предыдущих попыток создания
файлов макросов. Директива divert(0) применяется для обозначения начала
нового файла макросов.
Еще одна необходимая директива — include. По этой
директиве строки из других файлов макросов
могут быть использованы данным файлом
макросов. Как правило, для нормальной
обработки полученного файла макросов
необходимо включить в него файл cf.m4,
который находится в том же подкаталоге, что
и файл конфигурации sendmail. В зависимости от
местоположения файлов конфигурации sendmail,
директива include
должна представлять собой примерно
следующее:
include ('/usr/lib/sendmail-cf/m4/cf.m4')dnl
Благодаря служебному слову dnl
в конце директивы include
макропроцессор определяет конец строки.
Поскольку макропроцесоор m4
является программой, обрабатывающей
непрерывный поток данных, то он не
распознает символы конца строки. Для
сокращения генерации пустых строк в
конечном файле конфигурации и используется
специальная метка dnl,
которая указывает на конец директивы.
Директива: OSTYPE
В файле макросов обязательно
должна присутствовать директива OSTYPE.
Благодаря ей, в зависимости от типа
операционной системы, макропроцессор m4
определяет местоположение выполняемых и
конфигурационных файлов. Формат этой
директивы следующий:
OSTYPE ('os')dnl
Здесь os —
название операционной системы, в
которой работает программа sendmail. Поскольку
эта книга ориентирована на почтовые
серверы под управлением ОС Linux, то здесь
следует указать linux OSTYPE. Объявление OSTYPE распространяется на весь файл
макросов с переменными, заданными m4.
Когда директиве задается тип операционной
системы linux, то в
файл макросов автоматически включается
файл linux.m4. В
листинге 11.2 представлена версия файла linux.m4
для операционной системы Mandrake Linux 6.0.
1 divert (-1)
2 #
3 # Copyright (c) 1998 sendmail, Inc. All rights reserved.
4 # Copyright (c) 1983 Eric P. Allman. All rights reserved.
5 # Copyright (c) 1988, 1993
6 # The Regents of the University of California. All rights reserved.
7 #
8 # By using this file, you agree to the terms and conditions set
9 # forth in the LICENSE file which can be found at the top level of
10 # the sendmail distribution.
11 #
12 #
13
14 divert(0)
15 VERSIONID('@(#)linux.m4 8.7 (Berkeley) 5/19/1998')
16 define('PROCMAIL_MAILER_PATH','/usr/bin/procmail')dnl
17 # define('LOCAL_MAILER_FLAGS', 'ShPfn')dnl
18 # define('LOCAL_MAILER_ARGS', 'procmail -a $h -d $u')dnl
19 define ('STATUS_FILE', '/var/log/sendmail.st')dnl
В строках 16–19 листинга 11.2
переопределяется местоположение
выполняемого файла procmail
и файла статистики sendmail.st
для данной версии ОС Linux. Все эти
настройки будут впоследствии отражены в
файле конфигурации sendmail.cf.
Путь к выполняемому файлу procmail
задается в описании почтовой программы procmail,
а путь к файлу статистики задается
параметром STATUS_FILE.
Далее в этом разделе мы более подробно
рассмотрим работу директивы define.
Директива: DOMAIN
Для определения специальных
методов обработки сообщений применяется
директива DOMAIN. В
табл. 11.1 представлены значения, которые
могут быть использованы с этой директивой.
| Значение | Описание |
|---|---|
BITNET_RELAY |
Хост будет
принимать почту, адресованную в |
DECNET_RELAY |
Хост будет
принимать почту, адресованную в |
FAX_RELAY |
Хост будет
принимать почту, адресованную псевдо-домену .FAX |
LUSER_RELAY |
Хост будет обрабатывать адреса, которые принадлежат локальным пользователям |
UUCP_RELAY |
Хост будет
принимать почту, адресованную в UUCP |
Формат директивы DOMAIN
следующий:
DOMAIN (relay, 'mailer:hostname'),
где relay —
одно из значений представленных в табл. 11.1, — почтовая
программа, которая используется для
доставки сообщений, а hostname —
имя удаленного хоста, на который
передаются сообщения.
Директива: FEATURE
С помощью директивы FEATURE
заранее заданные параметры sendmail
посредством макропроцессора m4
заносятся в файл конфигурации sendmail, сводя к
минимуму действия со стороны
администратора почтовой системы. Формат
директивы FEATURE
следующий:
FEATURE ('value', '[options]'),
где value —
значение параметра, который включается
в файл конфигурации, а options —
параметры, необходимые для работы
директивы. В этом разделе дается описание
параметров, доступных в sendmail версии 8.9.3.
Параметр accept_unqualified_senders
разрешает программе sendmail принимать
сообщения, в поле заголовка FROM:
которых отсутствует полное имя хоста. Это
может понадобиться в том случае, если
локальная почтовая программа посылает
сообщения без добавления имени локального
хоста в поле FROM:.
С помощью параметра accept_unresolvable_domains
программа sendmail может принимать даже те
сообщения, в поле заголовка FROM:
которых указаны адреса с ошибками в
именах домена. Как правило, sendmail проверяет
корректность доменных имен, полученных из
поля FROM:
заголовка сообщения формата RFC822. Если имя
домена невозможно идентифицировать, то
sendmail не принимает такое сообщение. Если же
ваш почтовый шлюз не может обрабатывать
запросы системы DNS на преобразование
доменных имен, то, возможно, придется
воспользоваться этим параметром, чтобы
программа sendmail принимала сообщения даже от
"неправильных", с точки зрения DNS, доменов.
Параметр access_db
позволяет sendmail обращаться к базе данных
разрешения доступа. База данных разрешения
доступа позволяет администратору почтовой
системы задавать список доменов и
пользователей, которые подвергаются
специальной обработке. К ним относятся узлы,
которым разрешено использовать сервер
электронной почты в качестве транзитного
узла, или узлы, которые блокируются и почта
от них через сервер электронной почты не
передается. Этот параметр весьма полезен,
когда возникает необходимость в
идентификации почтовых спамеров и
последующего блокирования поступающих от
них сообщений.
По умолчанию с помощью параметра access_db
создается хешированная база данных типа
Berkeley. При этом сама база данных помещается в
каталог /etc/mail/access.
Значения в базе данных, заданные по
умолчанию, могут изменяться с помощью
параметров в формате:
FEATURE ('access_db', 'db [options]'),
где db —
тип базы данных, а options —
параметры, необходимые для создания базы
данных. Например, база данных по умолчанию
может быть создана с помощью следующей
директивы:
FEATURE ('access_db', 'hash -o /etc/mail/access')
Согласно этой директиве,
создается хешированная база данных в
каталоге /etc/mail/access.
Так как в ней задан тип базы данных 'hash',
то для создания базы данных из текстового
файла в ОС Linux необходимо использовать
специальную функцию makemap.
В текстовом файле содержится список
доменных имен либо IP-адресов и действий над
ними. Местоположение всех файлов должно
быть явно определено — так же, как и все
действия, которые будут совершаться
программой sendmail. В табл. 11.2 представлен
список ярлыков, которые применяются в базе
данных разрешения доступа.
| Ярлык | Описание |
|---|---|
OK |
Принимать почту, даже если другими правилами предусмотрено обратное |
RELAY |
Принимать или передавать почту только для указанных доменов |
REJECT |
Отвергать все сообщения с заданными отправителями или получателями с выдачей сообщения об ошибке |
DISCARD |
Отвергать все сообщения с заданными отправителями или получателями без выдачи сообщения об ошибке |
nnn text |
Отвергать все
сообщения с заданными отправителями или
получателями с выдачей сообщения об
ошибке в формате RFC821 с номером nnn и текстом text |
В листинге 11.3 приведен пример текстового файла базы данных разрешения доступа, который применяется для блокирования почты от определенных узлов.
1 spammer@ispmail.net REJECT 2 microsoft.com DISCARD 3 linux.org OK 4 smallorg.org RELAY 5 198.162.10 550 Sorry, I can't relay mail for your domain
В строке 1 листинга 11.3 показано,
что все сообщения, полученные или
направленные на адрес ,
будут отвергнуты. В строке 2 определяется,
что все сообщения, полученные или
отправленные в домен microsoft.com,
будут уничтожены и ни одна из сторон не
получит даже сообщения об ошибке. В строке 3
задается, что все сообщения, полученные от
любого пользователя из домена linux.org,
будут приняты почтовым сервером. Строка 4
разрешает почтовому серверу выступать в
качестве access_db для
блокирования почты, поступающей от
определенных IP-сетей, с выдачей
определенного сообщения об ошибке.
Для того чтобы создать базу
данных разрешения доступа из файла access.txt,
задайте команду:
makemap hash /etc/mail/access < /etc/mail/access.txt
В ОС Linux утилита makemap
создает хешированную базу данных из
текстового файла, к которой затем сможет
обращаться программа sendmail.
Если в конфигурации sendmail
используется механизм подстановки адресов
(см. раздел " MASQUERADE_AS "
далее в этой лекции), так называемый
маскарадинг (от англ. masquerade —
притворяться), то его можно задействовать
включением параметра allmasquerade.
Если используется механизм маскарадинга,
то при включенной параметре allmasquerade
адреса получателей преобразуются в адреса,
указанные в директиве MASQUERADE_AS.
Будьте осторожны, применяя этот параметр,
так как программа sendmail может неправильно
воспринимать адреса при использовании
локальных псевдонимов. Этот параметр чаще
всего используется при необходимости
маскарадинга нескольких хостов.
Для включения доменного имени во
все адреса, даже если сообщения адресованы
локальным пользователям, применяется
параметр always_add_domain.
По умолчанию, сообщения, которые посылаются
локальным пользователям от других
локальных пользователей, не содержат в поле
адреса доменного имени, так как в этом
случае обмен электронной почтой происходит
внутри одного хоста.
Параметр bitdomain
предназначен для поиска хостов сети
в таблице, заданной директивой. Формат
директивы следующий:
FEATURE ('bitdomain', 'db [options]'),
где db — тип
используемой базы данных, а options —
опции, необходимые для создания базы данных.
Значения по умолчанию — это тип базы
данных hash и имя
файла базы данных /etc/bitdomain.db.
Параметр bestmx_is_local
позволяет программе sendmail принимать почту
таким образом, как будто она адресована
FEATURE ('bestmx_is_local', 'domains...')
Если список доменов задан опцией domains...,
то параметр действителен только для
указанных доменов.
Параметр blacklist_recipients
позволяет программе sendmail создавать списки
пользователей, от которых почта
приниматься не будет. Эти же пользователи
не смогут получить доступ к базе данных
управления доступом, о которой говорилось
выше при описании параметра access_db.
Часто эти списки называют "черными
списками". По сути, параметр blacklist_recipients
расширяет действие параметра access_db,
так как в "черный список" могут заноситься
и отдельный адрес электронной почты, и имя
отдельного хоста, и даже имя домена.
Создание базы данных доменных
имен для быстрого преобразования имен
доменов производится с помощью параметра domaintable.
В принципе это нестандартная функция, хотя
иногда может понадобиться изменить имя
домена на ходу (было изменено доменное имя,
а некоторые клиенты не обратили на этот
факт должного внимания). С помощью
параметра domaintable
создается база данных доменных имен
определенного типа и в заданном каталоге.
По умолчанию это хешированная база данных,
которая создается в каталоге /etc/domain.
В первом поле текстовой базы данных всегда
должно присутствовать старое доменное имя,
а во втором поле — новое доменное имя.
Для преобразования базы данных из
текстового формата в приемлемый для чтения
программой sendmail формат воспользуйтесь
командой makemap.
Параметр genericstable
позволяет sendmail создавать таблицу имен
пользователей и доменных имен, значения из
которой могут использоваться для
подстановки имен на ходу. Данная функция
также не является стандартной, но она может
пригодиться при переходе системы
электронной почты с одних доменных имен на
другие или при широкомасштабной смене имен
пользователей. При создании этой базы
данных можно использовать принятые типы
баз данных и специальные опции. И конечно же,
для преобразования базы данных из
текстового формата в приемлемый для чтения
программой sendmail формат следует
использовать makemap.
Параметр limited_masquerade
обеспечивает избирательность работы sendmail,
если задан параметр . В то время как параметра
применяется сразу ко всем хостам, указанным
в строках конфигурации Cw
или Fw, параметр limited_masquerade
выполняет маскарадинг только хостов,
указанных в строках конфигурации DM.
С помощью параметра local_lmtp
программа sendmail может использовать LMTP-совместимую
почтовую программу для доставки локальной
электронной почты. Как правило, это не
касается систем на базе ОС Linux, так что
данный параметр обычно не используется.
Параметр local_procmail
указывает программе sendmail использовать в
качестве локальной почтовой программы
программу procmail. В
почтовых серверах на базе ОС Linux этот
параметр используется довольно часто, так
как программа procmail
входит в поставку практически всех версий
ОС Linux. Формат этой директивы следующий:
FEATURE ('local_procmail', 'pathname'),
где pathname —
путь к каталогу, в котором хранится
программа procmail.
По умолчанию она находится в каталоге,
определенном переменной PROCMAIL_MAILER_PATH
директивы OSTYPE.
Как правило, это каталог /usr/local/bin/procmail.
Из листинга 11.2 видно, что в Mandrake Linux
используется каталог /usr/bin/procmail.
С помощью параметра loose_relay_check
изменяется метод обработки адресов,
содержащих символ %.
Поскольку способ адресации электронной
почты с использованием символа %
уже не применяется, этот параметр
практически не используется.
Для создания программой sendmail
базы данных хостов с описанием способов
доставки почты к ним применяется параметр mailertable.
Формат директивы mailertable
следующий:
FEATURE ('mailertable', 'db [options]'),
где db —
тип базы данных, а options —
опции, необходимые для создания и
обеспечения доступа к базе данных. Для
приведения этой базы данных к стандартному
виду из текстового применяется команда makemap.
При этом формат текстового файла должен
быть следующим:
host mailer:domain,
где host —
это хост получателя или доменное имя
получателя, —
тип почтовой программы, которая должна
использоваться при доставке сообщений, а domain —
удаленный хост, которому должно
пересылаться сообщение. Таким образом, с
помощью базы данных mailertable
можно пересылать на один удаленный хост
сообщения, отправленные либо определенному
хосту, либо в определенный домен. Этот
параметр особенно полезен при работе UUCP-узлов.
На всех узлах UUCP есть необходимость в
создании базы данных, содержащей списки
узлов, которым нужно пересылать почту для
хостов, не имеющих непосредственного UUCP-соединения
с данным узлом.
Параметр masquerade_entire_domain
позволяет программе sendmail осуществлять
маскарадинг всех сообщений, поступающих из
определенного домена, а не только от
отдельного почтового сервера. Если же
сервер электронной почты работает в режиме
шлюза для всех хостов домена, то этот
параметр дает возможность пользователям
всех хостов использовать преобразованное
доменное имя. Например, в домене имеется три
почтовых сервера — shadrach.smallorg.org, meshach.smallorg.org и abednego.smallorg.org.
У всех сообщений электронной почты,
посылаемых через почтовый шлюз
пользователями этих трех серверов, в
адресной части будет присутствовать не имя
хоста, откуда они поступили, а подставное
доменное имя smallorg.org.
Это довольно удобное решение для того,
чтобы скрыть почтовые серверы в крупной
сети.
Параметр masquerade_envelope
позволяет программе sendmail использовать на
конверте имена отправителя и получателя с
преобразованным доменным именем (после
процедуры ).
Параметр nocanonify
указывает sendmail не передавать адреса,
соответствующие наборам правил, добавляя
доменные имена к именам хостов. Этот
параметр чаще всего применяется почтовыми
шлюзами, поскольку приходящие на них
сообщения обычно уже имеют полный адрес
электронной почты. Таким образом, нет
необходимости в дальнейшей обработке
адресов.
Параметр nodns
был практически исключен из sendmail версии 8.9.3.
Однако он еще встречается в некоторых
старых файлах макросов, так что не помешает
знать его назначение. Параметр nodns
сигнализирует о том, что почтовый сервер
для преобразования имен хостов не
использует систему DNS. Если же вы
воспользуетесь этим параметром, работая с
sendmail версии 8.9.3, то от макропроцессора m4
получите сообщение об ошибке следующего
содержания:
FEATURE (nodns) is no-op. Use ServiceSwitchFile (/etc/service.switch) if your OS does not provide its own instead.
В sendmail версии 8.9.3 имена хостов
преобразовываются в адреса в соответствии
с тем, как указано в файле /etc/service.switch.
В ОС Linux этот файл обычно находится в /etc/nsswitch.conf.
В нем переменная host
указывает порядок, в котором и ОС Linux и sendmail
будут преобразовывать имена хостов в IP-адреса.
С помощью параметра nouucp
программе sendmail запрещается изменять адреса,
заданные в формате UUCP.
В отдельных случаях используется
параметр nullclient.
Он обычно применяется в файле макросов
самостоятельно и предназначен для
представления почтового сервера в виде
обычной рабочей станции, которая почту (в
том числе, адресованную локальным
пользователям) не обрабатывает, а лишь
пересылает ее другому почтовому серверу.
Совместно с параметром nullclient
может использоваться только параметр nocanonify,
описанный выше.
Если в вашей сети используются
рабочие станции под управлением ОС Linux или
ОС UNIX, то параметр nullclient
может оказаться весьма полезным. Если
пользователи вынуждены перемещаться от
одной станции к другой в течение дня, то
довольно сложно выделить отдельный хост и
имя пользователя для отправки сообщений
электронной почты. Проблема решается
выделением отдельного почтового сервера,
на который с любой рабочей станции можно
отправлять почтовые сообщения. Тогда
практически каждый пользователь получает
возможность посылать почтовые сообщения
другим пользователям почтового сервера,
даже если получатель имеет учетную запись
пользователя на той же рабочей станции, что
и отправитель. Затем любой пользователь,
обратившись к почтовому серверу, может
получить предназначенные ему сообщения,
независимо от того, на какой рабочей
станции он находится.
Формат параметра nullclient
следующий:
FEATURE ('nullclient', 'address'),
где address —
имя хоста центрального почтового
сервера. Чтобы избежать конфликтных
ситуаций с DNS, в качестве адреса можно
использовать IP-адрес. В этом случае IP-адрес
необходимо заключать в квадратные скобки ( [] ).
Для обеспечения возможности
приема и пересылки сообщений от хост-компьютеров
вне вашего домена применяется параметр promiscouous_relay.
По умолчанию sendmail не пересылает
электронную почту между двумя внешними
доменами. Этим параметром могут
воспользоваться спамеры, чтобы скрыть свое
действительное местонахождение. Включение
параметра promiscouous_relay
очень опасно, особенно если ваш почтовый
сервер напрямую подключен к сети Internet. Если
кто-либо нечистый на руку обнаружит это
свойство вашего почтового сервера, то он
сможет использовать его в целях рассылки
нежелательной почты. Лучше всего в такой
ситуации воспользоваться одним из
описанных ранее параметров sendmail для работы
в режиме access_db,
который также описан выше.
Параметр
позволяет программе sendmail, на основе списка
выявленных спамеров сети Internet,
игнорировать некоторые сообщения (удобно,
не правда ли?). На сервере
ведется так называемый текущий "черный
список" (Realtime Blackhole List). Программа sendmail
может обращаться к этому серверу, чтобы
удостовериться в том, что сообщение с
определенным адресом не находится в "черном
списке". Подробности о работе "черного
списка" можно найти по адресу: http://maps.vix.com..
Параметр redirect
позволяет sendmail выдавать сообщение об
ошибке для пользователей, адреса которых
были перенаправлены на другой хост с
помощью метки .REDIRECT.
Благодаря параметру relay_based_on_MX
программа sendmail принимает входящие
сообщения на основе МХ-записей системы DNS
для определенного имени хоста в поле
заголовка получателя. Этот параметр может
использоваться для разрешения вашему
почтовому серверу принимать почту,
предназначенную для других хостов, если их
МХ-записи в системе DNS указывают на ваш
почтовый сервер (см. лекцию 4 "DNS и доменные
имена").
Параметр relay_entire_domain
позволяет sendmail принимать сообщения,
адресованные на любой из хостов вашего
домена. Этот параметр может использоваться
для создания почтового шлюза, куда будут
поступать сообщения со всех хостов домена и
пересылаться дальше через центральный
почтовый сервер.
Параметр relay_hosts_only
позволяет программе sendmail использовать в
базе данных access.db
имена хостов и объявлять их с помощью метки RELAY.
Обычно в базе данных access.db
используются только доменные имена (см.
описание параметра access.db ).
Параметр relay_local_from
позволяет программе sendmail отправлять
сообщения, которые получены от локального
хоста. Он может быть применен
пользователями, использующими удаленные
клиентские программы, которые пересылают
почту через ваш почтовый сервер SMTP. По
умолчанию программами-клиентами в качестве
адреса отправителя используется доменное
имя
Параметр smrsh
указывает sendmail применять на сервере
электронной почты запрещенную оболочку smrsh
вместо общепринятой /etc/sh.
Она позволяет администратору почтового
сервера управлять программами, которые
могут быть запущены посредством
электронной почты.
С помощью параметра stickyhost
программа sendmail изменяет способ обработки
сообщений, в адресной части которых
присутствует локальное доменное имя.
Обычно сообщения, направленные
пользователям stickyhost,
можно добиться того, что программа sendmail
будет по-разному воспринимать адреса user
и user@localhost.
Параметр use_ct_file
позволяет программе sendmail, запущенной с
параметром -f,
читать из файла доверенных пользователей
системы. (см. лекции 10, "Программа sendmail"). По
умолчанию имя этого файла — /etc/sendmail.ct.
Чтобы изменить имя файла, его можно
переопределить с помощью переменной confCT_FILE.
Параметр use_cw_file
позволяет программе sendmail читать из
файла альтернативных имен для почтового
сервера. По умолчанию для этой цели
используется файл /etc/sendmail.cw.
Если необходимо изменить местоположение
файла или переименовать его, это можно
сделать с помощью переменной confCW_FILE
(см. ниже раздел "Определение
параметров sendmail").
Параметр uucpdomain
позволяет программе sendmail создавать и
использовать базу данных хостов UUCP. Для
сопоставления старых и новых имен хостов UUCP
в этом параметре используется тот же
механизм, что и в параметре domaintable.
По умолчанию база данных находится в файле /etc/uucpdomain.db.
Этот параметр используется довольно редко,
в основном при переходе от одних имен
хостов UUCP к другим.
С помощью параметра virtusertable
программа sendmail может присваивать
псевдонимы пользователям других доменов и
направлять почту в определенное место. В
качестве приемной стороны может выступать
локальный или какой-либо другой почтовый
сервер. Этот параметр позволяет на одном
почтовом сервере вести несколько
виртуальных доменов. Формат директивы с virtusertable
следующий:
FEATURE ('virtusertable', 'db [options]'),
где db —
тип базы данных, а options —
опции, необходимые для создания и
обеспечения доступа к базе данных. По
умолчанию в файле /etc/virtusertable
используется тип хешированной базы данных
Berkeley. Формат текстового файла virtusertable следующий:
alias location,
где alias —
виртуальный псевдоним, а location —
имя хоста или адрес электронной почты, на
который sendmail будет пересылать сообщения.
Этот параметр может
использоваться для virtusertable.
1 @smallorg.org mailbox@ispmail.net 2 @anotherorg.org %1@smallorg.org 3 webmaster@smallorg.org rich@smallorg.org
В строке 1 листинга 11.4 вся почта
для домена smallorg.org
перенаправляется в один почтовый ящик с
именем mailbox@ispmail.net.
Такая технология стала довольно популярной
у провайдеров Internet, так как в этом случае
клиенту предоставляется один почтовый ящик,
обслуживающий весь домен. Сообщения из него
могут быть получены по протоколу POP3 (см.
лекцию 6, "Протокол POP3") и далее
распределяться по соответствующим
идентификаторам пользователей на почтовом
сервере домена (см. лекцию 13, "Подключение
почтового сервера к провайдеру Internet").
В строке 2 почтовые сообщения
перенаправляются с одного хоста на другой.
Переменная %1
используется в качестве маркера для
повтора имени пользователя в адресе
электронной почты. Таким образом, сообщение,
адресованное prez@anotherorg.org,
будет перенаправлено на адрес prez@smallorg.org.
В строке 3 сообщения перенаправляются из одного почтового ящика в другой почтовый ящик.
Директива: define
Директива define
используется для установки определенных
опций файла конфигурации sendmail. Большинство
опций конфигурации sendmail могут изменять
свое значение под действием директивы define.
Формат директивы define
следующий:
define ('option', 'value'),
где option —
описываемая опция, а value —
ее новое значение. Названия опций файла
конфигурации обычно начинаются с 'conf'.
Чаще всего для почтового сервера
на базе ОС Linux требуется изменение опции SMART_HOST.
С ее помощью объявляется удаленный хост,
который принимает все почтовые сообщения,
адресованные удаленным хостам. Формат
опций SMART_HOST в
директиве define следующий:
define ('SMART_HOST', 'mailer:host'),
где —
почтовый протокол, необходимый для
доставки сообщения, а host —
это узловой хост.
Директива: MASQUERADE_AS
Директива MASQUERADE_AS
позволяет sendmail выступать в другом качестве.
Формат директивы следующий:
MASQUERADE_AS ('hostname'),
где hostname —
полнофункциональное имя хоста и/или имя
домена. Программа sendmail во всех исходящих
сообщениях будет заменять имя hostname
на значение, заданное директивой MASQUERADE_AS
hostname. Такое действие распространяется и
на поле FROM:
заголовка сообщения формата RFC822.
Хотя на первый взгляд присвоение
хосту другого имени может показаться
бессмысленным, все же эта директива очень
полезна. В сети Internet использование доменных
имен в качестве адресов электронной почты
стало стандартом де-факто. Так, например,
адрес prez@smallorg.org
понятней, чем адрес prez@mailhost1.smallorg.org. Именно для этого и
предназначена директива MASQUERADE_AS.
Имя хоста почтового сервера
будет замещаться в sendmail именем домена путем
использования доменного имени в качестве
значения MASQUERADE_AS.
Тогда в поле FROM:
заголовка сообщения будет представлен
короткий и понятный адрес без полного имени
хоста, а лишь с именем домена. Естественно,
при этом МХ-запись в DNS для данного домена
должна указывать на почтовый сервер, в
противном случае обратный адрес будет
работать некорректно (см. лекцию 13, "Подключение
почтового сервера к провайдеру Internet").
Директива:
Директива
применяется для определения почтовой
системы, которая будет работать в связке с
sendmail при транспортировке сообщений. Каждый
протокол, используемый для транспортировки
почты, должен быть описан директивой .
Формат директивы
следующий:
MAILER('mailer'),
где —
название системы транспортировки почты (почтовой
программы). Все типы систем транспортировки
почты, доступные для использования в sendmail,
представлены в табл. 11.3.
| Почтовая программа | Описание |
|---|---|
cyrus |
Определяет
почтовые программы cyrus
и cyrusbb |
fax |
Определяет факсимильную почтовую программу |
local |
Определяет
программы local
и prog
(включены автоматически) |
mail11 |
Определяет
почтовую программу mail11
для работы в сети |
phquery |
Определяет
программу phquery |
pop |
Определяет почтовую программу для работы по протоколу POP3 |
procmail |
Определяет
почтовую программу procmail |
smtp |
Определяет почтовую программу для работы по протоколу SMTP |
uucp |
Определяет почтовую программу для работы по протоколу UUCP |
usenet |
Определяет почтовую программу для работы с конференциями Usenet |
Все почтовые программы должны
быть объявлены в конце файла макросов.
Кроме того, при объявлении почтовых
программ smtp и uucp
нужно первой объявлять почтовую
программу smtp или uucp-dom
(которая посылает почту в формате SMTP
через UUCP-соединение), в противном случае они
не будут работать корректно.
После создания файла макросов
можно выполнить обработать его
макропроцессором GNU m4
и получить тестовый файл конфигурации.
Такая операция выполняется с помощью
следующей команды:
m4 test.mc > test.cf
Результатом выполнения этой
команды будет файл test.cf,
который представляет собой
полнофункциональный файл конфигурации
sendmail. В следующем разделе приводятся
примеры файлов конфигурации, созданных
именно таким образом.
И, наконец, можно провести
тестирование файла конфигурации, запустив
программу sendmail с параметрами -bt
и -C, как было
сказано в лекции 10, "Программа sendmail". Если
созданный вами файл конфигурации выполняет
все необходимые действия, то можно сделать
резервную копию рабочего файла /etc/sendmail.cf
и на его место скопировать новый. Ввиду того
что программа sendmail считывает свой файл
конфигурации лишь один раз при запуске,
следует перезапустить программу sendmail,
чтобы она перечитала файл конфигурации. Это
можно сделать с помощью сигнала SIGHUP,
посланного процессу sendmail. В листинге 11.5
представлен пример этой процедуры.
1 [carol@shadrach carol]$ su 2 Password: 3 [root@shadrach carol]# ps ax | grep sendmail 4 14061 ? S 0:00 sendmail: accepting connections on port 25 5 26666 pts/0 S 0:00 grep sendmail 6 [root@shadradh carol]# kill -HUP 14061 7 [root@shadrach carol]# ps ax | grep sendmail 8 26667 ? S 0:00 sendmail: accepting connections on port 25 9 26670 pts/0 S 0:00 grep sendmail 10 [root@shadrach carol]#
Создавать файлы конфигурации
sendmail с помощью файлов макросов и
макропроцессора m4
довольно просто. Однако иногда нелегко
определить, какие директивы следует
включить в ту или иную конфигурацию
почтового сервера. В этом разделе
рассматривается несколько типовых
конфигураций почтовых серверов и файлы
макросов к ним, из которых затем создаются
файлы конфигурации для обработки почты в
заданных условиях.
При подключении рабочей станции
на базе ОС Linux к компьютерной сети офиса
необходимо знать, каким образом она будет
обмениваться электронной почтой с другими
рабочими станциями и с внешним миром. Самое
простое и очевидное решение в этом случае —
использование центрального почтового
сервера, на который поступает вся почта.
Этот почтовый сервер иногда называют
почтовым хабом (
(рис 11.3) Рабочая станция под управлением ОС Linux и почтовый серверСогласно этой схеме, все сообщения электронной почты от рабочей станции на базе ОС Linux пересылаются прямо на почтовый сервер, независимо от того, адресованы ли они локальным или внешним пользователям. В листинге 11.6 представлен пример файла макросов, который может использоваться для создания файла конфигурации, обслуживающего работу обычной рабочей станции на базе ОС Linux.
1 divert(-1)
2 divert(0)
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('nullclient', '[192.168.1.1]')dnl
В строках 1–4 листинга 11.6 заданы
стандартные для начала файла макросов
директивы. В строке 6 определяется
директива nullclient
с IP-адресом 192.168.1.1.
Такая конфигурация описывает обычную
рабочую станцию на базе Linux, когда вся почта
направляется на почтовый сервер.
Сохраните файл макросов,
представленный в листинге 11.6, как test1.mc.
Затем можно сгенерировать тестовый файл
конфигурации:
m4 test1.mc > test1.cf
После этого протестируйте
получившийся файл конфигурации test1.cf
с программой sendmail. В листинге 11.7 показано,
как это сделать.
1 [carol@shadrach carol]$ /usr/sbin/sendmail -bt -C testl.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich 5 rewrite: ruleset 3 input: rich 6 rewrite: ruleset 3 returns: rich @ [ 192 . 168 . 1 . 1] 7 rewrite: ruleset 0 input: rich @ [ 192 . 168 . 1 . 1 ] 8 rewrite: ruleset 0 returns: $# nullclient $@[ 192 . 168 . 1 . 1 ] $: rich @ [ 192 . 168 . 1 . 1 ] 9 > 3,0 rich@otherhost.org 10 rewrite: ruleset 3 input: rich @ otherhost . org 11 rewrite: ruleset 3 returns: rich @ otherhost . org 12 rewrite: ruleset 0 input: rich @ otherhost . org 13 rewrite: ruleset 0 returns: $# nullclient $@ [ 192 . 168 . 1 . 1 ] $: rich @ otherhost . org 14 > 15 [carol@shadrach carol]$
В строке 1 листинга 11.7 задана
команда на запуск программы sendmail для
тестирования нового файла конфигурации. В
режиме тестирования sendmail администратору
почтовой системы предоставляется
возможность моделирования различных
конфигураций. В строке 4 на локальном
почтовом адресе происходит тестирование
наборов правил 3 и 0. В строке 8 представлены
конечные результаты работы файла
конфигурации sendmail. Почтовое сообщение
будет переслано пользователю rich
на хосте с адресом 192.168.1.1,
как и планировалось. Последнее
тестирование адреса электронной почты
происходит в строке 9. Из строки 13 видно, что
результатом работы sendmail является пересылка
сообщения на почтовый узел с адресом 192.168.1.1.
Такое поведение sendmail соответствует
обработке директивы nullclient
из файла макросов. Для выхода из режима
тестирования sendmail нажмите клавиши "Ctrl"
+"D". После того как
полнофункциональный файл конфигурации
получен, можно заменить им текущий файл
конфигурации, который обычно находится в /etc/sendmail.cf.
Не забудьте перезапустить программу sendmail,
чтобы она перечитала новый файл
конфигурации.
Еще одна из типовых конфигураций почтового сервера представляет собой почтовый сервер с постоянным подключением к сети Internet. Ввиду того что соединение поддерживается круглосуточно и по выделенному каналу, почтовый сервер может пересылать почту для внешних пользователей непосредственно удаленному серверу электронной почты, указанному в записи МХ системы DNS. На рис. 11.4 представлена схема подключения почтового сервера к сети Internet по выделенной линии.
(рис 11.4) Подключение почтового сервера к сети Internet по выделенной линииРаботая по выделенной линии, необходимо провести комплекс мероприятий по защите почтового сервера от спамеров. В то же время нужно помнить, что этот сервер является для пользователей вашего домена почтовым шлюзом и необходимо обеспечить возможность пересылки их почтовых сообщений в сеть Internet и обратно. В листинге 11.8 представлен пример файла макросов, из которого можно получить необходимый файл конфигурации sendmail.
1 divert(-1)
2 divert(0)dnl
3 include ('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE ('always_add_domain')dnl
9 FEATURE('virtusertable')dnl
10 FEATURE('local_procmail')dnl
11 FEATURE('access_db')dnl
12 FEATURE('blacklist_recipients')dnl
13
14 MASQUERADE_AS('smallorg.org')dnl
15
16 MAILER('smtp')dnl
17 MAILER('procmail')dnl
В строках 6–12 листинга 11.8
определены директивы, которые требуются
почтовому серверу для данной конфигурации.
В строке 11 разрешается доступ к базе данных,
в которой содержится доменное имя или адрес
локальной IP-сети. С ее помощью локальные
пользователи могут пересылать через
почтовый шлюз сообщения для внешних
пользователей. В строке 14 определяется
доменное имя организации, которое будет
подставляться в почтовые адреса исходящих
почтовых сообщений. Затем с помощью
макропроцессора m4
можно сгенерировать тестовый файл
конфигурации sendmail. Он представлен в
листинге 11.9.
1 [kevin@shadrach kevin]$ /usr/sbin/sendmail -bt -C test2.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich@otherhost.org 5 rewrite: ruleset 3 input: rich otherhost . org 6 rewrite: ruleset 96 input: rich < @ otherhost . org > 7 rewrite: ruleset 96 returns: rich < @ otherhost . org > 8 rewrite: ruleset 3 returns: rich < @ otherhost . org > 9 rewrite: ruleset 0 input: rich < @ otherhost . org > 10 rewrite: ruleset 199 input: rich < @ otherhost . org > 11 rewrite: ruleset 199 returns: rich < @ otherhost . org > 12 rewrite: ruleset 98 input: rich < @ otherhost . org > 13 rewrite: ruleset 98 returns: rich < @ otherhost . org > 14 rewrite: ruleset 198 input: rich < @ otherhost . org > 15 rewrite: ruleset 95 input: < > rich < @ otherhost . org > 16 rewrite: ruleset 95 returns: rich < @ otherhost . org > 17 rewrite: ruleset 198 returns: $# esmtp $@ otherhost . org $: rich < @ otherhost . org > 18 rewrite: ruleset 0 returns:$# esmtp $@ otherhost . org $: rich < @ otherhost . org > 19 > 20[kevin@shadrach kevin]$
В строке 1 листинга 11.9 задается команда для тестирования нового файла конфигурации, полученного из файла макросов, который представлен в листинге 11.8. В строке 4 задается команда для тестирования удаленного адреса электронной почты с применением наборов правил 3 или 0. В строке 18 вы видите конечный результат тестирования — почтовое сообщение передается непосредственно на хост получателя с использованием протокола ESMTP, что и является целью этой операции.
Третья типовая схемы включения почтового сервера на базе ОС Linux представляет собой подключение почтового сервера в режиме почтового шлюза к сети Internet через коммутируемое РРР-соединение. В этом случае почтовый сервер под управлением ОС Linux пересылает все сообщения, адресованные во внешний мир, на общий почтовый шлюз, или, как его еще называют, "интеллектуальный хост" (от англ. smart host — Прим. пер.). На рис. 11.5 представлена схема подключения почтового сервера к сети Internet с использованием коммутируемого соединения.
(рис 11.5) Подключение почтового сервера на базе ОС Linux к сети Internet по коммутируемой линииОсновная особенность такого подключения почтового сервера — наличие интеллектуального хоста, которому пересылаются все исходящие почтовые сообщения. Для организации работы по коммутируемой линии используется протокол IP, поэтому для пересылки сообщений на интеллектуальный хост вполне можно использовать протокол SMTP. В листинге 11.10 представлен пример файла макросов для такой конфигурации.
1 divert(-1)
2 divert(0)dnl
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE('always_add_domain')dnl
9 FEATURE('virtusertable')dnl
10 FEATURE('local_procmail')dnl
11 FEATURE('access_db')dnl
12 FEATURE('blacklist_recipients')dnl
13
14 MASQUERADE_AS('smallorg.org')dnl
15
16 MAILER('smtp')dnl
17 MAILER('procmail')dnl
18
19 define('SMART_HOST', 'smtp:mail.isp.net')dnl
В строках 6–12 листинга 11.10
определены основные директивы, которые
будут использоваться почтовым сервером на
базе ОС Linux. В строках 6 и 7 программе sendmail
указывается использовать механизм
подстановки имен (маскарадинга), который
определен для всех сообщений в строке 14.
Строка 19 существенно отличается от
предыдущего примера: Здесь, вместо
пересылки сообщений непосредственно на
хост-получатель, определяется
интеллектуальный хост, на который будет
поступать вся почта, адресованная во
внешний мир. Таким образом, вся почта,
адресованная вне локального домена, будет
пересылаться с помощью протокола SMTP на хост mail.isp.net. Далее за
доставку почты конечным пользователям
полностью отвечает интеллектуальный хост.
В листинге 11.11 представлены результаты
тестирования файла конфигурации для
подобного подключения.
1 [lizzy@shadrach lizzy]$ /usr/sbin/sendmail -bt -C test3.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich@otherhost.org 5 rewrite: ruleset 3 input: rich @ otherhost . org 6 rewrite: ruleset 96 input: rich < @ otherhost . org > 7 rewrite: ruleset 96 returns: rich < @ otherhost . org > 8 rewrite: ruleset 3 returns: rich < @ otherhost . org > 9 rewrite: ruleset 0 input: rich < @ otherhost . org > 10 rewrite: ruleset 199 input: rich < @ otherhost . org > 11 rewrite: ruleset 199 returns: rich < @ otherhost . org > 12 rewrite: ruleset 98 input: rich < @ otherhost . org > 13 rewrite: ruleset 98 returns: rich < @ otherhost . org > 14 rewrite: ruleset 198 input: rich < @ otherhost . org > 15 rewrite: ruleset 95 input: < smtp : mail . isp . net > rich < @ otherhost . org > 16 rewrite: ruleset 95 returns: $# smtp $@ mail . isp . net $: rich < @ otherhost . org > 17 rewrite: ruleset 198 returns: $# smtp $@ mail . isp . net $: rich < @ otherhost . org > 18 rewrite: ruleset 0 returns: $# smtp $@ mail . isp . net $: rich < @ otherhost . org > 19 > 20 [lizzy@shadrach lizzy]$
В строке 1 листинга 11.11 программа
sendmail запускается в режиме тестирования
нового файла конфигурации. В строке 4
производится отправка тестового сообщения
пользователю на удаленном почтовом узле.
После нескольких итераций в строке 18 можно
видеть результаты выполнения теста —
почтовое сообщение пересылается через хост mail.isp.net с помощью
протокола SMTP, как и указано в файле
конфигурации. Затем этот хост должен
доставить сообщение на хост-получатель otherhost.org.
Рассмотрим еще один вид подключения почтового сервера на базе ОС Linux к провайдеру Internet — через UUCP-соединение. В этом случае также требуется пересылка всей почты, адресованной внешним пользователям, через интеллектуальный хост. Но на этот раз интеллектуальный хост подключается к локальному серверу на базе ОС Linux с помощью протокола UUCP, так что отпадает необходимость в сложных операциях по блокированию спамеров. На рис. 11.6 показана схема подключения почтового сервера через UUCP-соединение.
(рис 11.6) Подключение почтового сервера на базе ОС Linux к сети Internet через UUCP-соединениеДля организации работы UUCP-соединения провайдер Internet должен обеспечить прием и буферизацию почты, адресованной на ваш локальный почтовый сервер. Для этого провайдер Internet должен обслуживать домен, в котором находится ваш почтовый сервер, как виртуальный домен. В листинге 11.12 представлен пример файла макросов с описанием такой конфигурации почтового сервера.
1 divert(-1)
2 divert(0)dnl
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE('always_add_domain')dnl
9 FEATURE('local_procmail')dnl
10
11 MASQUERADE_AS('smallorg.org')dnl
12
13 MAILER('smtp')dnl
14 MAILER('procmail')dnl
15 MAILER('uucp')dnl
16
17 define('SMART_HOST', 'uucp-dom:ispmail')dnl
В строках 1–9 используются те же
самые параметры, что и в листинге 11.10.
Главное отличие между этими двумя
сценариями — строки 15, где определяется
тип почтовой программы UUCP, и 17, где
определяется другой интеллектуальный хост.
Почтовая программа используется для
передачи почтовых сообщений через UUCP-соединение
без изменения m4
создается файл конфигурации. В листинге 11.13
представлены результаты тестирования
файла конфигурации для подключения
почтового сервера через UUCP-соединение.
1 [erin@shadrach erin]$ /usr/sbin/sendmail -bt -C test4.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich@otherhost.org 5 rewrite: ruleset 3 input: rich @ otherhost . org 6 rewrite: ruleset 96 input: rich < @ otherhost . org > 7 rewrite: ruleset 96 returns: rich < @ otherhost . org > 8 rewrite: ruleset 3 returns: rich < @ otherhost . org > 9 rewrite: ruleset 0 input: rich < @ otherhost . org > 10 rewrite: ruleset 199 input: rich < @ otherhost . org > 11 rewrite: ruleset 199 returns: rich < @ otherhost . org > 12 rewrite: ruleset 98 input: rich < @ otherhost . org > 13 rewrite: ruleset 98 returns: rich < @ otherhost . org > 14 rewrite: ruleset 198 input: rich < @ otherhost . org > 15 rewrite: ruleset 95 input: < uucp-dom : ispmail > rich < @ otherhost . org > 16 rewrite: ruleset 95 returns: $# uucp-dom $@ ispmail $: rich < @ otherhost . org > 17 rewrite: ruleset 198 returns: $# uucp-dom $@ ispmail $: rich < @ otherhost . org > 18 rewrite: ruleset 0 returns: $# uucp-dom $@ ispmail $: rich < @ otherhost . org > 19 > 20 [erin@shadrach erin]$
В строке 1 листинга 11.13 вы снова
видите команду на запуск sendmail для
тестирования нового файла конфигурации, а в
строке 4 задается команда на тестирование
адреса электронной почты с использованием
наборов правил 3 и 0. Конечные результаты
тестирования представлены в строке 18. Как
видите, сообщение передано хосту ispmail
с использованием протокола UUCP. Именно эти
действия и ожидались, исходя из параметров
файла макросов. Итак, в этом случае хост ispmail
будет пересылать наше тестовое сообщение
получателю.
Самым универсальным почтовым
транспортным агентом для платформы Linux
является программа sendmail. Ее новые версии
можно получить по сети Internet и установить у
себя на сервере. Установив sendmail, необходимо
сконфигурировать ее для работы в своей сети.
Для создания файла конфигурации sendmail из
небольших файлов макросов применяется
макропроцессор GNU m4.
В файле конфигурации задаются все опции и
параметры для работы sendmail на определенном
сервере. После их описания создается файл
конфигурации sendmail, и тогда программа готова
к работе.
В этой лекции
В предыдущей лекции
были детально рассмотрены программа sendmail и
ее файл конфигурации. В этой лекции даются
рекомендации, где получить и как установить
программу sendmail на своем сервере.
Рассматривается также макропроцессор GNU m4,
который используется в программе sendmail для
упрощения создания файла конфигурации.
Попросту говоря, функции, включаемые
администратором почтовой системы в файл
конфигурации, реализуются в простых файлах
макросов. Затем эти файлы макросов
обрабатываются макропроцессором, и
создается полноценный файл конфигурации.
За многие годы существования программы sendmail было разработано много ее различных версий. В настоящее время широко используется версия 8.9.3 (последняя версия 8.10.2 — Прим. пер.). Так как в программе sendmail появляются все новые и новые дополнения или исправления ошибок, целесообразно устанавливать самую последнюю версию sendmail. Версия sendmail 8.9.3 была разработана в основном для защиты от TCP-атак типа "отказ в обслуживании" (Denial of Service), против которых была беззащитна программа sendmail. После уточнения всех параметров файла конфигурации можно обновлять бинарные программы без его воссоздания. В этом разделе описывается установка программы sendmail из бинарных программных пакетов, входящих в поставку большинства версий ОС Linux, или из исходных кодов sendmail, полученных с Web-сервера sendmail, путем их компиляции.
Большинство версий ОС Linux поставляется с бинарными пакетами sendmail. В этих программных пакетах содержится скомпилированная программа sendmail и базовые файлы конфигурации, которые необходимы для работы sendmail с конкретной версией ОС Linux. К сожалению, последние версии sendmail в большинство версий ОС Linux не входят. Хотя, как правило, более старые версии sendmail лучше работают с небольшими почтовыми серверами. Если требуется подключение почтового сервера на базе ОС Linux в сеть Internet, то желательно получить новую версию sendmail. Это можно сделать на Web-сайте http://www.sendmail.org. Если же имеющаяся у вас ОС Linux поставляется с последней версией sendmail — прекрасно! Берите и пользуйтесь! Если нет, то можно получить последнюю версию, следуя инструкциям, приведенным ниже.
В большинстве версий ОС Linux, в
которых используется механизм установки
бинарных программных пакетов RPM (RedHat, Mandrake и
Caldera), программный пакет sendmail разбит на три
отдельных пакета. Так, в Mandrake Linux 6.0
используются sendmail-8.9.3-9mdk.i586.rpm, sendmail-cf-8.9.3-9mdk.i586.rpm
и sendmail-doc-8.9.3-9mdk.i586.rpm.
Эти файлы составляют программный пакет
sendmail версии 8.9.3. Для просмотра файлов,
содержащихся в каждом дистрибутивном
пакете можно использовать утилиту RPM. На рис. 11.1
показан внешний вид утилиты kpackage
для графической оболочки X Window, в которой
отображается информация о пакете sendmail-8.9.3-9mdk.i586.rpm.
(рис 11.1) Окно утилиты kpackage c файлом sendmail-8.9.3-9mdk.i586.rpmВ листинге 11.1 представлены файлы,
которые входят в состав пакета sendmail-8.9.3-9mdk.i586.rpm.
В этом RPM-пакете содержатся основные
бинарные файлы, сконфигурированные для
работы в ОС Mandrake Linux.
1 /etc/aliases 2 /etc/aliases.db 3 /etc/mail 4 /etc/mail/deny 5 /etc/mail/deny.db 6 /etc/mail/ip_allow 7 /etc/mail/name_allow 8 /etc/mail/relay_allow 9 /etc/rc.d/init.d/sendmail 10 /etc/rc.d/rc0.d/K30sendmail 11 /etc/rc.d/rc1.d/K30sendmail 12 /etc/rc.d/rc2.d/S80sendmail 13 /etc/rc.d/rc3.d/S80sendmail 14 /etc/rc.d/rc4.d/S80sendmail 15 /etc/rc.d/rc5.d/S80sendmail 16 /etc/rc.d/rc6.d/K30sendmail 17 /etc/sendmail.cf 18 /etc/sendniail.cw 19 /etc/smrsh 20 /etc/sysconfig/sendmail 21 /usr/bin/hoststat 22 /usr/bin/mailq 23 /usr/bin/makemap 24 /usr/bin/newaliases 25 /usr/bin/purgestat 26 /usr/bin/rmail 27 /usr/lib/sendmail 28 /usr/lib/sendmail.hf 29 /usr/man/man1/mailq.1.bz2 30 /usr/man/man1/newaliases.1.bz2 31 /usr/man/man5/aliases.5.bz2 32 /usr/man/man8/mailstats.8.bz2 33 /usr/man/man8/makemap.8.bz2 34 /usr/man/man8/praliases.8.bz2 35 /usr/man/man8/rmail.8.bz2 36 /usr/man/man8/sendmail.8.bz2 37 /usr/sbin/mailstats 38 /usr/sbin/makemap 39 /usr/sbin/praliases 40 /usr/sbin/sendmail 41 /usr/sbin/smrsh 42 /var/log/sendmail.st 43 /var/spool/mqueue
В строках 21–26 листинга 11.1
указывается, что выполняемые модули sendmail
находятся в Mandrake Linux в каталоге /usr/bin.
Сама же программа sendmail находится в каталоге /usr/sbin. Строки 9–16
отображают сценарии sendmail, которые
применяются для автоматического запуска и
останова sendmail на различных уровнях init.
В строках 29–36 вы видите файлы, в которых
хранятся справочные сведения о работе sendmail.
В строке 43 для хранения почтовых сообщений,
ожидающих доставки, создается каталог /var/spool/mqueue.
Как видите, в этот пакет включены все файлы,
необходимые для конфигурирования,
поддержки работоспособности и справки о
sendmail.
Для установки RPM-пакета sendmail
можно использовать специальную программу
инсталляции kpackage
в сеансе X Window. Также можно использовать
обычную утилиту rpm из
командной строки. Для этого следует
выполнить (с правами пользователя root ):
rpm -Uvh sendmail-8.9.3-9mdk.i586.rpm.
Второй файл дистрибутива — sendmail-cf-8.9.3-9mdk.i586.rpm —
включает в себя файлы, необходимые для
реконструкции файла конфигурации с помощью
макропроцессора GNU m4
(см. раздел "Конфигурирование sendmail"). После
его установки необходимые файлы
конфигурации sendmail помещаются в каталог /usr/lib/sendmail-cf.
Этот пакет можно также установить, с
помощью команды rpm -Uvh,
как показано выше.
И, наконец, третий файл — это sendmail-doc-8.9.3-9mdk.i586.rpm,
который включает в себя всю документацию на
программный продукт sendmail. Все файлы с
документацией о sendmail помещаются в каталог /usr/doc/sendmail.
Туда входят документы "Руководство по
установке и работе с sendmail" и "Введение в
sendmail" в формате PostScript. Все эти файлы также
можно установить с помощью команды rpm -Uvh, как показано выше.
Пользователи программы sendmail
должны постоянно следить за новостями с Web-сервера sendmail.org. Новую
версию sendmail всегда можно получить в виде
исходного кода с сервера ftp.sendmail.org.
Все дистрибутивы sendmail находятся на нем в
каталоге /pub/sendmail.
Как правило, там всегда можно получить
несколько версий sendmail, поэтому внимательно
читайте описания версий и комментарии к ним.
В то время, когда писалась эта книга,
текущей версией была sendmail.8.9.3.tar.gz
(а к моменту выхода книги — sendmail.11.0.tar.gz ).
Это файл сжатый UNIX-утилитой tar
и программой GNU-проекта zip.
Имеется также альтернативный файл sendmail.8.9.3.tar.Z,
где используется метод компрессии,
принятый в UNIX. Скорее всего, пользователи ОС
Linux предпочтут получить файл, сжатый
программой GNU zip,
так как он меньшего размера.
Методы сжатия файлов в ОС Linux
В операционной системе Linux
поддерживается несколько методов сжатия
файлов. Три наиболее популярных метода
сжатия базируются на использовании утилиты
сжатия UNIX ( .Z
файлы), утилиты GNU gzip (.gz
файлы) и утилиты поблочной сортировки
сжатых файлов ( .bz2
файлы). Часто файлы дистрибутивов
предлагаются сжатыми во всех трех
вариантах. Для сокращения времени загрузки
по сети пользователи ОС Linux могут получить
файл с наименьшим размером. Для извлечения
из архивов исходных кодов файлов .Z
и .gz
достаточно задать команду tar
с параметром -z.
После помещения исходного кода в рабочий каталог его можно извлечь с помощью команды:
tar -zxvf sendmail.8.9.3.tar.gz
С помощью этой команды файлы
исходного кода извлекаются в базовый
подкаталог рабочего каталога с именем sendmail-8.9.3.
Далее из исходного кода
необходимо скомпилировать бинарные
выполняемые модули. Для этого перейдите в
подкаталог sendmail-8.9.3 и
выполните в нем команду make all. В поставку sendmail входит подкаталог BuildTools,
который активно используется в процессе
компиляции. С целью создания бинарных
пакетов из различных Makefile
применяется файл сценария Build.
Этот сценарий определяет, запущена ли
система, выдавая команду uname -a и создавая
подкаталоги, где содержатся выполняемые
модули, на основе значения uname.
В системе Mandrake 6.0 с помощью этого сценария
создаются каталоги с именами obj.Linux.2.2.9-19mdk.i586.
Для установки созданных
выполняемых модулей sendmail в подкаталоге sendmail-8.9.3
воспользуйтесь командой make install. Но прежде убедитесь, что у вас
имеются права пользователя root,
в противном случае вам не будет дано право
поместить файлы в соответствующие каталоги
в системе с ОС Linux.
После того как программа sendmail
установлена, ее нужно сконфигурировать для
работы на конкретном почтовом сервере под
управлением ОС Linux с учетом окружения. В
лекции 10, "Программа sendmail", описывается
файл конфигурации и его основные параметры.
Однако не отчаивайтесь, существует более
простой способ конфигурирования sendmail, чем
настройка параметров файла конфигурации
вручную строчка за строчкой. Для создания
небольшого и понятного файла макросов, в
котором описываются все параметры sendmail,
администраторы почтовых систем могут
воспользоваться макропроцессором GNU m4.
Измененный файл макросов налагается на
базовый файл макросов sendmail, и на его основе
с помощью процессора создается файл
конфигурации sendmail.cf.
В этом разделе рассматриваются вопросы
работы с макропроцессором GNU m4
и формат файла макросов, который
используется при создании файла
конфигурации.
Для создания файла конфигурации
sendmail из набора файлов макросов
используется макропроцессор GNU m4.
Как только файл макросов считывается на
входе, он расширяется и записывается в
выходной файл.
Некоторые макроопределения
создаются самим процессором m4.
Другие макроопределения могут быть
определены отдельно и обрабатываться при
запуске макропроцессора. Кроме расширения
макросов, макропроцессор m4
имеет и другие функции, такие как запуск
оболочки командной строки, манипулирование
текстом и выполнение арифметических
операций с целыми числами. Текущая версия
макропроцессора GNU m4 —
1.4, и она поставляется с большинством версий
ОС Linux. На рис. 11.2 демонстрируется схема
считывания процессором m4
созданного файла макроса и его
преобразование в файл конфигурации с
применением заранее определенных файлов
макросов.
(рис 11.2) Схема работы макропроцессора GNU m4В начальную конфигурацию sendmail
входят файлы макросов m4,
в которых определены общие настройки и
параметры sendmail. Местоположение начальной
конфигурации sendmail может меняться. В Mandrake Linux
пакет начальной конфигурации называется sendmail-8.9.3-9mdk.i586.rpm.
При его установке в системе создается
каталог /usr/lib/sendmail-cf,
в который помещаются файлы макросов sendmail.
Если же программа sendmail получена с сайта sendmail.org
в сети Internet, то файлы макросов конфигурации
находятся в подкаталоге cf, который, в свою очередь, расположен в
исходном каталоге (для рассматриваемой
нами версии это sendmail-8.9.3 ).
Не стоит заблуждаться. Файл
конфигурации sendmail можно полностью создать
и вручную без помощи m4.
Однако следует помнить о том, что
разработчики sendmail создали этот
макропроцессор именно для того, чтобы
упростить администраторам систем
электронной почты создание файла
конфигурации sendmail. В макропроцессоре m4
используются собственные директивы
макроязыка, с помощью которых генерируются
соответствующие строки файла конфигурации.
Изучение директив m4
в этом разделе является альтернативой
изучению строк конфигурации sendmail и
созданию файла конфигурации вручную.
Генерация файла конфигурации с помощью
макропроцессора m4
намного проще, чем его создание вручную.
Часто для создания полнофункционального
файла конфигурации для sendmail нужен
небольшой файл макросов. При написании
директив для m4
полезно знать настройки и параметры sendmail —
это облегчит понимание директив, которые
вносятся в файл макросов. Если этот раздел
покажется вам непонятным, обратитесь к
примерам, приведенным в конце этой лекции. В
них достаточно ясно иллюстрируется работа
директив m4 при
создании файла конфигурации sendmail.
Макропроцессор m4
считывает исходный файл макросов и на
основе заранее определенных директив
создает файл конфигурации sendmail. Каждая
макродиректива m4 в
файле макросов расширяется и преобразуется
в раздел конфигурационного файла sendmail.
Например, директивой m4:
FEATURE ('virtusertable', 'hash /etc/virtusertable')
в файле конфигурации sendmail
создается К' -строка
следующего содержания:
#Virtual user table (maps incoming users) Kvirtuser hash /etc/virtusertable
Когда известны настройки и
параметры sendmail, с помощью директив m4
можно приступить к созданию файла
макросов. Затем на его основе
макропроцессор m4 сможет
создать полнофункциональный файл
конфигурации для sendmail. Несмотря на то что
данный пример весьма тривиален, часто одна
директива макроса может в файле
конфигурации выразится в десятке строк, что,
безусловно, экономит время при его создании.
В этом разделе мы рассмотрим макродирективы. Их можно свободно применять при создании файла макросов. В последующих разделах демонстрируются возможные комбинации директив и создание файла конфигурации для работы sendmail в определенной системе.
Предупреждение
Будьте внимательны!
Макропроцессор m4 чувствителен
к регистру задаваемых символов. Перед
обработкой файла макросов убедитесь в том,
что все директивы заданы в соответствующем
регистре, в противном случае они не будут
восприняты правильно. Помните также, что во
многих директивах начало параметра
обозначается символом обратного апострофа
( ` ).
Применяйте именно этот символ, а не какой-либо
иной. Конец параметра, наоборот, помечается
символом апострофа ( ' ).
Часто ошибки в этих символах являются
причиной неправильной работы файла
конфигурации sendmail.
Чаще всего первыми двумя директивами в файлах макросов следуют:
divert (-1) divert (0)
Директива divert(-1) используется
для очистки буфера макросов от данных,
оставшихся от предыдущих попыток создания
файлов макросов. Директива divert(0) применяется для обозначения начала
нового файла макросов.
Еще одна необходимая директива — include. По этой
директиве строки из других файлов макросов
могут быть использованы данным файлом
макросов. Как правило, для нормальной
обработки полученного файла макросов
необходимо включить в него файл cf.m4,
который находится в том же подкаталоге, что
и файл конфигурации sendmail. В зависимости от
местоположения файлов конфигурации sendmail,
директива include
должна представлять собой примерно
следующее:
include ('/usr/lib/sendmail-cf/m4/cf.m4')dnl
Благодаря служебному слову dnl
в конце директивы include
макропроцессор определяет конец строки.
Поскольку макропроцесоор m4
является программой, обрабатывающей
непрерывный поток данных, то он не
распознает символы конца строки. Для
сокращения генерации пустых строк в
конечном файле конфигурации и используется
специальная метка dnl,
которая указывает на конец директивы.
Директива: OSTYPE
В файле макросов обязательно
должна присутствовать директива OSTYPE.
Благодаря ей, в зависимости от типа
операционной системы, макропроцессор m4
определяет местоположение выполняемых и
конфигурационных файлов. Формат этой
директивы следующий:
OSTYPE ('os')dnl
Здесь os —
название операционной системы, в
которой работает программа sendmail. Поскольку
эта книга ориентирована на почтовые
серверы под управлением ОС Linux, то здесь
следует указать linux OSTYPE. Объявление OSTYPE распространяется на весь файл
макросов с переменными, заданными m4.
Когда директиве задается тип операционной
системы linux, то в
файл макросов автоматически включается
файл linux.m4. В
листинге 11.2 представлена версия файла linux.m4
для операционной системы Mandrake Linux 6.0.
1 divert (-1)
2 #
3 # Copyright (c) 1998 sendmail, Inc. All rights reserved.
4 # Copyright (c) 1983 Eric P. Allman. All rights reserved.
5 # Copyright (c) 1988, 1993
6 # The Regents of the University of California. All rights reserved.
7 #
8 # By using this file, you agree to the terms and conditions set
9 # forth in the LICENSE file which can be found at the top level of
10 # the sendmail distribution.
11 #
12 #
13
14 divert(0)
15 VERSIONID('@(#)linux.m4 8.7 (Berkeley) 5/19/1998')
16 define('PROCMAIL_MAILER_PATH','/usr/bin/procmail')dnl
17 # define('LOCAL_MAILER_FLAGS', 'ShPfn')dnl
18 # define('LOCAL_MAILER_ARGS', 'procmail -a $h -d $u')dnl
19 define ('STATUS_FILE', '/var/log/sendmail.st')dnl
В строках 16–19 листинга 11.2
переопределяется местоположение
выполняемого файла procmail
и файла статистики sendmail.st
для данной версии ОС Linux. Все эти
настройки будут впоследствии отражены в
файле конфигурации sendmail.cf.
Путь к выполняемому файлу procmail
задается в описании почтовой программы procmail,
а путь к файлу статистики задается
параметром STATUS_FILE.
Далее в этом разделе мы более подробно
рассмотрим работу директивы define.
Директива: DOMAIN
Для определения специальных
методов обработки сообщений применяется
директива DOMAIN. В
табл. 11.1 представлены значения, которые
могут быть использованы с этой директивой.
| Значение | Описание |
|---|---|
BITNET_RELAY |
Хост будет
принимать почту, адресованную в |
DECNET_RELAY |
Хост будет
принимать почту, адресованную в |
FAX_RELAY |
Хост будет
принимать почту, адресованную псевдо-домену .FAX |
LUSER_RELAY |
Хост будет обрабатывать адреса, которые принадлежат локальным пользователям |
UUCP_RELAY |
Хост будет
принимать почту, адресованную в UUCP |
Формат директивы DOMAIN
следующий:
DOMAIN (relay, 'mailer:hostname'),
где relay —
одно из значений представленных в табл. 11.1, — почтовая
программа, которая используется для
доставки сообщений, а hostname —
имя удаленного хоста, на который
передаются сообщения.
Директива: FEATURE
С помощью директивы FEATURE
заранее заданные параметры sendmail
посредством макропроцессора m4
заносятся в файл конфигурации sendmail, сводя к
минимуму действия со стороны
администратора почтовой системы. Формат
директивы FEATURE
следующий:
FEATURE ('value', '[options]'),
где value —
значение параметра, который включается
в файл конфигурации, а options —
параметры, необходимые для работы
директивы. В этом разделе дается описание
параметров, доступных в sendmail версии 8.9.3.
Параметр accept_unqualified_senders
разрешает программе sendmail принимать
сообщения, в поле заголовка FROM:
которых отсутствует полное имя хоста. Это
может понадобиться в том случае, если
локальная почтовая программа посылает
сообщения без добавления имени локального
хоста в поле FROM:.
С помощью параметра accept_unresolvable_domains
программа sendmail может принимать даже те
сообщения, в поле заголовка FROM:
которых указаны адреса с ошибками в
именах домена. Как правило, sendmail проверяет
корректность доменных имен, полученных из
поля FROM:
заголовка сообщения формата RFC822. Если имя
домена невозможно идентифицировать, то
sendmail не принимает такое сообщение. Если же
ваш почтовый шлюз не может обрабатывать
запросы системы DNS на преобразование
доменных имен, то, возможно, придется
воспользоваться этим параметром, чтобы
программа sendmail принимала сообщения даже от
"неправильных", с точки зрения DNS, доменов.
Параметр access_db
позволяет sendmail обращаться к базе данных
разрешения доступа. База данных разрешения
доступа позволяет администратору почтовой
системы задавать список доменов и
пользователей, которые подвергаются
специальной обработке. К ним относятся узлы,
которым разрешено использовать сервер
электронной почты в качестве транзитного
узла, или узлы, которые блокируются и почта
от них через сервер электронной почты не
передается. Этот параметр весьма полезен,
когда возникает необходимость в
идентификации почтовых спамеров и
последующего блокирования поступающих от
них сообщений.
По умолчанию с помощью параметра access_db
создается хешированная база данных типа
Berkeley. При этом сама база данных помещается в
каталог /etc/mail/access.
Значения в базе данных, заданные по
умолчанию, могут изменяться с помощью
параметров в формате:
FEATURE ('access_db', 'db [options]'),
где db —
тип базы данных, а options —
параметры, необходимые для создания базы
данных. Например, база данных по умолчанию
может быть создана с помощью следующей
директивы:
FEATURE ('access_db', 'hash -o /etc/mail/access')
Согласно этой директиве,
создается хешированная база данных в
каталоге /etc/mail/access.
Так как в ней задан тип базы данных 'hash',
то для создания базы данных из текстового
файла в ОС Linux необходимо использовать
специальную функцию makemap.
В текстовом файле содержится список
доменных имен либо IP-адресов и действий над
ними. Местоположение всех файлов должно
быть явно определено — так же, как и все
действия, которые будут совершаться
программой sendmail. В табл. 11.2 представлен
список ярлыков, которые применяются в базе
данных разрешения доступа.
| Ярлык | Описание |
|---|---|
OK |
Принимать почту, даже если другими правилами предусмотрено обратное |
RELAY |
Принимать или передавать почту только для указанных доменов |
REJECT |
Отвергать все сообщения с заданными отправителями или получателями с выдачей сообщения об ошибке |
DISCARD |
Отвергать все сообщения с заданными отправителями или получателями без выдачи сообщения об ошибке |
nnn text |
Отвергать все
сообщения с заданными отправителями или
получателями с выдачей сообщения об
ошибке в формате RFC821 с номером nnn и текстом text |
В листинге 11.3 приведен пример текстового файла базы данных разрешения доступа, который применяется для блокирования почты от определенных узлов.
1 spammer@ispmail.net REJECT 2 microsoft.com DISCARD 3 linux.org OK 4 smallorg.org RELAY 5 198.162.10 550 Sorry, I can't relay mail for your domain
В строке 1 листинга 11.3 показано,
что все сообщения, полученные или
направленные на адрес ,
будут отвергнуты. В строке 2 определяется,
что все сообщения, полученные или
отправленные в домен microsoft.com,
будут уничтожены и ни одна из сторон не
получит даже сообщения об ошибке. В строке 3
задается, что все сообщения, полученные от
любого пользователя из домена linux.org,
будут приняты почтовым сервером. Строка 4
разрешает почтовому серверу выступать в
качестве access_db для
блокирования почты, поступающей от
определенных IP-сетей, с выдачей
определенного сообщения об ошибке.
Для того чтобы создать базу
данных разрешения доступа из файла access.txt,
задайте команду:
makemap hash /etc/mail/access < /etc/mail/access.txt
В ОС Linux утилита makemap
создает хешированную базу данных из
текстового файла, к которой затем сможет
обращаться программа sendmail.
Если в конфигурации sendmail
используется механизм подстановки адресов
(см. раздел " MASQUERADE_AS "
далее в этой лекции), так называемый
маскарадинг (от англ. masquerade —
притворяться), то его можно задействовать
включением параметра allmasquerade.
Если используется механизм маскарадинга,
то при включенной параметре allmasquerade
адреса получателей преобразуются в адреса,
указанные в директиве MASQUERADE_AS.
Будьте осторожны, применяя этот параметр,
так как программа sendmail может неправильно
воспринимать адреса при использовании
локальных псевдонимов. Этот параметр чаще
всего используется при необходимости
маскарадинга нескольких хостов.
Для включения доменного имени во
все адреса, даже если сообщения адресованы
локальным пользователям, применяется
параметр always_add_domain.
По умолчанию, сообщения, которые посылаются
локальным пользователям от других
локальных пользователей, не содержат в поле
адреса доменного имени, так как в этом
случае обмен электронной почтой происходит
внутри одного хоста.
Параметр bitdomain
предназначен для поиска хостов сети
в таблице, заданной директивой. Формат
директивы следующий:
FEATURE ('bitdomain', 'db [options]'),
где db — тип
используемой базы данных, а options —
опции, необходимые для создания базы данных.
Значения по умолчанию — это тип базы
данных hash и имя
файла базы данных /etc/bitdomain.db.
Параметр bestmx_is_local
позволяет программе sendmail принимать почту
таким образом, как будто она адресована
FEATURE ('bestmx_is_local', 'domains...')
Если список доменов задан опцией domains...,
то параметр действителен только для
указанных доменов.
Параметр blacklist_recipients
позволяет программе sendmail создавать списки
пользователей, от которых почта
приниматься не будет. Эти же пользователи
не смогут получить доступ к базе данных
управления доступом, о которой говорилось
выше при описании параметра access_db.
Часто эти списки называют "черными
списками". По сути, параметр blacklist_recipients
расширяет действие параметра access_db,
так как в "черный список" могут заноситься
и отдельный адрес электронной почты, и имя
отдельного хоста, и даже имя домена.
Создание базы данных доменных
имен для быстрого преобразования имен
доменов производится с помощью параметра domaintable.
В принципе это нестандартная функция, хотя
иногда может понадобиться изменить имя
домена на ходу (было изменено доменное имя,
а некоторые клиенты не обратили на этот
факт должного внимания). С помощью
параметра domaintable
создается база данных доменных имен
определенного типа и в заданном каталоге.
По умолчанию это хешированная база данных,
которая создается в каталоге /etc/domain.
В первом поле текстовой базы данных всегда
должно присутствовать старое доменное имя,
а во втором поле — новое доменное имя.
Для преобразования базы данных из
текстового формата в приемлемый для чтения
программой sendmail формат воспользуйтесь
командой makemap.
Параметр genericstable
позволяет sendmail создавать таблицу имен
пользователей и доменных имен, значения из
которой могут использоваться для
подстановки имен на ходу. Данная функция
также не является стандартной, но она может
пригодиться при переходе системы
электронной почты с одних доменных имен на
другие или при широкомасштабной смене имен
пользователей. При создании этой базы
данных можно использовать принятые типы
баз данных и специальные опции. И конечно же,
для преобразования базы данных из
текстового формата в приемлемый для чтения
программой sendmail формат следует
использовать makemap.
Параметр limited_masquerade
обеспечивает избирательность работы sendmail,
если задан параметр . В то время как параметра
применяется сразу ко всем хостам, указанным
в строках конфигурации Cw
или Fw, параметр limited_masquerade
выполняет маскарадинг только хостов,
указанных в строках конфигурации DM.
С помощью параметра local_lmtp
программа sendmail может использовать LMTP-совместимую
почтовую программу для доставки локальной
электронной почты. Как правило, это не
касается систем на базе ОС Linux, так что
данный параметр обычно не используется.
Параметр local_procmail
указывает программе sendmail использовать в
качестве локальной почтовой программы
программу procmail. В
почтовых серверах на базе ОС Linux этот
параметр используется довольно часто, так
как программа procmail
входит в поставку практически всех версий
ОС Linux. Формат этой директивы следующий:
FEATURE ('local_procmail', 'pathname'),
где pathname —
путь к каталогу, в котором хранится
программа procmail.
По умолчанию она находится в каталоге,
определенном переменной PROCMAIL_MAILER_PATH
директивы OSTYPE.
Как правило, это каталог /usr/local/bin/procmail.
Из листинга 11.2 видно, что в Mandrake Linux
используется каталог /usr/bin/procmail.
С помощью параметра loose_relay_check
изменяется метод обработки адресов,
содержащих символ %.
Поскольку способ адресации электронной
почты с использованием символа %
уже не применяется, этот параметр
практически не используется.
Для создания программой sendmail
базы данных хостов с описанием способов
доставки почты к ним применяется параметр mailertable.
Формат директивы mailertable
следующий:
FEATURE ('mailertable', 'db [options]'),
где db —
тип базы данных, а options —
опции, необходимые для создания и
обеспечения доступа к базе данных. Для
приведения этой базы данных к стандартному
виду из текстового применяется команда makemap.
При этом формат текстового файла должен
быть следующим:
host mailer:domain,
где host —
это хост получателя или доменное имя
получателя, —
тип почтовой программы, которая должна
использоваться при доставке сообщений, а domain —
удаленный хост, которому должно
пересылаться сообщение. Таким образом, с
помощью базы данных mailertable
можно пересылать на один удаленный хост
сообщения, отправленные либо определенному
хосту, либо в определенный домен. Этот
параметр особенно полезен при работе UUCP-узлов.
На всех узлах UUCP есть необходимость в
создании базы данных, содержащей списки
узлов, которым нужно пересылать почту для
хостов, не имеющих непосредственного UUCP-соединения
с данным узлом.
Параметр masquerade_entire_domain
позволяет программе sendmail осуществлять
маскарадинг всех сообщений, поступающих из
определенного домена, а не только от
отдельного почтового сервера. Если же
сервер электронной почты работает в режиме
шлюза для всех хостов домена, то этот
параметр дает возможность пользователям
всех хостов использовать преобразованное
доменное имя. Например, в домене имеется три
почтовых сервера — shadrach.smallorg.org, meshach.smallorg.org и abednego.smallorg.org.
У всех сообщений электронной почты,
посылаемых через почтовый шлюз
пользователями этих трех серверов, в
адресной части будет присутствовать не имя
хоста, откуда они поступили, а подставное
доменное имя smallorg.org.
Это довольно удобное решение для того,
чтобы скрыть почтовые серверы в крупной
сети.
Параметр masquerade_envelope
позволяет программе sendmail использовать на
конверте имена отправителя и получателя с
преобразованным доменным именем (после
процедуры ).
Параметр nocanonify
указывает sendmail не передавать адреса,
соответствующие наборам правил, добавляя
доменные имена к именам хостов. Этот
параметр чаще всего применяется почтовыми
шлюзами, поскольку приходящие на них
сообщения обычно уже имеют полный адрес
электронной почты. Таким образом, нет
необходимости в дальнейшей обработке
адресов.
Параметр nodns
был практически исключен из sendmail версии 8.9.3.
Однако он еще встречается в некоторых
старых файлах макросов, так что не помешает
знать его назначение. Параметр nodns
сигнализирует о том, что почтовый сервер
для преобразования имен хостов не
использует систему DNS. Если же вы
воспользуетесь этим параметром, работая с
sendmail версии 8.9.3, то от макропроцессора m4
получите сообщение об ошибке следующего
содержания:
FEATURE (nodns) is no-op. Use ServiceSwitchFile (/etc/service.switch) if your OS does not provide its own instead.
В sendmail версии 8.9.3 имена хостов
преобразовываются в адреса в соответствии
с тем, как указано в файле /etc/service.switch.
В ОС Linux этот файл обычно находится в /etc/nsswitch.conf.
В нем переменная host
указывает порядок, в котором и ОС Linux и sendmail
будут преобразовывать имена хостов в IP-адреса.
С помощью параметра nouucp
программе sendmail запрещается изменять адреса,
заданные в формате UUCP.
В отдельных случаях используется
параметр nullclient.
Он обычно применяется в файле макросов
самостоятельно и предназначен для
представления почтового сервера в виде
обычной рабочей станции, которая почту (в
том числе, адресованную локальным
пользователям) не обрабатывает, а лишь
пересылает ее другому почтовому серверу.
Совместно с параметром nullclient
может использоваться только параметр nocanonify,
описанный выше.
Если в вашей сети используются
рабочие станции под управлением ОС Linux или
ОС UNIX, то параметр nullclient
может оказаться весьма полезным. Если
пользователи вынуждены перемещаться от
одной станции к другой в течение дня, то
довольно сложно выделить отдельный хост и
имя пользователя для отправки сообщений
электронной почты. Проблема решается
выделением отдельного почтового сервера,
на который с любой рабочей станции можно
отправлять почтовые сообщения. Тогда
практически каждый пользователь получает
возможность посылать почтовые сообщения
другим пользователям почтового сервера,
даже если получатель имеет учетную запись
пользователя на той же рабочей станции, что
и отправитель. Затем любой пользователь,
обратившись к почтовому серверу, может
получить предназначенные ему сообщения,
независимо от того, на какой рабочей
станции он находится.
Формат параметра nullclient
следующий:
FEATURE ('nullclient', 'address'),
где address —
имя хоста центрального почтового
сервера. Чтобы избежать конфликтных
ситуаций с DNS, в качестве адреса можно
использовать IP-адрес. В этом случае IP-адрес
необходимо заключать в квадратные скобки ( [] ).
Для обеспечения возможности
приема и пересылки сообщений от хост-компьютеров
вне вашего домена применяется параметр promiscouous_relay.
По умолчанию sendmail не пересылает
электронную почту между двумя внешними
доменами. Этим параметром могут
воспользоваться спамеры, чтобы скрыть свое
действительное местонахождение. Включение
параметра promiscouous_relay
очень опасно, особенно если ваш почтовый
сервер напрямую подключен к сети Internet. Если
кто-либо нечистый на руку обнаружит это
свойство вашего почтового сервера, то он
сможет использовать его в целях рассылки
нежелательной почты. Лучше всего в такой
ситуации воспользоваться одним из
описанных ранее параметров sendmail для работы
в режиме access_db,
который также описан выше.
Параметр
позволяет программе sendmail, на основе списка
выявленных спамеров сети Internet,
игнорировать некоторые сообщения (удобно,
не правда ли?). На сервере
ведется так называемый текущий "черный
список" (Realtime Blackhole List). Программа sendmail
может обращаться к этому серверу, чтобы
удостовериться в том, что сообщение с
определенным адресом не находится в "черном
списке". Подробности о работе "черного
списка" можно найти по адресу: http://maps.vix.com..
Параметр redirect
позволяет sendmail выдавать сообщение об
ошибке для пользователей, адреса которых
были перенаправлены на другой хост с
помощью метки .REDIRECT.
Благодаря параметру relay_based_on_MX
программа sendmail принимает входящие
сообщения на основе МХ-записей системы DNS
для определенного имени хоста в поле
заголовка получателя. Этот параметр может
использоваться для разрешения вашему
почтовому серверу принимать почту,
предназначенную для других хостов, если их
МХ-записи в системе DNS указывают на ваш
почтовый сервер (см. лекцию 4 "DNS и доменные
имена").
Параметр relay_entire_domain
позволяет sendmail принимать сообщения,
адресованные на любой из хостов вашего
домена. Этот параметр может использоваться
для создания почтового шлюза, куда будут
поступать сообщения со всех хостов домена и
пересылаться дальше через центральный
почтовый сервер.
Параметр relay_hosts_only
позволяет программе sendmail использовать в
базе данных access.db
имена хостов и объявлять их с помощью метки RELAY.
Обычно в базе данных access.db
используются только доменные имена (см.
описание параметра access.db ).
Параметр relay_local_from
позволяет программе sendmail отправлять
сообщения, которые получены от локального
хоста. Он может быть применен
пользователями, использующими удаленные
клиентские программы, которые пересылают
почту через ваш почтовый сервер SMTP. По
умолчанию программами-клиентами в качестве
адреса отправителя используется доменное
имя
Параметр smrsh
указывает sendmail применять на сервере
электронной почты запрещенную оболочку smrsh
вместо общепринятой /etc/sh.
Она позволяет администратору почтового
сервера управлять программами, которые
могут быть запущены посредством
электронной почты.
С помощью параметра stickyhost
программа sendmail изменяет способ обработки
сообщений, в адресной части которых
присутствует локальное доменное имя.
Обычно сообщения, направленные
пользователям stickyhost,
можно добиться того, что программа sendmail
будет по-разному воспринимать адреса user
и user@localhost.
Параметр use_ct_file
позволяет программе sendmail, запущенной с
параметром -f,
читать из файла доверенных пользователей
системы. (см. лекции 10, "Программа sendmail"). По
умолчанию имя этого файла — /etc/sendmail.ct.
Чтобы изменить имя файла, его можно
переопределить с помощью переменной confCT_FILE.
Параметр use_cw_file
позволяет программе sendmail читать из
файла альтернативных имен для почтового
сервера. По умолчанию для этой цели
используется файл /etc/sendmail.cw.
Если необходимо изменить местоположение
файла или переименовать его, это можно
сделать с помощью переменной confCW_FILE
(см. ниже раздел "Определение
параметров sendmail").
Параметр uucpdomain
позволяет программе sendmail создавать и
использовать базу данных хостов UUCP. Для
сопоставления старых и новых имен хостов UUCP
в этом параметре используется тот же
механизм, что и в параметре domaintable.
По умолчанию база данных находится в файле /etc/uucpdomain.db.
Этот параметр используется довольно редко,
в основном при переходе от одних имен
хостов UUCP к другим.
С помощью параметра virtusertable
программа sendmail может присваивать
псевдонимы пользователям других доменов и
направлять почту в определенное место. В
качестве приемной стороны может выступать
локальный или какой-либо другой почтовый
сервер. Этот параметр позволяет на одном
почтовом сервере вести несколько
виртуальных доменов. Формат директивы с virtusertable
следующий:
FEATURE ('virtusertable', 'db [options]'),
где db —
тип базы данных, а options —
опции, необходимые для создания и
обеспечения доступа к базе данных. По
умолчанию в файле /etc/virtusertable
используется тип хешированной базы данных
Berkeley. Формат текстового файла virtusertable следующий:
alias location,
где alias —
виртуальный псевдоним, а location —
имя хоста или адрес электронной почты, на
который sendmail будет пересылать сообщения.
Этот параметр может
использоваться для virtusertable.
1 @smallorg.org mailbox@ispmail.net 2 @anotherorg.org %1@smallorg.org 3 webmaster@smallorg.org rich@smallorg.org
В строке 1 листинга 11.4 вся почта
для домена smallorg.org
перенаправляется в один почтовый ящик с
именем mailbox@ispmail.net.
Такая технология стала довольно популярной
у провайдеров Internet, так как в этом случае
клиенту предоставляется один почтовый ящик,
обслуживающий весь домен. Сообщения из него
могут быть получены по протоколу POP3 (см.
лекцию 6, "Протокол POP3") и далее
распределяться по соответствующим
идентификаторам пользователей на почтовом
сервере домена (см. лекцию 13, "Подключение
почтового сервера к провайдеру Internet").
В строке 2 почтовые сообщения
перенаправляются с одного хоста на другой.
Переменная %1
используется в качестве маркера для
повтора имени пользователя в адресе
электронной почты. Таким образом, сообщение,
адресованное prez@anotherorg.org,
будет перенаправлено на адрес prez@smallorg.org.
В строке 3 сообщения перенаправляются из одного почтового ящика в другой почтовый ящик.
Директива: define
Директива define
используется для установки определенных
опций файла конфигурации sendmail. Большинство
опций конфигурации sendmail могут изменять
свое значение под действием директивы define.
Формат директивы define
следующий:
define ('option', 'value'),
где option —
описываемая опция, а value —
ее новое значение. Названия опций файла
конфигурации обычно начинаются с 'conf'.
Чаще всего для почтового сервера
на базе ОС Linux требуется изменение опции SMART_HOST.
С ее помощью объявляется удаленный хост,
который принимает все почтовые сообщения,
адресованные удаленным хостам. Формат
опций SMART_HOST в
директиве define следующий:
define ('SMART_HOST', 'mailer:host'),
где —
почтовый протокол, необходимый для
доставки сообщения, а host —
это узловой хост.
Директива: MASQUERADE_AS
Директива MASQUERADE_AS
позволяет sendmail выступать в другом качестве.
Формат директивы следующий:
MASQUERADE_AS ('hostname'),
где hostname —
полнофункциональное имя хоста и/или имя
домена. Программа sendmail во всех исходящих
сообщениях будет заменять имя hostname
на значение, заданное директивой MASQUERADE_AS
hostname. Такое действие распространяется и
на поле FROM:
заголовка сообщения формата RFC822.
Хотя на первый взгляд присвоение
хосту другого имени может показаться
бессмысленным, все же эта директива очень
полезна. В сети Internet использование доменных
имен в качестве адресов электронной почты
стало стандартом де-факто. Так, например,
адрес prez@smallorg.org
понятней, чем адрес prez@mailhost1.smallorg.org. Именно для этого и
предназначена директива MASQUERADE_AS.
Имя хоста почтового сервера
будет замещаться в sendmail именем домена путем
использования доменного имени в качестве
значения MASQUERADE_AS.
Тогда в поле FROM:
заголовка сообщения будет представлен
короткий и понятный адрес без полного имени
хоста, а лишь с именем домена. Естественно,
при этом МХ-запись в DNS для данного домена
должна указывать на почтовый сервер, в
противном случае обратный адрес будет
работать некорректно (см. лекцию 13, "Подключение
почтового сервера к провайдеру Internet").
Директива:
Директива
применяется для определения почтовой
системы, которая будет работать в связке с
sendmail при транспортировке сообщений. Каждый
протокол, используемый для транспортировки
почты, должен быть описан директивой .
Формат директивы
следующий:
MAILER('mailer'),
где —
название системы транспортировки почты (почтовой
программы). Все типы систем транспортировки
почты, доступные для использования в sendmail,
представлены в табл. 11.3.
| Почтовая программа | Описание |
|---|---|
cyrus |
Определяет
почтовые программы cyrus
и cyrusbb |
fax |
Определяет факсимильную почтовую программу |
local |
Определяет
программы local
и prog
(включены автоматически) |
mail11 |
Определяет
почтовую программу mail11
для работы в сети |
phquery |
Определяет
программу phquery |
pop |
Определяет почтовую программу для работы по протоколу POP3 |
procmail |
Определяет
почтовую программу procmail |
smtp |
Определяет почтовую программу для работы по протоколу SMTP |
uucp |
Определяет почтовую программу для работы по протоколу UUCP |
usenet |
Определяет почтовую программу для работы с конференциями Usenet |
Все почтовые программы должны
быть объявлены в конце файла макросов.
Кроме того, при объявлении почтовых
программ smtp и uucp
нужно первой объявлять почтовую
программу smtp или uucp-dom
(которая посылает почту в формате SMTP
через UUCP-соединение), в противном случае они
не будут работать корректно.
После создания файла макросов
можно выполнить обработать его
макропроцессором GNU m4
и получить тестовый файл конфигурации.
Такая операция выполняется с помощью
следующей команды:
m4 test.mc > test.cf
Результатом выполнения этой
команды будет файл test.cf,
который представляет собой
полнофункциональный файл конфигурации
sendmail. В следующем разделе приводятся
примеры файлов конфигурации, созданных
именно таким образом.
И, наконец, можно провести
тестирование файла конфигурации, запустив
программу sendmail с параметрами -bt
и -C, как было
сказано в лекции 10, "Программа sendmail". Если
созданный вами файл конфигурации выполняет
все необходимые действия, то можно сделать
резервную копию рабочего файла /etc/sendmail.cf
и на его место скопировать новый. Ввиду того
что программа sendmail считывает свой файл
конфигурации лишь один раз при запуске,
следует перезапустить программу sendmail,
чтобы она перечитала файл конфигурации. Это
можно сделать с помощью сигнала SIGHUP,
посланного процессу sendmail. В листинге 11.5
представлен пример этой процедуры.
1 [carol@shadrach carol]$ su 2 Password: 3 [root@shadrach carol]# ps ax | grep sendmail 4 14061 ? S 0:00 sendmail: accepting connections on port 25 5 26666 pts/0 S 0:00 grep sendmail 6 [root@shadradh carol]# kill -HUP 14061 7 [root@shadrach carol]# ps ax | grep sendmail 8 26667 ? S 0:00 sendmail: accepting connections on port 25 9 26670 pts/0 S 0:00 grep sendmail 10 [root@shadrach carol]#
Создавать файлы конфигурации
sendmail с помощью файлов макросов и
макропроцессора m4
довольно просто. Однако иногда нелегко
определить, какие директивы следует
включить в ту или иную конфигурацию
почтового сервера. В этом разделе
рассматривается несколько типовых
конфигураций почтовых серверов и файлы
макросов к ним, из которых затем создаются
файлы конфигурации для обработки почты в
заданных условиях.
При подключении рабочей станции
на базе ОС Linux к компьютерной сети офиса
необходимо знать, каким образом она будет
обмениваться электронной почтой с другими
рабочими станциями и с внешним миром. Самое
простое и очевидное решение в этом случае —
использование центрального почтового
сервера, на который поступает вся почта.
Этот почтовый сервер иногда называют
почтовым хабом (
(рис 11.3) Рабочая станция под управлением ОС Linux и почтовый серверСогласно этой схеме, все сообщения электронной почты от рабочей станции на базе ОС Linux пересылаются прямо на почтовый сервер, независимо от того, адресованы ли они локальным или внешним пользователям. В листинге 11.6 представлен пример файла макросов, который может использоваться для создания файла конфигурации, обслуживающего работу обычной рабочей станции на базе ОС Linux.
1 divert(-1)
2 divert(0)
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('nullclient', '[192.168.1.1]')dnl
В строках 1–4 листинга 11.6 заданы
стандартные для начала файла макросов
директивы. В строке 6 определяется
директива nullclient
с IP-адресом 192.168.1.1.
Такая конфигурация описывает обычную
рабочую станцию на базе Linux, когда вся почта
направляется на почтовый сервер.
Сохраните файл макросов,
представленный в листинге 11.6, как test1.mc.
Затем можно сгенерировать тестовый файл
конфигурации:
m4 test1.mc > test1.cf
После этого протестируйте
получившийся файл конфигурации test1.cf
с программой sendmail. В листинге 11.7 показано,
как это сделать.
1 [carol@shadrach carol]$ /usr/sbin/sendmail -bt -C testl.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich 5 rewrite: ruleset 3 input: rich 6 rewrite: ruleset 3 returns: rich @ [ 192 . 168 . 1 . 1] 7 rewrite: ruleset 0 input: rich @ [ 192 . 168 . 1 . 1 ] 8 rewrite: ruleset 0 returns: $# nullclient $@[ 192 . 168 . 1 . 1 ] $: rich @ [ 192 . 168 . 1 . 1 ] 9 > 3,0 rich@otherhost.org 10 rewrite: ruleset 3 input: rich @ otherhost . org 11 rewrite: ruleset 3 returns: rich @ otherhost . org 12 rewrite: ruleset 0 input: rich @ otherhost . org 13 rewrite: ruleset 0 returns: $# nullclient $@ [ 192 . 168 . 1 . 1 ] $: rich @ otherhost . org 14 > 15 [carol@shadrach carol]$
В строке 1 листинга 11.7 задана
команда на запуск программы sendmail для
тестирования нового файла конфигурации. В
режиме тестирования sendmail администратору
почтовой системы предоставляется
возможность моделирования различных
конфигураций. В строке 4 на локальном
почтовом адресе происходит тестирование
наборов правил 3 и 0. В строке 8 представлены
конечные результаты работы файла
конфигурации sendmail. Почтовое сообщение
будет переслано пользователю rich
на хосте с адресом 192.168.1.1,
как и планировалось. Последнее
тестирование адреса электронной почты
происходит в строке 9. Из строки 13 видно, что
результатом работы sendmail является пересылка
сообщения на почтовый узел с адресом 192.168.1.1.
Такое поведение sendmail соответствует
обработке директивы nullclient
из файла макросов. Для выхода из режима
тестирования sendmail нажмите клавиши "Ctrl"
+"D". После того как
полнофункциональный файл конфигурации
получен, можно заменить им текущий файл
конфигурации, который обычно находится в /etc/sendmail.cf.
Не забудьте перезапустить программу sendmail,
чтобы она перечитала новый файл
конфигурации.
Еще одна из типовых конфигураций почтового сервера представляет собой почтовый сервер с постоянным подключением к сети Internet. Ввиду того что соединение поддерживается круглосуточно и по выделенному каналу, почтовый сервер может пересылать почту для внешних пользователей непосредственно удаленному серверу электронной почты, указанному в записи МХ системы DNS. На рис. 11.4 представлена схема подключения почтового сервера к сети Internet по выделенной линии.
(рис 11.4) Подключение почтового сервера к сети Internet по выделенной линииРаботая по выделенной линии, необходимо провести комплекс мероприятий по защите почтового сервера от спамеров. В то же время нужно помнить, что этот сервер является для пользователей вашего домена почтовым шлюзом и необходимо обеспечить возможность пересылки их почтовых сообщений в сеть Internet и обратно. В листинге 11.8 представлен пример файла макросов, из которого можно получить необходимый файл конфигурации sendmail.
1 divert(-1)
2 divert(0)dnl
3 include ('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE ('always_add_domain')dnl
9 FEATURE('virtusertable')dnl
10 FEATURE('local_procmail')dnl
11 FEATURE('access_db')dnl
12 FEATURE('blacklist_recipients')dnl
13
14 MASQUERADE_AS('smallorg.org')dnl
15
16 MAILER('smtp')dnl
17 MAILER('procmail')dnl
В строках 6–12 листинга 11.8
определены директивы, которые требуются
почтовому серверу для данной конфигурации.
В строке 11 разрешается доступ к базе данных,
в которой содержится доменное имя или адрес
локальной IP-сети. С ее помощью локальные
пользователи могут пересылать через
почтовый шлюз сообщения для внешних
пользователей. В строке 14 определяется
доменное имя организации, которое будет
подставляться в почтовые адреса исходящих
почтовых сообщений. Затем с помощью
макропроцессора m4
можно сгенерировать тестовый файл
конфигурации sendmail. Он представлен в
листинге 11.9.
1 [kevin@shadrach kevin]$ /usr/sbin/sendmail -bt -C test2.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich@otherhost.org 5 rewrite: ruleset 3 input: rich otherhost . org 6 rewrite: ruleset 96 input: rich < @ otherhost . org > 7 rewrite: ruleset 96 returns: rich < @ otherhost . org > 8 rewrite: ruleset 3 returns: rich < @ otherhost . org > 9 rewrite: ruleset 0 input: rich < @ otherhost . org > 10 rewrite: ruleset 199 input: rich < @ otherhost . org > 11 rewrite: ruleset 199 returns: rich < @ otherhost . org > 12 rewrite: ruleset 98 input: rich < @ otherhost . org > 13 rewrite: ruleset 98 returns: rich < @ otherhost . org > 14 rewrite: ruleset 198 input: rich < @ otherhost . org > 15 rewrite: ruleset 95 input: < > rich < @ otherhost . org > 16 rewrite: ruleset 95 returns: rich < @ otherhost . org > 17 rewrite: ruleset 198 returns: $# esmtp $@ otherhost . org $: rich < @ otherhost . org > 18 rewrite: ruleset 0 returns:$# esmtp $@ otherhost . org $: rich < @ otherhost . org > 19 > 20[kevin@shadrach kevin]$
В строке 1 листинга 11.9 задается команда для тестирования нового файла конфигурации, полученного из файла макросов, который представлен в листинге 11.8. В строке 4 задается команда для тестирования удаленного адреса электронной почты с применением наборов правил 3 или 0. В строке 18 вы видите конечный результат тестирования — почтовое сообщение передается непосредственно на хост получателя с использованием протокола ESMTP, что и является целью этой операции.
Третья типовая схемы включения почтового сервера на базе ОС Linux представляет собой подключение почтового сервера в режиме почтового шлюза к сети Internet через коммутируемое РРР-соединение. В этом случае почтовый сервер под управлением ОС Linux пересылает все сообщения, адресованные во внешний мир, на общий почтовый шлюз, или, как его еще называют, "интеллектуальный хост" (от англ. smart host — Прим. пер.). На рис. 11.5 представлена схема подключения почтового сервера к сети Internet с использованием коммутируемого соединения.
(рис 11.5) Подключение почтового сервера на базе ОС Linux к сети Internet по коммутируемой линииОсновная особенность такого подключения почтового сервера — наличие интеллектуального хоста, которому пересылаются все исходящие почтовые сообщения. Для организации работы по коммутируемой линии используется протокол IP, поэтому для пересылки сообщений на интеллектуальный хост вполне можно использовать протокол SMTP. В листинге 11.10 представлен пример файла макросов для такой конфигурации.
1 divert(-1)
2 divert(0)dnl
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE('always_add_domain')dnl
9 FEATURE('virtusertable')dnl
10 FEATURE('local_procmail')dnl
11 FEATURE('access_db')dnl
12 FEATURE('blacklist_recipients')dnl
13
14 MASQUERADE_AS('smallorg.org')dnl
15
16 MAILER('smtp')dnl
17 MAILER('procmail')dnl
18
19 define('SMART_HOST', 'smtp:mail.isp.net')dnl
В строках 6–12 листинга 11.10
определены основные директивы, которые
будут использоваться почтовым сервером на
базе ОС Linux. В строках 6 и 7 программе sendmail
указывается использовать механизм
подстановки имен (маскарадинга), который
определен для всех сообщений в строке 14.
Строка 19 существенно отличается от
предыдущего примера: Здесь, вместо
пересылки сообщений непосредственно на
хост-получатель, определяется
интеллектуальный хост, на который будет
поступать вся почта, адресованная во
внешний мир. Таким образом, вся почта,
адресованная вне локального домена, будет
пересылаться с помощью протокола SMTP на хост mail.isp.net. Далее за
доставку почты конечным пользователям
полностью отвечает интеллектуальный хост.
В листинге 11.11 представлены результаты
тестирования файла конфигурации для
подобного подключения.
1 [lizzy@shadrach lizzy]$ /usr/sbin/sendmail -bt -C test3.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich@otherhost.org 5 rewrite: ruleset 3 input: rich @ otherhost . org 6 rewrite: ruleset 96 input: rich < @ otherhost . org > 7 rewrite: ruleset 96 returns: rich < @ otherhost . org > 8 rewrite: ruleset 3 returns: rich < @ otherhost . org > 9 rewrite: ruleset 0 input: rich < @ otherhost . org > 10 rewrite: ruleset 199 input: rich < @ otherhost . org > 11 rewrite: ruleset 199 returns: rich < @ otherhost . org > 12 rewrite: ruleset 98 input: rich < @ otherhost . org > 13 rewrite: ruleset 98 returns: rich < @ otherhost . org > 14 rewrite: ruleset 198 input: rich < @ otherhost . org > 15 rewrite: ruleset 95 input: < smtp : mail . isp . net > rich < @ otherhost . org > 16 rewrite: ruleset 95 returns: $# smtp $@ mail . isp . net $: rich < @ otherhost . org > 17 rewrite: ruleset 198 returns: $# smtp $@ mail . isp . net $: rich < @ otherhost . org > 18 rewrite: ruleset 0 returns: $# smtp $@ mail . isp . net $: rich < @ otherhost . org > 19 > 20 [lizzy@shadrach lizzy]$
В строке 1 листинга 11.11 программа
sendmail запускается в режиме тестирования
нового файла конфигурации. В строке 4
производится отправка тестового сообщения
пользователю на удаленном почтовом узле.
После нескольких итераций в строке 18 можно
видеть результаты выполнения теста —
почтовое сообщение пересылается через хост mail.isp.net с помощью
протокола SMTP, как и указано в файле
конфигурации. Затем этот хост должен
доставить сообщение на хост-получатель otherhost.org.
Рассмотрим еще один вид подключения почтового сервера на базе ОС Linux к провайдеру Internet — через UUCP-соединение. В этом случае также требуется пересылка всей почты, адресованной внешним пользователям, через интеллектуальный хост. Но на этот раз интеллектуальный хост подключается к локальному серверу на базе ОС Linux с помощью протокола UUCP, так что отпадает необходимость в сложных операциях по блокированию спамеров. На рис. 11.6 показана схема подключения почтового сервера через UUCP-соединение.
(рис 11.6) Подключение почтового сервера на базе ОС Linux к сети Internet через UUCP-соединениеДля организации работы UUCP-соединения провайдер Internet должен обеспечить прием и буферизацию почты, адресованной на ваш локальный почтовый сервер. Для этого провайдер Internet должен обслуживать домен, в котором находится ваш почтовый сервер, как виртуальный домен. В листинге 11.12 представлен пример файла макросов с описанием такой конфигурации почтового сервера.
1 divert(-1)
2 divert(0)dnl
3 include('/usr/lib/sendmail-cf/m4/cf.m4')dnl
4 OSTYPE('linux')dnl
5
6 FEATURE('allmasquerade')dnl
7 FEATURE('masquerade_envelope')dnl
8 FEATURE('always_add_domain')dnl
9 FEATURE('local_procmail')dnl
10
11 MASQUERADE_AS('smallorg.org')dnl
12
13 MAILER('smtp')dnl
14 MAILER('procmail')dnl
15 MAILER('uucp')dnl
16
17 define('SMART_HOST', 'uucp-dom:ispmail')dnl
В строках 1–9 используются те же
самые параметры, что и в листинге 11.10.
Главное отличие между этими двумя
сценариями — строки 15, где определяется
тип почтовой программы UUCP, и 17, где
определяется другой интеллектуальный хост.
Почтовая программа используется для
передачи почтовых сообщений через UUCP-соединение
без изменения m4
создается файл конфигурации. В листинге 11.13
представлены результаты тестирования
файла конфигурации для подключения
почтового сервера через UUCP-соединение.
1 [erin@shadrach erin]$ /usr/sbin/sendmail -bt -C test4.cf 2 ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) 3 Enter <ruleset> <address> 4 > 3,0 rich@otherhost.org 5 rewrite: ruleset 3 input: rich @ otherhost . org 6 rewrite: ruleset 96 input: rich < @ otherhost . org > 7 rewrite: ruleset 96 returns: rich < @ otherhost . org > 8 rewrite: ruleset 3 returns: rich < @ otherhost . org > 9 rewrite: ruleset 0 input: rich < @ otherhost . org > 10 rewrite: ruleset 199 input: rich < @ otherhost . org > 11 rewrite: ruleset 199 returns: rich < @ otherhost . org > 12 rewrite: ruleset 98 input: rich < @ otherhost . org > 13 rewrite: ruleset 98 returns: rich < @ otherhost . org > 14 rewrite: ruleset 198 input: rich < @ otherhost . org > 15 rewrite: ruleset 95 input: < uucp-dom : ispmail > rich < @ otherhost . org > 16 rewrite: ruleset 95 returns: $# uucp-dom $@ ispmail $: rich < @ otherhost . org > 17 rewrite: ruleset 198 returns: $# uucp-dom $@ ispmail $: rich < @ otherhost . org > 18 rewrite: ruleset 0 returns: $# uucp-dom $@ ispmail $: rich < @ otherhost . org > 19 > 20 [erin@shadrach erin]$
В строке 1 листинга 11.13 вы снова
видите команду на запуск sendmail для
тестирования нового файла конфигурации, а в
строке 4 задается команда на тестирование
адреса электронной почты с использованием
наборов правил 3 и 0. Конечные результаты
тестирования представлены в строке 18. Как
видите, сообщение передано хосту ispmail
с использованием протокола UUCP. Именно эти
действия и ожидались, исходя из параметров
файла макросов. Итак, в этом случае хост ispmail
будет пересылать наше тестовое сообщение
получателю.
Самым универсальным почтовым
транспортным агентом для платформы Linux
является программа sendmail. Ее новые версии
можно получить по сети Internet и установить у
себя на сервере. Установив sendmail, необходимо
сконфигурировать ее для работы в своей сети.
Для создания файла конфигурации sendmail из
небольших файлов макросов применяется
макропроцессор GNU m4.
В файле конфигурации задаются все опции и
параметры для работы sendmail на определенном
сервере. После их описания создается файл
конфигурации sendmail, и тогда программа готова
к работе.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.