Система электронной почты на основе LINUX

Руководство администратора

Часть II

Установка почтовых служб в ОС Linux

В этой части...

Глава 11. Установка и конфигурирование sendmail

Глава 12. Установка и конфигурирование POP3 и IMAP

Глава 13. Подключение почтового сервера к провайдеру Internet

Глава 14. Администрирование почтового сервера

Глава 15. Конфигурирование клиентов ЛВС

 

Глава 11

Установка и конфигурирование sendmail

В этой главе...

Установка sendmail

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

Примеры конфигурирования sendmail

 

В предыдущей главе были детально рассмотрены программа 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.

Листинг 11.1. Файлы из пакета sendmail-8.9.3-9mdk.i586.rpm

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 по сети 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.

Листинг 11.2. Файл макросов linux.m4

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 представлены значения, которые могут быть использованы с этой директивой.

Таблица 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 приведен пример текстового файла базы данных разрешения доступа, который применяется для блокирования почты от определенных узлов.

Листинг 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 показано, что все сообщения, полученные или направленные на адрес 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.

Листинг 11.4. Пример текстового файла 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 сообщения перенаправляются из одного почтового ящика в другой почтовый ящик.

Определение опций 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 представлен пример этой процедуры.

Листинг 11.5. Пример задания сигнала SIGHUP программе sendmail

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

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

Рабочая станция под управлением ОС Linux

При подключении рабочей станции на базе ОС Linux к компьютерной сети офиса необходимо знать, каким образом она будет обмениваться электронной почтой с другими рабочими станциями и с внешним миром. Самое простое и очевидное решение в этом случае — использование центрального почтового сервера, на который поступает вся почта. Этот почтовый сервер иногда называют почтовым хабом (mail hub). На него возлагаются задачи обслуживания почтовых ящиков локальных пользователей и обеспечение шлюза для сети офиса при доставке почты в/из сети Internet через почтовый узел провайдера Internet. На рис. 11.3 представлена схема работы такого узла.

Рис. 11.3. Рабочая станция под управлением ОС Linux и почтовый сервер

Согласно этой схеме, все сообщения электронной почты от рабочей станции на базе ОС Linux пересылаются прямо на почтовый сервер, независимо от того, адресованы ли они локальным или внешним пользователям. В листинге 11.6 представлен пример файла макросов, который может использоваться для создания файла конфигурации, обслуживающего работу обычной рабочей станции на базе ОС 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 показано, как это сделать.

Листинг 11.7. Тестирование файла конфигурации для рабочей станции на базе ОС Linux

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

Еще одна из типовых конфигураций почтового сервера представляет собой почтовый сервер с постоянным подключением к сети Internet. Ввиду того что соединение поддерживается круглосуточно и по выделенному каналу, почтовый сервер может пересылать почту для внешних пользователей непосредственно удаленному серверу электронной почты, указанному в записи МХ системы DNS. На рис. 11.4 представлена схема подключения почтового сервера к сети Internet по выделенной линии.

Рис. 11.4. Подключение почтового сервера к сети Internet по выделенной линии

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

Листинг 11.8. Пример файла макросов для почтового сервера с постоянным подключением к сети Internet

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.

Листинг 11.9. Пример файла конфигурации для почтового сервера с постоянным подключением к сети Internet

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, что и является целью этой операции.

Почтовый сервер с коммутируемым подключением к сети Internet

Третья типовая схемы включения почтового сервера на базе ОС Linux представляет собой подключение почтового сервера в режиме почтового шлюза к сети Internet через коммутируемое РРР-соединение. В этом случае почтовый сервер под управлением ОС Linux пересылает все сообщения, адресованные во внешний мир, на общий почтовый шлюз, или, как его еще называют, “интеллектуальный хост” (от англ. smart host — Прим. пер.). На рис. 11.5 представлена схема подключения почтового сервера к сети Internet с использованием коммутируемого соединения.

Рис. 11.5. Подключение почтового сервера на базе ОС Linux к сети Internet по коммутируемой линии

Основная особенность такого подключения почтового сервера — наличие интеллектуального хоста, которому пересылаются все исходящие почтовые сообщения. Для организации работы по коммутируемой линии используется протокол IP, поэтому для пересылки сообщений на интеллектуальный хост вполне можно использовать протокол SMTP. В листинге 11.10 представлен пример файла макросов для такой конфигурации.

Листинг 11.10. Пример файла макросов для почтового сервера с подключением к сети Internet по коммутируемой линии

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 представлены результаты тестирования файла конфигурации для подобного подключения.

Листинг 11.11. Пример файла конфигурации для почтового сервера с подключением к сети Internet через коммутируемое соединение

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.

Подключение почтового сервера через UUCP-соединение

Рассмотрим еще один вид подключения почтового сервера на базе ОС Linux к провайдеру Internet — через UUCP-соединение. В этом случае также требуется пересылка всей почты, адресованной внешним пользователям, через интеллектуальный хост. Но на этот раз интеллектуальный хост подключается к локальному серверу на базе ОС Linux с помощью протокола UUCP, так что отпадает необходимость в сложных операциях по блокированию спамеров. На рис. 11.6 показана схема подключения почтового сервера через UUCP-соединение.

Рис. 11.6. Подключение почтового сервера на базе ОС Linux к сети Internet через UUCP-соединение

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

Листинг 11.12. Пример файла макросов для почтового сервера с подключением к сети Internet через UUCP-соединение

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-соединение без изменения файла заголовка, согласно протоколу UUCP. Таким образом, заголовки в почтовом сообщении при пересылке интеллектуальным хостом в сеть Internet остаются неизменными. После обработки файла макросов макропроцессором m4 создается файл конфигурации. В листинге 11.13 представлены результаты тестирования файла конфигурации для подключения почтового сервера через UUCP-соединение.

Листинг 11.13. Пример файла конфигурации для почтового сервера с подключением к сети Internet через 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, и тогда программа готова к работе.

 Назад        Содержание        Вперед