В
предыдущей лекции были детально рассмотрены
программа sendmail и ее файл конфигурации. В
этой лекции даются рекомендации, где получить и
как установить программу sendmail на своем
сервере. Рассматривается также макропроцессор
GNU m4, который
используется в программе sendmail для упрощения
создания файла конфигурации. Попросту говоря,
функции, включаемые администратором почтовой
системы в файл конфигурации, реализуются в
простых файлах макросов. Затем эти файлы
макросов обрабатываются макропроцессором, и
создается полноценный файл конфигурации.
Установка
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-сайте 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
Листинг 11.1. Файлы
из пакета sendmail-8.9.3-9mdk.i586.rpm
В
строках 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 по сети Internet
Пользователи программы 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
После того как программа sendmail установлена,
ее нужно сконфигурировать для работы на
конкретном почтовом сервере под управлением ОС
Linux с учетом окружения. В лекции 10, "Программа
sendmail", описывается файл конфигурации и его
основные параметры. Однако не отчаивайтесь,
существует более простой способ конфигурирования
sendmail, чем настройка параметров файла
конфигурации вручную строчка за строчкой. Для
создания небольшого и понятного файла макросов,
в котором описываются все параметры sendmail,
администраторы почтовых систем могут
воспользоваться макропроцессором GNU
m4. Измененный
файл макросов налагается на базовый файл
макросов sendmail, и на его основе с помощью
процессора создается файл конфигурации
sendmail.cf. В
этом разделе рассматриваются вопросы работы с
макропроцессором GNU m4
и формат файла макросов, который используется
при создании файла конфигурации.
Макропроцессор
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
можно полностью создать и вручную без помощи
m4. Однако следует
помнить о том, что разработчики sendmail создали
этот макропроцессор именно для того, чтобы
упростить администраторам систем электронной
почты создание файла конфигурации sendmail. В
макропроцессоре m4
используются собственные директивы макроязыка, с
помощью которых генерируются соответствующие
строки файла конфигурации. Изучение директив
m4 в этом разделе
является альтернативой изучению строк
конфигурации sendmail и созданию файла
конфигурации вручную. Генерация файла
конфигурации с помощью макропроцессора
m4 намного проще,
чем его создание вручную. Часто для создания
полнофункционального файла конфигурации для
sendmail нужен небольшой файл макросов. При
написании директив для m4
полезно знать настройки и параметры sendmail —
это облегчит понимание директив, которые
вносятся в файл макросов. Если этот раздел
покажется вам непонятным, обратитесь к примерам,
приведенным в конце этой лекции. В них
достаточно ясно иллюстрируется работа директив
m4 при создании
файла конфигурации sendmail.
Директивы m4
Макропроцессор 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
Листинг 11.2. Файл
макросов linux.m4
В
строках 16–19 листинга 11.2 переопределяется
местоположение выполняемого файла
procmail и файла
статистики sendmail.st
для данной версии ОС Linux. Все эти настройки
будут впоследствии отражены в файле конфигурации
sendmail.cf. Путь
к выполняемому файлу
procmail задается в описании почтовой
программы procmail,
а путь к файлу статистики задается параметром
STATUS_FILE. Далее
в этом разделе мы более подробно рассмотрим
работу директивы define.
Определение способов
обработки сообщений
Директива: DOMAIN
Для определения специальных методов обработки
сообщений применяется директива
DOMAIN. В табл.
11.1 представлены значения, которые могут быть
использованы с этой директивой.
Таблица 11.1. Значения директивы DOMAIN
Значение |
Описание |
BITNET_RELAY |
Хост будет принимать
почту, адресованную в
BITNET |
DECNET_RELAY |
Хост будет принимать
почту, адресованную в
DECNET |
FAX_RELAY |
Хост будет принимать
почту, адресованную псевдо-домену
.FAX |
LUSER_RELAY |
Хост будет
обрабатывать адреса, которые
принадлежат локальным пользователям |
UUCP_RELAY |
Хост будет принимать
почту, адресованную в
UUCP |
Формат директивы DOMAIN
следующий:
DOMAIN (relay, 'mailer:hostname'),
где relay — одно
из значений представленных в табл. 11.1,
mailer — почтовая
программа, которая используется для доставки
сообщений, а hostname
— имя удаленного хоста, на который передаются
сообщения.
Определение параметров
sendmail
Директива: FEATURE
С
помощью директивы FEATURE
заранее заданные параметры sendmail посредством
макропроцессора m4
заносятся в файл конфигурации sendmail, сводя к
минимуму действия со стороны администратора
почтовой системы. Формат директивы
FEATURE следующий:
FEATURE ('value',
'[options]'),
где value —
значение параметра, который включается в файл
конфигурации, а options
— параметры, необходимые для работы директивы. В
этом разделе дается описание параметров,
доступных в sendmail версии 8.9.3.
accept_unqualified_senders
Параметр
accept_unqualified_senders разрешает
программе sendmail принимать сообщения, в поле
заголовка FROM:
которых отсутствует полное имя хоста. Это может
понадобиться в том случае, если локальная
почтовая программа посылает сообщения без
добавления имени локального хоста в поле
FROM:.
accept_unresolvable_domains
С
помощью параметра
accept_unresolvable_domains программа
sendmail может принимать даже те сообщения, в
поле заголовка FROM:
которых указаны адреса с ошибками в именах
домена. Как правило, sendmail проверяет
корректность доменных имен, полученных из поля
FROM: заголовка
сообщения формата RFC822. Если имя домена
невозможно идентифицировать, то sendmail не
принимает такое сообщение. Если же ваш почтовый
шлюз не может обрабатывать запросы системы DNS
на преобразование доменных имен, то, возможно,
придется воспользоваться этим параметром, чтобы
программа sendmail принимала сообщения даже от "неправильных",
с точки зрения DNS, доменов.
access_db
Параметр 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 представлен список ярлыков, которые
применяются в базе данных разрешения доступа.
Таблица 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
Листинг 11.3.
Пример текстового файла базы данных
разрешения доступа
В
строке 1 листинга 11.3 показано, что все
сообщения, полученные или направленные на адрес
spammer@ispmail.net,
будут отвергнуты. В строке 2 определяется, что
все сообщения, полученные или отправленные в
домен microsoft.com,
будут уничтожены и ни одна из сторон не получит
даже сообщения об ошибке. В строке 3 задается,
что все сообщения, полученные от любого
пользователя из домена
linux.org, будут приняты почтовым
сервером. Строка 4 разрешает почтовому серверу
выступать в качестве транзитного узла для
поддоменов данного домена. А строка 5 является
примером использования
access_db для блокирования почты,
поступающей от определенных IP-сетей, с выдачей
определенного сообщения об ошибке.
Для того чтобы создать базу данных разрешения
доступа из файла
access.txt, задайте команду:
makemap hash
/etc/mail/access < /etc/mail/access.txt
В
ОС Linux утилита makemap
создает хешированную базу данных из текстового
файла, к которой затем сможет обращаться
программа sendmail.
allmasquerade
Если в конфигурации sendmail используется
механизм подстановки адресов (см. раздел "MASQUERADE_AS"
далее в этой лекции), так называемый маскарадинг
(от англ. masquerade — притворяться), то
его можно задействовать включением параметра
allmasquerade.
Если используется механизм маскарадинга, то при
включенной параметре
allmasquerade адреса получателей
преобразуются в адреса, указанные в директиве
MASQUERADE_AS.
Будьте осторожны, применяя этот параметр, так
как программа sendmail может неправильно
воспринимать адреса при использовании локальных
псевдонимов. Этот параметр чаще всего
используется при необходимости маскарадинга
нескольких хостов.
always_add_domain
Для включения доменного имени во все адреса,
даже если сообщения адресованы локальным
пользователям, применяется параметр
always_add_domain.
По умолчанию, сообщения, которые посылаются
локальным пользователям от других локальных
пользователей, не содержат в поле адреса
доменного имени, так как в этом случае обмен
электронной почтой происходит внутри одного
хоста.
bitdomain
Параметр bitdomain
предназначен для поиска хостов сети
BITNET в таблице,
заданной директивой. Формат директивы следующий:
FEATURE ('bitdomain',
'db [options]'),
где db — тип
используемой базы данных, а
options — опции,
необходимые для создания базы данных. Значения
по умолчанию — это тип базы данных
hash и имя файла
базы данных
/etc/bitdomain.db.
bestmx_is_local
Параметр bestmx_is_local
позволяет программе sendmail принимать почту
таким образом, как будто она адресована
локальным хостам, для которых МХ-записи
локального почтового сервера являются
оптимальными. Формат этой директивы следующий:
FEATURE
('bestmx_is_local', 'domains...')
Если список доменов задан опцией
domains..., то
параметр действителен только для указанных
доменов.
blacklist_recipients
Параметр
blacklist_recipients позволяет программе
sendmail создавать списки пользователей, от
которых почта приниматься не будет. Эти же
пользователи не смогут получить доступ к базе
данных управления доступом, о которой говорилось
выше при описании параметра
access_db. Часто
эти списки называют "черными списками". По сути,
параметр
blacklist_recipients расширяет действие
параметра access_db,
так как в "черный список" могут заноситься и
отдельный адрес электронной почты, и имя
отдельного хоста, и даже имя домена.
domaintable
Создание базы данных доменных имен для быстрого
преобразования имен доменов производится с
помощью параметра
domaintable. В принципе это нестандартная
функция, хотя иногда может понадобиться изменить
имя домена на ходу (было изменено доменное имя,
а некоторые клиенты не обратили на этот факт
должного внимания). С помощью параметра
domaintable
создается база данных доменных имен
определенного типа и в заданном каталоге. По
умолчанию это хешированная база данных, которая
создается в каталоге
/etc/domain. В первом поле текстовой базы
данных всегда должно присутствовать старое
доменное имя, а во втором поле — новое доменное
имя. Для преобразования базы данных из
текстового формата в приемлемый для чтения
программой sendmail формат воспользуйтесь
командой makemap.
genericstable
Параметр genericstable
позволяет sendmail создавать таблицу имен
пользователей и доменных имен, значения из
которой могут использоваться для подстановки
имен на ходу. Данная функция также не является
стандартной, но она может пригодиться при
переходе системы электронной почты с одних
доменных имен на другие или при широкомасштабной
смене имен пользователей. При создании этой базы
данных можно использовать принятые типы баз
данных и специальные опции. И конечно же, для
преобразования базы данных из текстового формата
в приемлемый для чтения программой sendmail
формат следует использовать
makemap.
limited_masquerade
Параметр
limited_masquerade обеспечивает
избирательность работы sendmail, если задан
параметр masquerade.
В то время как параметра
masquerade применяется сразу ко всем
хостам, указанным в строках конфигурации
Cw или
Fw, параметр
limited_masquerade
выполняет маскарадинг только хостов, указанных в
строках конфигурации DM.
local_lmtp
С
помощью параметра
local_lmtp программа sendmail может
использовать LMTP-совместимую почтовую программу
для доставки локальной электронной почты. Как
правило, это не касается систем на базе ОС
Linux, так что данный параметр обычно не
используется.
local_procmail
Параметр 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
С
помощью параметра
loose_relay_check изменяется метод
обработки адресов, содержащих символ
%. Поскольку
способ адресации электронной почты с
использованием символа %
уже не применяется, этот параметр практически не
используется.
mailertable
Для создания программой sendmail базы данных
хостов с описанием способов доставки почты к ним
применяется параметр
mailertable. Формат директивы
mailertable
следующий:
FEATURE ('mailertable',
'db [options]'),
где db — тип базы
данных, а options
— опции, необходимые для создания и обеспечения
доступа к базе данных. Для приведения этой базы
данных к стандартному виду из текстового
применяется команда
makemap. При этом формат текстового файла
должен быть следующим:
host mailer:domain,
где host — это
хост получателя или доменное имя получателя,
mailer — тип
почтовой программы, которая должна
использоваться при доставке сообщений, а
domain — удаленный
хост, которому должно пересылаться сообщение.
Таким образом, с помощью базы данных
mailertable можно
пересылать на один удаленный хост сообщения,
отправленные либо определенному хосту, либо в
определенный домен. Этот параметр особенно
полезен при работе UUCP-узлов. На всех узлах
UUCP есть необходимость в создании базы данных,
содержащей списки узлов, которым нужно
пересылать почту для хостов, не имеющих
непосредственного UUCP-соединения с данным
узлом.
masquerade_entire_domain
Параметр
masquerade_entire_domain позволяет
программе sendmail осуществлять маскарадинг всех
сообщений, поступающих из определенного домена,
а не только от отдельного почтового сервера.
Если же сервер электронной почты работает в
режиме шлюза для всех хостов домена, то этот
параметр дает возможность пользователям всех
хостов использовать преобразованное доменное
имя. Например, в домене имеется три почтовых
сервера —
shadrach.smallorg.org,
meshach.smallorg.org
и abednego.smallorg.org.
У всех сообщений электронной почты, посылаемых
через почтовый шлюз пользователями этих трех
серверов, в адресной части будет присутствовать
не имя хоста, откуда они поступили, а подставное
доменное имя smallorg.org.
Это довольно удобное решение для того, чтобы
скрыть почтовые серверы в крупной сети.
masquerade_envelope
Параметр
masquerade_envelope позволяет программе
sendmail использовать на конверте имена
отправителя и получателя с преобразованным
доменным именем (после процедуры
masquerade).
nocanonify
Параметр nocanonify
указывает sendmail не передавать адреса,
соответствующие наборам правил, добавляя
доменные имена к именам хостов. Этот параметр
чаще всего применяется почтовыми шлюзами,
поскольку приходящие на них сообщения обычно уже
имеют полный адрес электронной почты. Таким
образом, нет необходимости в дальнейшей
обработке адресов.
nodns
Параметр 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
С
помощью параметра nouucp
программе sendmail запрещается изменять адреса,
заданные в формате UUCP.
nullclient
В
отдельных случаях используется параметр
nullclient. Он
обычно применяется в файле макросов
самостоятельно и предназначен для представления
почтового сервера в виде обычной рабочей станции,
которая почту (в том числе, адресованную
локальным пользователям) не обрабатывает, а лишь
пересылает ее другому почтовому серверу.
Совместно с параметром
nullclient может использоваться только
параметр nocanonify,
описанный выше.
Если в вашей сети используются рабочие станции
под управлением ОС Linux или ОС UNIX, то
параметр nullclient
может оказаться весьма полезным. Если
пользователи вынуждены перемещаться от одной
станции к другой в течение дня, то довольно
сложно выделить отдельный хост и имя
пользователя для отправки сообщений электронной
почты. Проблема решается выделением отдельного
почтового сервера, на который с любой рабочей
станции можно отправлять почтовые сообщения.
Тогда практически каждый пользователь получает
возможность посылать почтовые сообщения другим
пользователям почтового сервера, даже если
получатель имеет учетную запись пользователя на
той же рабочей станции, что и отправитель. Затем
любой пользователь, обратившись к почтовому
серверу, может получить предназначенные ему
сообщения, независимо от того, на какой рабочей
станции он находится.
Формат параметра
nullclient следующий:
FEATURE ('nullclient',
'address'),
где address — имя
хоста центрального почтового сервера. Чтобы
избежать конфликтных ситуаций с DNS, в качестве
адреса можно использовать IP-адрес. В этом
случае IP-адрес необходимо заключать в
квадратные скобки ([]).
promiscouous_relay
Для обеспечения возможности приема и пересылки
сообщений от хост-компьютеров вне вашего домена
применяется параметр
promiscouous_relay. По умолчанию sendmail
не пересылает электронную почту между двумя
внешними доменами. Этим параметром могут
воспользоваться спамеры, чтобы скрыть свое
действительное местонахождение. Включение
параметра
promiscouous_relay очень опасно, особенно
если ваш почтовый сервер напрямую подключен к
сети Internet. Если кто-либо нечистый на руку
обнаружит это свойство вашего почтового сервера,
то он сможет использовать его в целях рассылки
нежелательной почты. Лучше всего в такой
ситуации воспользоваться одним из описанных
ранее параметров sendmail для работы в режиме
транзитного узла или обратиться к параметру
access_db, который
также описан выше.
rbl
Параметр rbl
позволяет программе sendmail, на основе списка
выявленных спамеров сети Internet, игнорировать
некоторые сообщения (удобно, не правда ли?). На
сервере rbl.maps.vix.com
ведется так называемый текущий "черный список" (Realtime
Blackhole List). Программа sendmail может
обращаться к этому серверу, чтобы удостовериться
в том, что сообщение с определенным адресом не
находится в "черном списке". Подробности о
работе "черного списка" можно найти по адресу:
http://maps.vix.com.rbl.
redirect
Параметр redirect
позволяет sendmail выдавать сообщение об ошибке
для пользователей, адреса которых были
перенаправлены на другой хост с помощью метки
.REDIRECT.
relay_based_on_MX
Благодаря параметру
relay_based_on_MX программа sendmail
принимает входящие сообщения на основе
МХ-записей системы DNS для определенного имени
хоста в поле заголовка получателя. Этот параметр
может использоваться для разрешения вашему
почтовому серверу принимать почту,
предназначенную для других хостов, если их
МХ-записи в системе DNS указывают на ваш
почтовый сервер (см. лекцию 4 "DNS и доменные
имена").
relay_entire_domain
Параметр
relay_entire_domain позволяет sendmail
принимать сообщения, адресованные на любой из
хостов вашего домена. Этот параметр может
использоваться для создания почтового шлюза,
куда будут поступать сообщения со всех хостов
домена и пересылаться дальше через центральный
почтовый сервер.
relay_hosts_only
Параметр relay_hosts_only
позволяет программе sendmail использовать в базе
данных access.db
имена хостов и объявлять их с помощью метки
RELAY. Обычно в
базе данных access.db
используются только доменные имена (см. описание
параметра access.db).
relay_local_from
Параметр relay_local_from
позволяет программе sendmail отправлять
сообщения, которые получены от локального хоста.
Он может быть применен пользователями,
использующими удаленные клиентские программы,
которые пересылают почту через ваш почтовый
сервер SMTP. По умолчанию программами-клиентами
в качестве адреса отправителя используется
доменное имя локального хоста. К сожалению, этим
параметром также могут воспользоваться спамеры,
подставляя в свои сообщения имя вашего домена и
"проталкивая" их через ваш почтовый сервер.
smrsh
Параметр smrsh
указывает sendmail применять на сервере
электронной почты запрещенную оболочку
smrsh вместо
общепринятой /etc/sh.
Она позволяет администратору почтового сервера
управлять программами, которые могут быть
запущены посредством электронной почты.
stickyhost
С
помощью параметра
stickyhost программа sendmail изменяет
способ обработки сообщений, в адресной части
которых присутствует локальное доменное имя.
Обычно сообщения, направленные пользователям
локального хоста, сравниваются с базой данных
существующих пользователей. Задав параметр
stickyhost, можно
добиться того, что программа sendmail будет
по-разному воспринимать адреса
user и
user@localhost.
use_ct_file
Параметр use_ct_file
позволяет программе sendmail, запущенной с
параметром -f,
читать из файла доверенных пользователей системы.
(см. лекции 10, "Программа sendmail"). По
умолчанию имя этого файла —
/etc/sendmail.ct.
Чтобы изменить имя файла, его можно
переопределить с помощью переменной
confCT_FILE.
use_cw_file
Параметр use_cw_file
позволяет программе sendmail читать из файла
альтернативных имен для почтового сервера. По
умолчанию для этой цели используется файл
/etc/sendmail.cw.
Если необходимо изменить местоположение файла
или переименовать его, это можно сделать с
помощью переменной
confCW_FILE (см. ниже раздел "Определение
параметров sendmail").
uucpdomain
Параметр uucpdomain
позволяет программе sendmail создавать и
использовать базу данных хостов UUCP. Для
сопоставления старых и новых имен хостов UUCP в
этом параметре используется тот же механизм, что
и в параметре domaintable.
По умолчанию база данных находится в файле
/etc/uucpdomain.db.
Этот параметр используется довольно редко, в
основном при переходе от одних имен хостов UUCP
к другим.
virtusertable
С
помощью параметра
virtusertable программа sendmail может
присваивать псевдонимы пользователям других
доменов и направлять почту в определенное место.
В качестве приемной стороны может выступать
локальный или какой-либо другой почтовый сервер.
Этот параметр позволяет на одном почтовом
сервере вести несколько виртуальных доменов.
Формат директивы с
virtusertable следующий:
FEATURE
('virtusertable', 'db [options]'),
где db — тип базы
данных, а options
— опции, необходимые для создания и обеспечения
доступа к базе данных. По умолчанию в файле
/etc/virtusertable
используется тип хешированной базы данных
Berkeley. Формат текстового файла
virtusertable
следующий:
alias location,
где alias —
виртуальный псевдоним, а
location — имя хоста или адрес
электронной почты, на который sendmail будет
пересылать сообщения.
Этот параметр может использоваться для
перенаправления потока почты для всего домена на
определенный хост или идентификатор пользователя,
а также для перенаправления почты от одного
пользователя другому. В листинге 11.4
представлены примеры значения некоторых
переменных из
virtusertable.
1 @smallorg.org
mailbox@ispmail.net
2 @anotherorg.org %1@smallorg.org
3 webmaster@smallorg.org rich@smallorg.org
Листинг 11.4.
Пример текстового файла virtusertable
В
строке 1 листинга 11.4 вся почта для домена
smallorg.org
перенаправляется в один почтовый ящик с именем
mailbox@ispmail.net.
Такая технология стала довольно популярной у
провайдеров Internet, так как в этом случае
клиенту предоставляется один почтовый ящик,
обслуживающий весь домен. Сообщения из него
могут быть получены по протоколу POP3 (см.
лекцию 6, "Протокол POP3") и далее
распределяться по соответствующим
идентификаторам пользователей на почтовом
сервере домена (см. лекцию 13, "Подключение
почтового сервера к провайдеру Internet").
В
строке 2 почтовые сообщения перенаправляются с
одного хоста на другой. Переменная
%1 используется в
качестве маркера для повтора имени пользователя
в адресе электронной почты. Таким образом,
сообщение, адресованное
prez@anotherorg.org, будет перенаправлено
на адрес prez@smallorg.org.
В
строке 3 сообщения перенаправляются из одного
почтового ящика в другой почтовый ящик.
Определение опций
sendmail
Директива: define
Директива define
используется для установки определенных опций
файла конфигурации sendmail. Большинство опций
конфигурации sendmail могут изменять свое
значение под действием директивы
define. Формат
директивы define
следующий:
define ('option',
'value'),
где option —
описываемая опция, а
value — ее новое значение. Названия опций
файла конфигурации обычно начинаются с
'conf'.
Чаще всего для почтового сервера на базе ОС
Linux требуется изменение опции
SMART_HOST. С ее
помощью объявляется удаленный хост, который
принимает все почтовые сообщения, адресованные
удаленным хостам. Формат опций
SMART_HOST в
директиве define
следующий:
define ('SMART_HOST',
'mailer:host'),
где mailer —
почтовый протокол, необходимый для доставки
сообщения, а 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").
Определение систем
транспортировки сообщения
Директива: MAILER
Директива MAILER
применяется для определения почтовой системы,
которая будет работать в связке с sendmail при
транспортировке сообщений. Каждый протокол,
используемый для транспортировки почты, должен
быть описан директивой
MAILER. Формат директивы
MAILER следующий:
MAILER('mailer'),
где mailer —
название системы транспортировки почты (почтовой
программы). Все типы систем транспортировки
почты, доступные для использования в sendmail,
представлены в табл. 11.3.
Таблица 11.3. Типы транспортных систем в
sendmail
Почтовая программа |
Описание |
cyrus |
Определяет почтовые
программы
cyrus и
cyrusbb |
fax |
Определяет
факсимильную почтовую программу |
local |
Определяет программы
local
и prog
(включены автоматически) |
mail11 |
Определяет почтовую
программу
mail11 для работы в сети
DECnet |
phquery |
Определяет программу
phquery |
pop |
Определяет почтовую
программу для работы по протоколу
POP3 |
procmail |
Определяет почтовую
программу
procmail |
smtp |
Определяет почтовую
программу для работы по протоколу
SMTP |
uucp |
Определяет почтовую
программу для работы по протоколу
UUCP |
usenet |
Определяет почтовую
программу для работы с конференциями
Usenet |
Все почтовые программы должны быть объявлены в
конце файла макросов. Кроме того, при объявлении
почтовых программ smtp
и uucp нужно
первой объявлять почтовую программу
smtp или
uucp-dom (которая
посылает почту в формате SMTP через UUCP-соединение),
в противном случае они не будут работать
корректно.
Создание файла
sendmail.cf
После создания файла макросов можно выполнить
обработать его макропроцессором 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]#
Листинг 11.5.
Пример задания сигнала SIGHUP программе
sendmail
Примеры
конфигурирования sendmail
Создавать файлы конфигурации sendmail с помощью
файлов макросов и макропроцессора
m4 довольно просто.
Однако иногда нелегко определить, какие
директивы следует включить в ту или иную
конфигурацию почтового сервера. В этом разделе
рассматривается несколько типовых конфигураций
почтовых серверов и файлы макросов к ним, из
которых затем создаются файлы конфигурации для
обработки почты в заданных условиях.
Рабочая
станция под управлением ОС Linux
При подключении рабочей станции на базе ОС Linux
к компьютерной сети офиса необходимо знать,
каким образом она будет обмениваться электронной
почтой с другими рабочими станциями и с внешним
миром. Самое простое и очевидное решение в этом
случае — использование центрального почтового
сервера, на который поступает вся почта. Этот
почтовый сервер иногда называют почтовым хабом
(mail hub). На него возлагаются задачи
обслуживания почтовых ящиков локальных
пользователей и обеспечение шлюза для сети офиса
при доставке почты в/из сети Internet через
почтовый узел провайдера Internet. На рис. 11.3
представлена схема работы такого узла.
Рис. 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
Листинг 11.6.
Пример файла макросов для рабочей станции на
базе ОС Linux
В
строках 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]$
Листинг 11.7.
Тестирование файла конфигурации для рабочей
станции на базе ОС Linux
В
строке 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
Еще одна из типовых конфигураций почтового
сервера представляет собой почтовый сервер с
постоянным подключением к сети 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
Листинг 11.8.
Пример файла макросов для почтового сервера
с постоянным подключением к сети Internet
В
строках 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]$
Листинг 11.9.
Пример файла конфигурации для почтового
сервера с постоянным подключением к сети
Internet
В
строке 1 листинга 11.9 задается команда для
тестирования нового файла конфигурации,
полученного из файла макросов, который
представлен в листинге 11.8. В строке 4 задается
команда для тестирования удаленного адреса
электронной почты с применением наборов правил 3
или 0. В строке 18 вы видите конечный результат
тестирования — почтовое сообщение передается
непосредственно на хост получателя с
использованием протокола ESMTP, что и является
целью этой операции.
Почтовый
сервер с коммутируемым подключением к сети
Internet
Третья типовая схемы включения почтового сервера
на базе ОС 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
Листинг 11.10.
Пример файла макросов для почтового сервера
с подключением к сети Internet по
коммутируемой линии
В
строках 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]$
Листинг 11.11.
Пример файла конфигурации для почтового
сервера с подключением к сети Internet через
коммутируемое соединение
В
строке 1 листинга 11.11 программа sendmail
запускается в режиме тестирования нового файла
конфигурации. В строке 4 производится отправка
тестового сообщения пользователю на удаленном
почтовом узле. После нескольких итераций в
строке 18 можно видеть результаты выполнения
теста — почтовое сообщение пересылается через
хост mail.isp.net
с помощью протокола SMTP, как и указано в файле
конфигурации. Затем этот хост должен доставить
сообщение на хост-получатель
otherhost.org.
Подключение
почтового сервера через UUCP-соединение
Рассмотрим еще один вид подключения почтового
сервера на базе ОС 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
Листинг 11.12.
Пример файла макросов для почтового сервера
с подключением к сети Internet через
UUCP-соединение
В
строках 1–9 используются те же самые параметры,
что и в листинге 11.10. Главное отличие между
этими двумя сценариями — строки 15, где
определяется тип почтовой программы UUCP, и 17,
где определяется другой интеллектуальный хост.
Почтовая программа используется для передачи
почтовых сообщений через UUCP-соединение без
изменения файла заголовка, согласно протоколу
UUCP. Таким образом, заголовки в почтовом
сообщении при пересылке интеллектуальным хостом
в сеть Internet остаются неизменными. После
обработки файла макросов макропроцессором
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]$
Листинг 11.13.
Пример файла конфигурации для почтового
сервера с подключением к сети Internet через
UUCP-соединение
В
строке 1 листинга 11.13 вы снова видите команду
на запуск sendmail для тестирования нового файла
конфигурации, а в строке 4 задается команда на
тестирование адреса электронной почты с
использованием наборов правил 3 и 0. Конечные
результаты тестирования представлены в строке
18. Как видите, сообщение передано хосту
ispmail с
использованием протокола UUCP. Именно эти
действия и ожидались, исходя из параметров файла
макросов. Итак, в этом случае хост
ispmail будет
пересылать наше тестовое сообщение получателю.
Резюме
Самым универсальным почтовым транспортным
агентом для платформы Linux является программа
sendmail. Ее новые версии можно получить по сети
Internet и установить у себя на сервере.
Установив sendmail, необходимо сконфигурировать
ее для работы в своей сети. Для создания файла
конфигурации sendmail из небольших файлов
макросов применяется макропроцессор GNU
m4. В файле
конфигурации задаются все опции и параметры для
работы sendmail на определенном сервере. После
их описания создается файл конфигурации sendmail,
и тогда программа готова к работе.
|