voliuf.narod.ru

главная

друзья

помощь сайту

Администрирование почтовых серверов sendmail  

Бесплатные учебники по темам

Партнерская программа

1.Принципы организации систем электронной почты

2.Использование ОС Linux в качестве сервера электронной почты

3.Установка телекоммуникационного оборудования в ОС Linux

4.DNS и доменные имена

5.Протокол SMTP

6.Протокол POP3

7.Протокол IMAP

8.Протокол РРР

9.Протокол UUCP

10.Программа sendmail

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

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

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

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

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

16.Поддержка удаленных клиентов

17.Почтовые псевдонимы и преобразование адресов

18.Списки рассылки

19.Маршрутизация IP в ОС Linux

 

Администрирование почтовых серверов sendmail 
10.Программа sendmail
  

Чтобы правильно посылать и принимать почту от других систем, на почтовом сервере под управлением ОС Linux должна быть установлена программа — почтовый транспортный агент (Mail Transport Agent — MTA). Работа МТА заключается в обработке почтовых сообщений, а не в доставке их локальному пользователю, как иногда думают. Если МТА принимает сообщение, направленное локальному пользователю, то он просто передает его другой программе, которая занимается его доставкой. Сообщения, адресованные пользователям удаленных хостов, будут направляться либо на эти хосты, либо передаваться узлу, который сможет далее переслать их по назначению. После того как сообщение передано, работа МТА завершена.

 

Для ОС Linux существует довольно много программ — почтовых транспортных агентов. Некоторые из них обладают более широкой функциональностью, в то время как другие легче в работе, с точки зрения администратора почтовой системы. Прабабушкой всех МТА-программ для платформы UNIX является программа sendmail. Довольно часто ее называют самой универсальной программой МТА, но в то же время она наиболее сложна в настройке. Компоненты программы sendmail описаны в этой лекции. Вопросы конфигурирования sendmail для работы на почтовом сервере под управлением ОС Linux рассмотрены в лекции 11, "Установка и конфигурирование sendmail".

 

sendmail и безопасность

 

Программа sendmail используется на многих платформах уже на протяжении нескольких десятков лет. В первые годы ее применения были выявлены практически все черные входы и дыры в программе, которые позволяли хакерам проникать в систему. Например, общеизвестна реакция sendmail на SMTP команды debug и wiz. Получив при анонимном SMTP-сеансе посредством этих команд доступ в систему, через другие программы хакер мог получить права пользователя root . Когда программа sendmail стала популярной, то все черные ходы были закрыты и ошибки в программе были исправлены.

 

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

 

Так что было бы неосмотрительно только из-за слухов о неблагонадежности sendmail отказываться от ее преимуществ.

 

Файлы и каталоги sendmail

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

 

Программа sendmail

Путь: /usr/sbin/sendmail

 

Программа sendmail является главным двигателем при передаче почты. Обычно она запускается в фоновом режиме в виде процесса-демона, который ожидает появления входящих почтовых сообщений и проверяет очередь исходящих почтовых сообщений через установленные интервалы времени. В качестве альтернативы можно определенным образом сконфигурировать sendmail для запуска по запросу программы inetd, управляющей всеми TCP-портами. Таким образом можно сэкономить ресурсы памяти на сервере, так как при этом программа sendmail не работает в фоновом режиме, а следовательно, не занимает память. Вместе с тем такая организация работы sendmail приводит к снижению производительности, так как в этом случае sendmail при каждом запуске должна перечитывать файлы конфигурации. Программа sendmail может получать доступ к каталогам пользователя root, так как ей задан setuid root. Другие пользователи также могут запускать sendmail, но при этом они не смогут получить доступ ко многим каталогам, которые требуются для работы sendmail, например к очереди почтовых сообщений.

 

Основной файл конфигурации

Путь: /etc/sendmail.cf

 

Для правильной работы sendmail на локальном почтовом сервере необходимо сконфигурировать ее в соответствии со своими специфическими требованиями. Все определения, касающиеся обработки почты программой sendmail, хранятся в файле конфигурации /etc/sendmail.cf. Все они называются наборами правил (rule set). Наборы правил применяются в sendmail для анализа адресов отправителя и получателя сообщения, а также для определения способа его доставки получателю. При запуске программа sendmail читает содержимое файла конфигурации, так что, если в него вносились какие-либо изменения, нужно перезапустить sendmail, чтобы они возымели действие.

 

Каталог очереди почтовых сообщений

Путь: /var/spool/mqueue

 

Каталог mqueue создается для хранения всех почтовых сообщений, которые ожидают обработки в очереди. Владельцем этого каталога является пользователь root. Программа sendmail удостоверяется в том, что все файлы очереди почтовых сообщений хранятся в этом каталоге и имеют соответствующие права доступа, которые не позволяют обычным пользователям читать сообщения, находящиеся в очереди. Местоположение каталога очереди почтовых сообщений можно изменять. Это делается либо изменением соответствующего параметра в файле sendmail.cf, либо запуском sendmail из командной строки со специальным параметром.

 

Программа для отображения состояния очереди почтовых сообщений

Путь: /usr/sbin/mailq

 

Программа mailq является символической связью с программой sendmail. При ее запуске программа sendmail отображает содержимое очереди почтовых сообщений.

 

Создание базы данных псевдонимов

Путь: /usr/sbin/newaliases

 

Программа newaliases также является символической связью с программой sendmail. При ее запуске считываются текстовые псевдонимы из файла aliases и с помощью стандартного пакета по поддержке баз данных в ОС Linux создается база данных псевдонимов. В ОС Linux при этом обычно создается хешированный файл базы данных.

 

Текстовый файл псевдонимов

Путь: /etc/aliases

 

В файле /etc/aliases администратор почтовой системы может указать почтовые псевдонимы для пользователей. Файл /etc/aliases является текстовой версией псевдонимов из хешированной базы данных, которая используется программой sendmail. Каждый псевдоним должен указываться в отдельной строке в виде:

 
alias: userid,

где alias — имя псевдонима, а userid — имя пользователя локальной системы.

 

После того как в файл псевдонимов были внесены изменения, администратору почтовой системы необходимо запустить программу newaliases для создания хешированной базы данных в /etc/aliases.db. Программа sendmail при обработке сообщений читает файл хешированной базы данных псевдонимов. Если в поле получателя содержится имя, которое совпадает с именем в базе данных псевдонимов, то сообщение передается получателю с указанным псевдонимом.

 

Как правило, при установке ОС Linux автоматически создается несколько пользователей системы, которые обычно не используются в дальнейшей работе. Все эти имена можно с помощью псевдонимов присвоить одному пользователю. Теперь легко отследить некорректное поведение почты или даже идентифицировать попытки несанкционированного доступа в локальную систему. В листинге 10.1 показан пример файла aliases, где используется подобный механизм.

 
1 #
2 # @(#)aliases 8.2 (Berkeley) 3/5/94
3 #
4 # Aliases in this file will NOT be expanded in the header from
5 # Mail, but WILL be visible over networks or from /bin/mail.
6 #
7 # >>>>>>>>> The program "newaliases".must be run after
8 # >>>NOTE>>> this file is updated for any changes to
9 # >>>>>>>> show through to sendmail.
10 #
11
12 # Basic system aliases -- these MUST be present.
13 MAILER-DAEMON: postmaster
14 postmaster: root
15
16 #General redirections for pseudo accounts.
17 bin: root
1B daemon: root
19 games: root
20 ingres: root
31 nobody: root
32 system: root
23 toor: root
24 uucp: root
25
26 #Well-known aliases.
27 manager: root
29 dumper: root
29 operator:root
30
31 #trap decode to catch security attacks
33 decode: root
33
34 #Person who should get root's mail
35 root: rich

Листинг 10.1. Пример файла /etc/aliases

В строках 13 и 14 листинга 10.1 определены псевдонимы для имени пользователя, которому посылаются сообщения об ошибках (наверняка вы часто сталкивались с сообщением "О всех ошибках при работе с электронной почтой обращайтесь к postmaster" ("send all compliants to postmaster")?). Здесь мы говорим, что все сообщения для postmaster будут перенаправлены пользователю root. В строках 17–24 задаются псевдонимы для пользователей, которые при установке системы обычно не получают прав пользователя root. Далее в строках 27–32 задаются псевдонимы для некоторых стандартных пользователей системы. И наконец, в строке 35 дается указание всю почту, адресованную пользователю root, перенаправлять администратору почтовой системы, так как ни один уважающий себя администратор не регистрируется в системе c правами root.

 

Учетная запись postmaster

 

С ростом популярности сети Internet, и в частности WEB, стала активно использоваться учетная запись пользователя postmaster. На большинстве WEB-серверов она используется в качестве механизма обратной связи с пользователями. Именно ему пользователи обычно направляют свои комментарии и пожелания, касающиеся работы WEB-сервера. Для перегруженных серверов иногда можно создавать специальную учетную запись для администратора почтовой системы и с помощью псевдонима перенаправлять весь поток почты для postmaster этому пользователю. Кроме того, администратору почтовой системы необходимо ежедневно проверять свой почтовый ящик.

 

Отчет о состоянии хоста

Путь: /usr/sbin/hoststat

 

Программа hoststat является еще одной символической связью с программой sendmail. При ее выполнении программа sendmail пытается прочесть файл статистики по хосту и отобразить состояние последнего действия, произведенного с почтой, всем удаленным хостам, куда она отправила почту.

 

Очистить состояние хоста

Путь: /usr/sbin/purgeststat

 

Программа purgeststat также является символической связью с программой sendmail. При запуске purgeststat программа sendmail удаляет всю статистическую информацию из файла статистики по хосту.

 

Файл состояния хоста

Путь: /var/spool/mqueue/.hoststat

 

В каталоге /var/spool/mqueue/.hoststat содержатся файлы, в которых хранится статистическая информация по каждому удаленному хосту. Эти файлы используются программой для отображения текущего состояния операций с удаленным хостом.

 

Файл сбора статистики

Путь: /etc/sendmail.st

 

Если ведется файл sendmail.st, то это говорит о том, что администратор почтовой системы желает вести сбор статистики об исходящем почтовом трафике. Изначально этот файл создается с нулевым размером. Хотя по умолчанию он обычно находится в каталоге /etc, во многих версиях ОС Linux, таких как, Red Hat, Caldera и Mandrake, желательно изменить местоположение этого файла, заданное по умолчанию, на /var/log/sendmail.st.

 

Персональный файл для пересылки почты

Путь: $HOME/.forward

 

Каждому пользователю в системе можно создать в рабочем каталоге файл .forward. При попытке передать почту для локального пользователя посредством локального почтового процессора программа sendmail проверяет наличие этого файла. Если он существует и в нем указан адрес электронной почты, то sendmail будет пересылать сообщение на этот адрес. Адреса электронной почты должны быть указаны в стандартном формате (username@hostmname) по одному в строке.

 

Предупреждение

 

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

 

Формат файла справки

Путь: /usr/lib/sendmail.hf

 

С помощью файла sendmail.hf и команды SMTP HELP на экран выводится справка о командах. Файл справки имеет специфический формат, который анализирует sendmail, когда удаленные хосты обращаются к ней с помощью команды HELP. Как уже отмечалось в лекции 5, "Протокол SMTP", клиенты могут выдавать команду HELP либо в общем виде, либо сужать границы ее действия до конкретной команды, на которую требуется справка. Для облегчения работы sendmail с файлом справки в каждой строке файла ставятся специальные метки, обозначающие начало строки. В листинге 10.2 представлен фрагмент файла sendmail.hf.

 
1 cpyr
2 cpyr Copyright (c) 1998 sendmaili Inc. All rights reserved.
3 cpyr Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved.
4 cpyr Copyright (c) 1988, 1993
5 cpyr The Regents of the University of California. All rights reserved.
6 cpyr
7 cpyr
8 cpyr By using this file, you agree to the terms and conditions set
9 cpyr forth in the LICENSE file which can be found at the top level of
10 cpyr the sendmail distribution.
11 cpyr
12 cpyr @(#)sendmail.hf 8,18 (BerKeley) 11/19/1998
13 cpyr
14 smtp Topics:
15 smtp HELO EHLO MAIL RCPT DATA
16 smtp RSET NOOP QUIT HELP VRFY
17 smtp EKPN VERB ETRN DSN
18 smtp For more info use "HELP <topic>".
19 smtp To report bugs in the implementation send email to
20 smtp sendmail-bugs@sendmail.org.
21 smtp For local information send email to Postmaster at your site.
22 help HELP [ <topic> ]
23 help The HELP command gives help info.
24 helo HELO <hostname>
25 helo Introduce yourself.
26 ehlo EHLO <hostname>
27 ehlo Introduce yourself, and request extended SMTP mode.
28 ehlo Possible replies include:
29 ehlo SEND Send as mail [RFC821]
30 ehlo SOML Send as mail or terminal [RFC821]
31 ehlo SAML Send as mail and terminal [RFC821]
32 ehlo EXPN Expand the mailing list [RFC821]
33 ehlo HELP Supply helpful information [RFC821]
34 ehlo TURN Turn the operation around [RFC821]
35 ehlo 8BITMIME Use 8-bit data [RFC1652]
36 ehlo SIZE Message size declaration [RFC1870]
37 ehlo VERB verbose [Allman]
33 ehlo ONEX One message transaction only [Allman]
39 ehlo CHUNKING Chunking [RFC1830]
40 ehlo BINARYMIME Binary MIME [RFC1830]
41 ehlo PIPELINING Command Pipelining [RFC1854]
42 ehlo OSN Delivery Status notification [RFC1891]
43 ehlo ETRM Remote Message Queue Starting [RFC1985]
44 ehlo XUSR Initial (user) submission [Allman]
45 mail MAIL FROM: <sender> [ <paranieters> ]
46 mail Specifies the sender. Parameters are ESMTP extensions.
47 mail See "HELP DSN" for dstails
48 rcpt RCPT TO: <recipient> [ <parameters>]
49 rcpt Specifies the recipient.Can be used any number of times.
50 rcpt Parameters are ESMTP extensions. See "HELP DSN" for details.
51 data DATA
52 data Following text is collected as the message.
53 data End with a single dot.
54 rset RSET
55 rset Resets the system.
56 quit QUIT
57 quit Exit sendmail (SMTP).

Листинг 10.2. Фрагмент файла /usr/lib/sendmail.hf

В строках 14–21 листинга 10.2 задаются стандартные справочные сообщения, которые выводятся с помощью команды HELP. После этого каждая отдельная команда выводится слева, а справа выводится справочное сообщение. Например, с помощью команды 'HELP MAIL' клиенту будут выданы строки 45, 46 и 47. Для проверки самостоятельно войдите на TCP-порт 25 и задайте команды SMTP, описанные в лекции 5 (см. листинг 10.3).

 
1 [kevin@shadrach kevin]$ telnet localhost 25
2 Trying 127.0.0.1...
3 Connected to localnost.
4 Escape character is '^]'.
5 220 shadracn.smallorg.org ESMTP sendmaill 8.9.3/8.9.3; Tue, 5 Oct 1999 19:39 -0500
6 HELP MAIL
7 214-MAIL FROM: <sender> [ <parameters> ]
8 214- Specifies the sender. Parameters are ESMTP extensions.
9 214- See "HELP DSN" for details.
10 214 End Of HELP info
11 QUIT
12 221 shadrach.smallorg.org closing connection
13 Connection closed by foreign host.
14 [kevin@shadrsch kevin]$

Листинг 10.3. Пример выполнения SMTP команды HELP

Синтаксис команд sendmail

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

 

Формат команд sendmail:

 
sendmail [flags] [address ...]

При запуске sendmail по умолчанию без флагов начинает считываться стандартный ввод пока программа не достигнет метки конца файла или строки с одной точкой (.). Затем делается вывод о том, что sendmail имеет дело с текстовым сообщением и она пытается передать его по адресу, указанному в командной строке. Такой алгоритм работы sendmail полностью повторяет поведение программы mail в ОС Linux. Однако это нестандартный путь применения sendmail. Хотя это лишний раз подтверждает универсальность sendmail. Однако для поддержки работы почтового сервера на базе ОС Linux мы в основном будем рассматривать работу sendmail в фоновом режиме в качестве процесса-демона.

 

Управление поведением sendmail можно осуществлять с помощью флагов, задаваемых при запуске из командной строки. Флаги sendmail делятся на две группы. К первой группе относятся параметры, которые оказывают влияние непосредственно на действия, выполняемые sendmail. В то же время вторая группа позволяет изменять значения параметров в файле конфигурации. Значения параметров в конфигурационном файле никогда не меняются.

 

Параметры командной строки sendmail

Итак, поведением программы sendmail можно управлять с помощью параметров командной строки. Функционирование sendmail довольно сильно зависит от параметров, заданных при запуске в командной строке. По умолчанию при запуске программа sendmail считывает свой файл конфигурации и получает из него значения важных параметров. Параметры командной строки могут применяться для изменения этих значений "на лету". Таким образом отпадает необходимость в создании нового файла конфигурации. В этом разделе описаны параметры и их влияние на работу sendmail.

 

Формат тела сообщения

Параметр: -B

 

Параметр -B описывает для sendmail формат тела сообщения. Значения этого параметра варьируют между 7BIT и 8BITMIME.

 

Режим работы sendmail

Параметр: -b

 

Режим работы sendmail устанавливается параметром -b. В табл. 10.1 представлены возможные значения этого параметра.

 
Таблица 10.1. Режимы работы sendmail по параметру -b
Режим Описание
a Режим ARPANET
d Запуск в фоновом режиме в качестве процесса-демона
D Запуск в активном режиме
h Отображение базы данных хостов (то же, что и hoststat)
H Очистка базы данных хостов (то же, что и purgestat)
i Инициализация базы данных псевдонимов
m Доставить почту (по умолчанию)
p Отобразить содержимое очереди почтовых сообщений (то же, что и mailq)
s Использовать для ввода-вывода протокол SMTP
t Запустить в тестовом режиме
v Только проверять имена. Сообщения не доставляются
 

Большинство параметров запускаются только с правами пользователя root. Таким образом, в sendmail осуществляется ограничение доступа для других пользователей. Обычно sendmail запускается в фоновом режиме в виде процесса-демона с параметром -bd. При тестировании нового файла конфигурации применяется параметр -bt. В этом режиме sendmail обрабатывает набор правил и генерирует результаты своей работы без обработки реального почтового трафика на сервере. Это дает возможность любому пользователю запускать sendmail с параметром -bt, не вызывая конфликтов, даже когда в фоновом режиме запущен еще один процесс-демон sendmail.

 

Альтернативная конфигурация sendmail

Параметр:

 

С помощью параметра программе sendmail указывается обращаться к другому файлу конфигурации, отличному от файла конфигурации по умолчанию (/etc/sendmail.cf). Когда задан этот параметр, sendmail запускается с правами того пользователя, который инициировал запуск sendmail, а не с правами root. Как правило, этот параметр используется при тестировании новых файлов конфигурации, хотя его можно задавать и для ссылки на альтернативный файл конфигурации. При тестировании нового файла конфигурации с параметром -bt можно задавать и параметр . То есть не нужно изменять оригинальный файл конфигурации — тестирование проводится с альтернативным файлом.

 

Запуск в режиме отладки

Параметр: -d

 

При задании в командной строке параметра -d активируются флаги для отладки sendmail. Различным флагам отладки соответствуют различные уровни отладки. С параметром -d можно указывать несколько флагов.

 

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

 
Таблица 10.2. Примеры задания sendmail параметра -d
Параметр Описание
-d1 Устанавливает флаг отладки 1 для уровня 1
-d1.4 Устанавливает флаг отладки 1 для уровня 4
-d2-5.2 Устанавливает флаги отладки 2–5 для уровня 2
-d12.9,15.9 Устанавливает флаги отладки 12 и 15 для уровня 2
 

Предупреждение

Будьте осторожны при использовании дополнительных режимов отладки. При установлении более высокого уровня отладки в файлах отчетов формируется больше строк, что может привести к переполнению диска.

 

Установка полного имени отправителя

Параметр: -F

 

С помощью параметра -F устанавливается полное имя отправителя сообщения. При доставке сообщения на удаленный узел sendmail устанавливает это значение в сообщении в поле From: (От:).

 

Установка имени пользователя отправителя

Параметр: -f

 

С помощью этого параметра пользователь может изменить имя отправителя сообщения в поле From: (От:) на имя, под которым он зарегистрировался в системе. Этот механизм может использоваться только для пользователей с высоким уровнем доверия типа root или daemon.

 

Установка счетчика переприемов

Параметр: -h

 

Параметром -h определяется максимальное количество переприемов, разрешенное для сообщения. Когда почтовый сервер выбирает маршрут для сообщения, счетчик переприемов увеличивается на единицу. При прохождении каждого узла этот счетчик также увеличивает свое значение. Если число переприемов превысило установленное этим параметром значение, то sendmail бракует сообщение и прекращает его доставку. Этот параметр помогает бороться с петлями при маршрутизации почты.

 

Изменение метки конца сообщения

Параметр: -i

 

Параметр -i заставляет sendmail игнорировать строки с одиночными точками. По умолчанию принято, что строка с одной точкой указывает на конец сообщения. Этот параметр часто используется при чтении данных из файла, где возможны одиночные точки в строках, которые не обозначают конец сообщения. В случае применения этого параметра в качестве символа, обозначающего конец сообщения, используется символ Ctrl+D (ASCII 0x04).

 

Параметр выдачи уведомления

Параметр: -N

 

Параметр -N определяет выдачу уведомления о текущем состоянии сообщения. Этот параметр может принимать значения NEVER, FAILURE, DELAY и SUCCESS. Значение NEVER говорит о том, что выдавать уведомление не нужно. Значение FAILURE означает, что сообщение не доставлено. Если sendmail задано получать уведомление, то значение DELAY означает задержку сообщения, а SUCCESS говорит об успешной отправке сообщения.

 

Параметр запрещения пересылки

Параметр: -n

 

Параметром -n в sendmail запрещается пересылка и использование почтовых псевдонимов.

 

Параметр установки почтового транспортного протокола

Параметр: -p

 

Параметр -p определяет протокол, который будет использоваться для доставки сообщения. Значения этого параметра могут определять либо просто тип используемого протокола, как, например, SMTP или UUCP, либо тип протокола и транзитный хост, разделенные двоеточием (smtp:mail.isp.net или uucp-dom:ispmail). Если задан этот параметр, то sendmail пытается при доставке сообщения использовать заданные протокол и хост, в противном случае будут использоваться установки, взятые из файла конфигурации. Этот параметр нужно использовать для временного перенаправления почты на другой узел, если основной узел неисправен.

 

Параметр установки обработки очереди

Параметр: -q

 

Параметр -q определяет способы обработки почты в очереди. Когда он задан без других параметров, то sendmail один раз обрабатывает очередь почтовых сообщений и выключается.

 

С параметром -q можно задавать интервалы времени, через которые sendmail будет повторять обработку очереди. Интервалы времени можно задавать в секундах (s), минутах (m), часах (h), днях (d) и неделях (w). Так, например, -q30m задает sendmail обрабатывать очередь почтовых сообщений с интервалом 30 минут и отсылать сообщения, ждущие отправки. Довольно часто этот параметр задается совместно с параметрами -bd, что позволяет запускать sendmail в фоновом режиме и регулярно обрабатывать сообщения в очереди.

 

Существует и другой формат использования параметра -q — с применением специальных строк для обработки почтовых сообщений в очереди. Согласно этому формату, sendmail ищет заголовки почтовых сообщений, содержащие строку string, и обрабатывает все сообщения, которые найдены по этому критерию. Эти типы форматов включают в себя:

 
  • -qIstring — поиск строки в очереди со специфическим идентификатором;
  • -qRstring — поиск строки с определенным получателем сообщения;
  • -qSstring — поиск строки с заданным отправителем сообщения.
 

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

 

Сообщение о невозможности доставки почты

Параметр: -R

 

Параметр -R определяет какое сообщение будет выдаваться при невозможности доставки сообщения получателю. Этот параметр может принимать значения "full" для вывода полного текста исходного сообщения и "hdrs" для вывода заголовка сообщения в формате RFC822.

 

Извлечение получателей из заголовка сообщения

Параметр: -t

 

По параметру -t из заголовка сообщения формата RFC822 извлекаются адреса получателей сообщения. При этом сканируются все строки To:, CC: и BCC:. Затем сообщение посылается по указанным адресам.

 

"Невидимые" копии

 

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

 

Идентификация источника сообщения

Параметр: -U

 

Параметр -U сигнализирует о том, что сообщение было послано почтовым пользовательским агентом (MUA), а не получено от другого почтового транспортного агента (МТА). Это позволяет sendmail обрабатывать сообщения в зависимости от того, откуда получено сообщение. Однако в настоящее время функции по обработке сообщений, обеспечиваемые этим параметром, не поддерживаются.

 

Установка идентификатора конверта для сообщения

Параметр: -V

 

Параметр -V задает идентификатор конверта. Идентификатор конверта используется в заголовке формата RFC822 для уникальной идентификации сообщения. Устанавливая идентификатор конверта в sendmail, почтовая программа сможет идентифицировать сообщения, исходящие от локального хоста. Этот параметр может использоваться вместе с параметром -N для идентификации сообщений, которые не были доставлены удаленным МТА.

 

Установка детализации

Параметр: -v

 

Использование sendmail в режиме детализации задается параметром -v. Все задачи, выполняемые sendmail, при этом будут выдаваться на стандартный вывод. Этот параметр используется при отладке работы sendmail и не используется, когда она работает в нормальном режиме.

 

Определение файлов отчетов

Параметр: -X

 

Параметр -X определяет файлы отчета, где sendmail протоколирует все входящие и исходящие соединения. Использование этого параметра приводит к стремительному росту объемов файлов отчетов, поэтому его желательно использовать только для отладки.

 

Метка "конец параметров"

Параметр: --

 

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

 

Изменение параметров файла конфигурации

Параметр: -O

 
-o

Параметры -O и -o используются для замены значений параметров в файле конфигурации. Параметры в файле конфигурации определяют поведение sendmail на локальном компьютере и то, каким образом она взаимодействует с удаленными узлами. Ранее в sendmail применялись односимвольные параметры, однако вскоре обнаружилась нехватка символов для описания новых параметров. Тогда были разработаны параметры с более длинными именами, и для их описания уже использовались целые строки текста.

 

С помощью параметра -o задаются значения любым коротким (односимвольным) параметрам. Формат этого параметра следующий:

 
-ox value,

где x — имя односимвольного параметра, а value — его требуемое значение.

 

По параметру -O заменяются длинные параметры файла конфигурации. Этот параметр имеет следующий формат:

 
-O option=value,

где option — имя параметра, а value — его значение. В следующем разделе "Файл конфигурации sendmail" описываются параметры sendmail и их применение при управлении sendmail.

 

Файл конфигурации sendmail

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

 

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

 

В правилах работы с почтой имеются свои справочные функции, которые также можно определить в файле конфигурации. Так, классы (classes) определяют общие фразы, которые помогают задавать наборы правил для сообщений определенного типа. Макросы (macros) представляют собой наборы значений для упрощения набора длинных строк текста в файле конфигурации. Под параметрами (options) понимают набор параметров для обеспечения работы программы sendmail (см. предыдущий раздел про команды sendmail ).

 

Файл конфигурации представляет собой блоки строк текста. Каждая строка начинается с одиночного символа, который определяет действие, выполняемое данной строкой. Строки, которые начинаются символами пробела или табуляции, являются продолжением предыдущей строки. Строки со знаком (#) используются для комментариев и программой sendmail игнорируются. В табл. 10.3 представлены стандартные обозначения строк из конфигурационного файла sendmail и их смысл.

 
Таблица 10.3. Строки файла конфигурации sendmail
Строка конфигурации Описание
C Определяет классы текста
D Определяет макрос
F Определяет файлы, содержащие классы текста
H Определяет поля заголовка и действия над ними
K Определяет базы данных, содержащие текстовые данные для поиска
M Определяет почтовые узлы
O Определяет параметры sendmail
P Определяет значения старшинства
R Определяет наборы правил для работы с адресами
S Определяет группы наборов правил
 

Предупреждение

 

Файл конфигурации sendmail чувствителен к регистру букв. Все строки конфигурации должны начинаться с заглавных букв, иначе sendmail не сможет их распознать.

 

Содержимое файла конфигурации

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

 

Строки макроса D

Строки конфигурации, которые начинаются с "D", определяют макрос, применяемый в наборах правил. Макрос представляет собой слово или фразу, которая передает смысл переменной окружения. Имя макроса определяется как одиночный символ или слово, заключенное в фигурные скобки ({}). Для указания специфических параметров почтового узла администратор почтовой системы может использовать заглавные буквы. Ниже представлен формат D-строки:

 
Dx value,

где x является именем макроса, а value его значением. После того как макрос определен, его можно дополнить командой $x, где x — имя макроса.

 

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

 
$?x value1 $| value2 $,

где x представляет собой имя макроса, а value1 — значение, которое должен принять макрос, если он уже был ранее определен. В противном случае макрос с заданным именем должен принять значение value2. Символы "$|" не должны включаться в команду.

 

Как уже упоминалось ранее, в sendmail используются предварительно определенные макросы для фраз общего пользования. В табл. 10.4 представлены некоторые предварительно определенные макросы.

 
Таблица 10.4. Макросы D для sendmail
Макрос Описание
$a Дата отправки сообщения из поля Date: (Дата: )
$b Текущая дата в формате RFC822
$c Число переприемов сообщения
$d Текущая дата в UNIX-формате
$f Адрес отправителя
$g Относительный адрес отправителя (включая имя хоста)
$h Идентификатор сообщения в очереди
$i Полное доменное имя узла
$j UUCP-имя узла
$k Доменная часть в gethostbyname
$m Имя процесса-демона sendmail
$n Идентификатор процесса sendmail
$p Формат адреса отправителя по умолчанию
$r Протокол, используемый для приема сообщения
$s Имя хоста отправителя
$t Числовое выражение текущего времени
$u Получатель сообщения
$v Номер версии sendmail
$w Имя хоста узла
$x Полное имя отправителя
$z Рабочий каталог получателя
$_ Проверенный адрес отправителя
${bodytype} Тип тела сообщения
${client_addr} IP-адрес SMTP-клиента
${client_name} Имя хоста SMTP-клиента
${client_port} Номер TCP-порта SMTP-клиента
${envid} Идентификатор конверта, переданный sendmail
${opMode} Текущий режим работы (c параметром -b )
${deliveryMode} Текущий режим доставки (по параметру DeliveryMode )
 

Категоризация фраз с помощью С-строк

Строки конфигурации, которые начинаются с "С", определяют классы фраз, используемых в наборах правил. Классы группируют фразы, в которых имеется что-то общее, чтобы наборы правил могли затем сканировать класс на соответствие определенным критериям. Формат С-строки выглядит так:

 
Ccphrase1 phrase2 ... ,

где c является именем класса, а phrase1, phrase2 и т.д. представляют собой фразы, которые группируются в класс. Подобно D-командам, имена классов должны быть либо односимвольными, либо представлять собой слово, заключенное в фигурные скобки ({}). Имена классов с прописными буквами или со специальными символами зарезервированы в программе sendmail для внутреннего использования. При определении классов, специфических для конкретного узла, администраторы почтовых систем могут использовать в именах классов лишь заглавные буквы. В табл. 10.5 представлен список некоторых предварительно описанных имен классов, которые используются внутри sendmail.

 
Таблица 10.5. С- классы в sendmail
Класс Описание
e Кодировка содержания сообщения (может быть 7 бит, 8 бит и двоичная)
k UUCP-имя узла
m Доменное имя
n Определяет типы тела MIME, которые не могут быть закодированы 7 битами
q Определяет типы тела сообщения, которые не могут быть закодированы base64
s Определяет подклассы сообщений, которые могут быть обработаны рекурсивно
t Определяет набор пользователей с высокой степенью доверия
w Определяет все имена, под которыми известен данный хост
 

Идентификация классов с помощью F-строк

Строки конфигурации, которые начинаются с буквы "F" также определяют классы, которые могут использоваться наборами правил, но немного иначе, чем С-строки. F-строки указывают на имена файлов, в которых содержатся списки фраз, используемых наборами правил. Формат F-строки следующий:

 
Fc filename,

где c — одиночный символ имени класса, а filename — полный путь к файлу, в котором содержатся фразы. Следует помнить, что каждая фраза помещается в отдельной строке.

 

Как и в случае с С-строками, для описания внутренних классов в sendmail используются прописные буквы и специальные символы в имени класса. Для определения параметров, специфических для конкретных узлов, администраторам почтовых систем следует использовать в именах классов заглавные буквы.

 

Определение класса базы данных с помощью К-строк

Подобно F-строкам, K-строки используются для определения файла, в котором содержатся фразы, используемые отдельным правилом. Однако при этом в К-строках определяется специальный тип файла. Строки конфигурации, которые начинаются с "К", определяют специальные базы данных, которые используются sendmail при поиске определенной информации. Посредством базы данных sendmail может более оперативно обращаться к нужной информации, чем при использовании файлов с F-строками. Формат K-строки следующий:

 
Kmapname mapclass arguments,

где mapname — имя базы данных, в том виде, как оно заявлено в файле конфигурации; mapclass — тип сгенерированной базы данных, а arguments — аргументы, которые передаются sendmail для оказания помощи в создании базы данных. Часто в роли аргументов выступают местоположение базы данных и флаги для работы с ней.

 

Отображения в базе данных производятся набором правил, который имеет следующий синтаксис:

 
$(map key $@ arguments $: default $),

где map выступает в роли имени отображения, а key и arguments передаются функции отображения для получения соответствующей записи из базы данных. Значение default используется, если запись из базы не извлекается.

 

Аргумент mapclass — это, по сути, тип базы данных, к которой обращается sendmail для получения тех или иных данных. Каждый тип базы данных имеет свой специфический метод индексации и организации доступа к данным. Существует большое количество типов mapclass, с которыми может работать sendmail. Наиболее общие классы представлены в табл. 10.6.

 
Таблица 10.6. Типы баз данных в sendmail, задаваемые в К- строке
Тип Описание
dbm Использовать библиотеку ndbm(3)
btree Использовать интерфейс btree для доступа к библиотекам баз данных Berkeley
hash Использовать интерфейс hash для доступа к библиотекам баз данных Berkeley
nis Использовать средства для просмотра NIS
ldapx Использовать средства для просмотра каталогов LDAP x.500
text Использовать средства для просмотра текстовых файлов
implicit Производить просмотр файлов псевдонимов по умолчанию
user При поиске имен пользователей использовать функцию getpwnam()
host При поиске имен использовать DNS
bestmx При поиске оптимальной МХ -записи для хоста использовать DNS
sequence Использовать список отображений при просмотре
program Использовать внешнюю программу при просмотре
 

В настоящее время в ОС Linux поддерживаются только типы btree и hash. Причем для отображения баз данных в sendmail чаще применяется тип hash.

 

Отображенные базы данных могут быть получены из текстовых файлов с помощью команды makemap. Формат этой команды следующий:

 
makemap mapclass outputfile < textfile,

где mapclass — тип отображения базы данных, который используется, textfile является текстовой версией базы данных, используемой в качестве исходных данных для отображения, а outputfile представляет собой уже преобразованную базу данных.

 

Определение заголовка с помощью Н-строк

Строки конфигурации, которые начинаются с "Н", определяют формат строк заголовка, которые помещаются программой sendmail в сообщение. В строках заголовка употребляются макросы и флаги макросов, которые определяют соответствующий синтаксис заголовка почтового сообщения, в зависимости от протокола, используемого для доставки сообщения. Узлы SMTP и хосты UUCP принимают сообщения с различными заголовками. Формат Н-строки следующий:

 
H[?mflags?]hname:htemplate,

где mflags — флаги макроса, которые должны быть указаны вместе с самим макросом, hname — имя строки заголовка, а htemplate — формат строки заголовка с макросом в ней. Перед помещением в исходящее сообщение макросы преобразуются в свои нормальные имена.

 

Для передачи сообщения определенному набору правил, если имеется специальный заголовок, используется еще один формат Н-строки:

 
Hheader:$>Ruleset,

где header — поле заголовка, а Ruleset — номер набора правил (см. раздел "Наборы правил" далее в этой лекции). Пример применения Н-строк представлен в листинге 10.4.

 
1 H?P?Return-Path: <$g>
2 HReceived: $?sfrom $s $.$?_($?sS|from $.$_)
3 $.by $j ($v/$Z)$?r with $r$, id $i$?u
4 for $u; $|;
5 $.$b
6 H?D?Resent-Date: $a
7 H?D?Date: $a
8 H?F?Resen-From: $?x$x <$g>$|$g$.
9 H?F?From: $?x$x <Sg>$|$g$.
10 H?x?Full-Name: $x
11 # HPosted-Date: $a
12 # H?l?Received-Date: $b
13 H?M?Resernt-Message-Id: <$t.$i@$j>
14 H?M?Message-Id: <$t.$i@$j>

Листинг 10.4. Пример применения Н- строк в sendmail

В листинге 10.4 строка 1 представляет собой простую Н-строку с условием, которое определяется макросом. Если в ней задан макрос P, который описан ранее в файле sendmail.cf как одиночная точка (.), то sendmail добавляет поле заголовка Return-Path с макросом $g в качестве данных для этого поля. Как указано в табл. 10.4 макрос $g отображает относительный адрес отправителя. А относительным этот адрес называется потому, что он ставится в соответствие с определенным получателем. Таким образом, Н-строки указывают sendmail добавлять полное имя пользователя и имя хоста в поле заголовка Return-Path, если задан флаг макроса Р.

 

Конфигурирование почтовой программы с помощью М-строк

Строки конфигурации, которые начинаются с буквы "М", определяют программу, используемую sendmail для пересылки почты. Различные почтовые программы должны быть описаны для sendmail с помощью М-строк. Тогда ей будет понятно, как работать с ними. Формат М-строки следующий:

 
Mprog, [field=value]... ,

где prog — имя почтовой программы, а все пары field=value описывают атрибуты, необходимые для работы sendmail с этой программой. В именах полей могут использоваться полные названия полей, хотя в sendmail используются лишь первые символы из названия поля. В табл. 10.7 приведены М-строки полей, которые могут применяться в sendmail.

 
Таблица 10.7. Поля М- строки в sendmail
Поле Описание
Path Путь к почтовой программе
Flags Флаги для почтовой программы
Sender Набор правил для адреса отправителя
Recipient Набор правил для адреса получателя
Argv Аргументы, которые передаются с почтовой программой
Eoi Метка конца строки, используемая в почтовой программе
Maxsize Максимальная длина сообщения, обрабатываемого почтовой программой
Linelimit Максимальная длина строки, обрабатываемой почтовой программой
Directory Рабочий каталог почтовой программы
Userid Идентификаторы пользователя и группы, используемые по умолчанию при запуске почтовой программы
Nice Значение переменной nice() для почтовой программы
Charset Кодировка, принятая в сообщениях (по умолчанию 8 бит)
Type Тип MTS, используемый в сообщениях об ошибках
 

Поле Flags используется для определения порядка применения почтовой программы программой sendmail. Флаги определяют действия, которые sendmail может предпринимать при вызове почтовой программы. В поле Flags может использоваться сразу несколько флагов. Тогда все они задаются в одной строке без пробелов. В табл. 10.8 дается описание некоторых флагов.

 
Таблица 10.8. Флаги, задаваемые в М- строке sendmail
Флаг Описание
a Использовать ЕSMTP
A Использовать базу данных псевдонимов
b Принудительно вводить пустую строку в конце сообщения
c Не включать в адреса комментарии
C Добавлять имя локального домена к принятым адресам без символа @
d Не включать квадратные скобки при выводе маршрутной информации
D Включать поле заголовка "Date: "
F Включать поле заголовка "From: "
h Сохранять прописные буквы в именах хостов
l Локальная почтовая программа
m За одну транзакцию почтовая программа может выполнять доставку нескольким пользователям
M Включать поле заголовка Message-ID:
n Не вставлять UNIX-строки типа From:
S Не сбрасывать идентификатор пользователя перед вызовом почтовой программы
u Сохранять прописные буквы в именах пользователей
U Строки From: UUCP-типа
5 Если псевдонимы не определены, для принятия решения использовать набор правил с номером 5
9 Преобразование расширений MIME из 7-битового вида в 8-битовый
 

В листинге 10.5 в качестве примера приведены некоторые М-строки из файла sendmail.cf.

 
1 ### SMTP Mailer specification ###
2 Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21,E=\r\n L=990, T=DNS/RFC822/SMTP,
3 Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990, T=DNS/RFC822/SMTP,
4 Msmtp8, P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990, T=DNS/RFC822/SMTP,
5 Mrelay, P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040, T=DNS/RFC822/SMTP,
6 ### UUCP Mailer specification ###
7 Muucp, P=/usr/bin/uux, F=DFMhuUd, S=12, R=22/42, M=100000,
8 Muucp-old, P=/usr/bin/uux, F=DFMhuUd, S=12, R=22/42, M=100000,
9 Msuucp, P=/usr/bin/uux, F=mDFMhuUd, S=12, R=22/42, M=100000,
10 Muucp-new, P=/usr/bin/uux, F=mDFMhuUd, S=12, R=22/42, M=100000,
11 Muucp-dom, P=/usr/bin/uux, F=mDFMhud, S=52/31, R=21, M=100000,
12 Muucp-uudom, P=/usr/bin/uux, F=mDFMhud, S=72/31, R=21, M=100000,
13 ### PROCMAIL Mailer specification ###
14 Mprocmail, P=/usr/local/bin/procmail, F=DFMSPhnu9, S=11/31, R=21/31, T=DNS/RFC822/X-Unix,
15 ### Local and Program Mailer specification ###
16 Hlocal, P=/usr/local/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40,
17 Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,

Листинг 10.5. Пример применения конфигурационных М- строк

В строках 2–5 листинга 10.5 описываются почтовые программы для работы по протоколу SMTP, а в строках 7–12 почтовые программы для работы с UUCP. В строке 14 описывается почтовая программа procmail, а в строках 16 и 17 определяются почтовые программы, которые используются локальной программой для обработки почты. Для того чтобы sendmail смогла производить запуск соответствующих программ, указываются полные пути к выполняемым файлам почтовых программ. Работая с SMTP-соединениями, программа sendmail может использовать для пересылки почты свои внутренние IP-соединения.

 

В строке 11 описывается почтовая программа, которая часто применяется для подключения офисов компаний к сети Internet. Программа uucp-dom специально разработана для передачи почтовых сообщений с использованием протокола UUCP, однако в ней имеется поддержка стандартных заголовков сообщения формата RFC822. Узнать, каким образом sendmail пересылает сообщения этой почтовой программе, можно с помощью анализа М-строк:

 
  • Путь к выполняемому файлу (P) /usr/sbin/uux;
  • Флаги, задаваемые выполняемому файлу (F):
    • m — sendmail за одну транзакцию может посылать сообщения нескольким пользователям;
    • D — sendmail пересылает поле Date: формата RFC 822;
    • F — sendmail пересылает поле From: формата RFC 822;
    • M — sendmail пересылает поле Message ID: формата RFC 822;
    • h — sendmail сохраняет прописные и заглавные буквы в именах хостов;
    • u — sendmail сохраняет прописные буквы в именах пользователей;
    • d — sendmail не включает квадратные скобки при выводе маршрутной информации;
     
  • Наборы правил для отправителя — 52 и 31;
  • Набор правил для получателя — 21;
  • Максимальный допустимый размер сообщения для пересылки 100000 байт.
 

Интереснее выяснить, какой из флагов не представлен в строке 11. Обратите внимание, что в строках 7–10 задан флаг U. Этот флаг sendmail означает, что сообщения должны пересылаться с применением UUCP-стиля для поля From:. Так как протокол в uucp-dom не изменяет формат сообщения, этот флаг должен присутствовать.

 

Определение приоритетов с помощью Р-строк

Строки конфигурации, которые начинаются буквой "Р", определяют значения приоритетов. В каждом сообщении формата RFC822 может использоваться заголовок Precedence:, в котором обозначаются признаки срочности сообщения. Назначение поля Precedence: заключается в особой обработке важных сообщений. Конфигурация с помощью Р-строк позволяет sendmail назначать числовые значения приоритетов на основании содержания поля Precedence:. Тогда пересылка почты осуществляется на основании значения в поле Precedence:. Формат Р-строки следующий:

 
Ptext=value,

где text — содержимое поля Precedence:, а value — числовое значение, которое используется sendmail для определения степени важности сообщения. Более высокие значения value говорят о более высоком приоритете сообщения. В некоторых случаях в конфигурации sendmail можно задавать отрицательные значения приоритетов для классов "bulk" и "junk" в поле Precedence:, чтобы быть уверенным в том, что сообщения этих классов имеют самый низкий приоритет при доставке сообщений. Задание приоритетов сообщениям в конфигурационном файле выглядит примерно таким образом:

 
Pfirst-class=0
Pspecial-delivery=100
Plist=-30
Pbulk=-60
Pjunk=-100

При такой конфигурации почте присваивается первый класс, который имеет наивысший приоритет, а спаму (помечаемому как junk) задается самый низкий приоритет при передаче.

 

Определение параметров с помощью О-строк

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

 

В ранних версиях sendmail применялись односимвольные названия параметров. Формат О-строки с использованием таких параметров следующий:

 
Oo value,

где o — односимвольное имя параметра, а value представляет собой значение этого параметра. В настоящее время sendmail распознает и параметры длиной в несколько символов. Формат О-строки для параметров с длинными именами следующий:

 
О option=value,

где option — длинное имя параметра, а value представляет собой его значение. В зависимости от параметра значение value может быть текстовым, целочисленным, логическим (булевым) или интервалом времени.

 

Для управления работой sendmail имеется большое количество параметров. Их настолько много, что нам не хватит этой лекции, чтобы описать их все. В табл. 10.9 представлены некоторые наиболее часто используемые параметры конфигурирования sendmail для работы на стандартном почтовом сервере.

 
Таблица 10.9. Параметры sendmail
Параметр Описание
AliasFile Определяет файл почтовых псевдонимов
DefaultUser Устанавливает идентификаторы пользователя и группы, с которыми будет запускаться sendmail
DontBlamesendmail Разрешает всем внешним пользователям выполнять чтение-запись из каталогов и файлов (очень опасно!)
HoldExpensive Позволяет sendmail собирать почту в специальную очередь для дальнейшей обработки другими почтовыми программами
CheckpointInterval Устанавливает интервал времени, через который проверяется очередь
DeliveryMode Устанавливает режим доставки (интерактивный, фоновый, с помещением в очередь или с отложенной доставкой)
ErrorMode Устанавливает метод уведомления об ошибках (выводить на печать, уведомлять по электронной почте или не уведомлять об ошибках)
SaveFromLine Сохраняет все UNIX-заголовки From:, даже если они являются избыточными
MaxHopCount Устанавливает, сколько раз сообщение может обрабатываться другими МТА (количество переприемов). Сообщение аннулируется, если это значение превышено
IgnoreDots Игнорировать точки во входящих сообщениях. В SMTP всегда запрещено
SendMimeErrors Сообщения об ошибках выдаются в формате MIME
ConnectionCacheTimeout Устанавливает максимальный интервал времени ожидания для соединения с кэшем
LogLevel Устанавливает уровень детализации отчетов. По умолчанию это значение равно 9
MeToo Пересылает сообщение на указанное имя пользователя, даже если это псевдоним
CheckAliases Проверка псевдонимов при реконструкции базы данных псевдонимов
OldStyleHeaders Разрешает применение заголовков старого формата с использованием пробелов в качестве разделителей
QueueDirectory Определяет каталог, где находится очередь почтовых сообщений
StatusFile Собирает статистические данные о текущем состоянии в файл
Timeout.queuereturn Устанавливает интервал ожидания сообщения
UserDatabaseSpec Устанавливает спецификацию базу данных пользователей
ForkEachJob Для доставки каждого задания в очередь использовать отдельный процесс
SevenBitInput Урезает ввод до 7 бит
EightBitMode Определяет метод обработки 8-битовых данных
MinQueueAge Обрабатывать только те задания, которые находятся в очереди уже определенное время
DefaultCharSet Устанавливает кодировку при преобразовании данных в MIME-формат
DialDelay Определяет время задержки для сетей с установлением соединения по запросу
NoRecipientAction Определяет обработку сообщений, у которых нет корректных получателей
MaxDaemonChildren Определяет количество дочерних процессов sendmail, которые позволяют производить одновременную обработку входящей почты
ConnectionRateThrottle Определяет максимальное количество входящих соединений, которые процесс-демон может обработать параллельно
 

Некоторые примеры параметров, применяемых в стандартной конфигурации:

 
O AliasFile=/etc/aliases
O DefaultUser=8:12
O DeliveryMode=background
O HelpFile=/usr/lib/sendmail.hf

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

 

Наборы правил

Ядро файла конфигурации составляют наборы правил. Наборы правил являются для sendmail инструкцией, определяющей действия, которые должны выполняться над входящими сообщениями, а также способы доставки сообщения получателям. В наборах правил обычно используются R-строки и S-строки конфигурации. С помощью R-строк определяется алгоритм действий, выполняемых с сообщением, в то время как S-строки используются для определения групп наборов правил. В последующих разделах дается описание R- и S-строк конфигурации.

 

Определение действий с принятыми сообщениями с помощью R-строк

В R-строках применяются специальные маркеры для анализа и обработки входящего сообщения. С их помощью определяются получатели сообщения и способы его доставки. В каждой R-строке задается одно правило. Правило состоит из двух частей — левой части (LHS) и правой части (RHS). Часть LHS определяет, какие маркеры необходимо искать во входящем сообщении. В то же время в RHS определяется, каким образом переписывать адрес с учетом маркеров из LHS. Формат R-строки следующий:

 
Rlhs rhs comments

Каждое поле должно разделяться по крайней мере одним символом табуляции. Все макросы и классы, используемые в наборе правил, расширяются в соответствии с информацией, полученной о сообщении. Для анализа сообщений в LHS определяются новые метасимволы. В табл. 10.10 представлены метасимволы, используемые в макросах LHS.

 
Таблица 10.10. Метасимволы LHS для наборов правил в sendmail
Символ Описание
$* Соответствуют ноль или более маркеров
$+ Соответствуют один или более маркеров
$- Соответствует только один маркер
$@ Не соответствует ни одного маркера
$=x Соответствует любой элемент класса x
$-x Не соответствуют элементы класса x
 

Когда обнаружены маркеры, соответствующие метасимволу в LHS, то они назначаются в качестве величины макроса в RHS. Каждое новое имя макроса задается в форме $nv, где n — числовой индекс маркера в сообщении. Например, если в LHS в качестве входных данных для uucp-dom:ispmail задано "$-:$+", то RHS передаются значения $1, что соответствует "uucp-dom" и $2, обозначающее "ispmail".

 

Если в сообщении не найдено соответствий метасимволам LHS, то никакие действия набором правил не выполняются. Если же во входящем сообщении найдены соответствия метасимволам LHS, то входные данные переписываются в формат RHS. При перезаписи сообщения в RHS также применяются метасимволы. В табл. 10.11 представлены метасимволы, которые применяются в RHS.

 
Таблица 10.11. Метасимволы RHS для наборов правил в sendmail
Символ Описание
$n Подстановка маркера n из LHS
$[name$] Канонизация имени
$(map key $@ arguments $:Default $) Универсальный ключ для функции преобразования
$>n Вызов набора правил n
$#mailer Передача управления почтовой программе
$@host Определение хоста
$:user Определение пользователя
 

Как показано в табл. 10.11, любые имена хостов, которые передаются в RHS, заключаются в скобки с символом $[$], а затем расширяются до своего нормального вида, включая доменное имя. Также из табл. 10.11 видно, что один набор правил может напрямую вызывать другой набор правил посредством метасимвола $>n, где n представляет собой идентификатор S-строки следующего набора правил.

 

Предупреждение

 

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

 

Формирование наборов правил с помощью S-строк

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

 
Таблица 10.12. Номера наборов правил в sendmail
Набор правил Описание
0 Передача управления почтовой программе, хосту и пользователю
1 Применяется ко всем адресам отправителей
2 Применяется ко всем адресам получателей
3 Преобразует адреса в каноническую форму
4 Преобразует внутренние адреса во внешние
kj Применяется к локальным адресам, у которых нет псевдонимов
 

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

 

 

Схема взаимодействия наборов правил sendmail

Рис. 10.1.  Схема взаимодействия наборов правил sendmail

 

 

Как видно из рис. 10.1, все сообщения сначала проходят через набор правил номер 3. В этом наборе правил происходит "очистка" адресов посредством их преобразования в канонические. После обработки набором правил 3 производится обработка сообщения набором правил 0. Здесь из адерса извлекаются имя почтовой программы, имя хоста и имя пользователя. Затем сообщение передается соответствующей почтовой программе.

 

Подобно этому работают набор правил 1, в котором производится перезапись адресов отправителей, и набор правил 2, где перезаписываются адреса получателей. Затем вся информация передается набору правил 4 для преобразования адресов в формат, удобный для передачи сообщения во внешний мир.

 

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

 
1 [rich@shadrach rich]$ /usr/sbin/sendmail -bt -C test.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 96 input: rich
7 rewrite ruleset 96 returns: rich
8 rewrite ruleset 3 returns: rich
9 rewrite ruleset 0 input: rich
10 rewrite ruleset 199 input: rich
11 rewrite ruleset 199 returns: rich
12 rewrite ruleset 98 input: rich
13 rewrite ruleset 98 returns: rich
14 rewrite ruleset 198 input: rich
15 rewrite ruleset 198 returns: $# local $: rich
16 rewrite ruleset 0 returns: $# local $: rich
17 > 3,0 president@whitehouse.gov
18 rewrite ruleset 3 input: president @ whitehouse . gov
19 rewrite ruleset 96 input: president < @ whitehouse . gov >
20 rewrite ruleset 96 returns: president < @ whitehouse . gov >
21 rewrite ruleset 3 returns: president < @ whitehouse . gov >
22 rewrite ruleset 0 input: president < @ whitehouse . gov >
23 rewrite ruleset 199 input: president < @ whitehouse . gov >
24 rewrite ruleset 199 returns: president < @ whitehouse . gov >
25 rewrite ruleset 98 input: president < @ whitehouse . gov >
26 rewrite ruleset 98 returns: president < @ whitehouse . gov >
27 rewrite ruleset 198 input: president < @ whitehouse . gov >
28 rewrite ruleset 95 input: < uucp-dom : ispmail > president < @ whitehouse . gov >
29 rewrite ruleset 95 returns: $# uucp-dom $@ ispmail $: president < @ whitehouse . gov >
30 rewrite ruleset 198 returns: $# uucp-dom $@ ispmail $: president < @ whitehouse . gov >
31 rewrite ruleset 0 returns: $# uucp-dom $@ ispmail S: president < @ whitehouse . gov >
32 >

Листинг 10.6. Пример сеанса работы sendmail с параметрами -bt

В строке 1 листинга 10.6 с параметрами -bt запускается программа sendmail для тестирования файла конфигурации, заданного параметром . В строке 4 адрес "rich" тестируется сначала набором правил 3, а затем набором правил 0. В строках 5–8 в наборе правил 3 в качестве входных данных используется адрес "rich". Набор правил 3 вызывает другой набор правил 96 для обработки входных данных и затем в качестве вывода возвращает также адрес "rich". Работу набора правил 0 можно проследить в строках 9–16. Итак, исходными данными для набора правил 0 снова является адрес "rich". Затем набор правил 0 вызывает наборы 199, 98 и 198, которые используются в дальнейшем при анализе сообщений. Результатами работы набора правил 0 являются локальная почтовая программа local и адрес rich. Не так уж сложно, не правда ли?

 

В строках 17–31 происходят более интересные вещи. Здесь снова выполняется тестирование наборов правил 3 и 0, но уже на примере внешнего адреса president@whitehouse.gov. В строках 18–21 отображаются действия набора правил 3 при обработке исходных данных. На этот раз на выходе после работы набора правил 3 получаем адрес, отличный от поступившего на вход. Как видите, этот набор правил отделил именную часть адреса (president) от имени хоста (whitehouse.gov), чтобы затем по отдельности передать их для дальнейшей обработки набору правил 0. Далее, в строках 22–31 показана обработка исходных данных набором правил 0. Как видите, этим набором правил вызывается несколько промежуточных правил. Как уже упоминалось ранее, в результате работы набора правил 0 становится известна почтовая программа (uucp-dom), которая требуется для доставки сообщения, имя хоста (ispmail), которому нужно переслать сообщение, и имя пользователя, которому адресовано сообщение (president@whitehouse.gov). Таким образом, файл конфигурации, приведенный в примере, настроен для пересылки всех почтовых сообщений по UUCP на хост ispmail. Для выхода из режима тестирования sendmail нажмите клавиши Ctrl+D.

 

Пример набора правил

Наверняка, полезно рассмотреть пример набора правил, чтобы лучше разобраться в механизме работы строк конфигурации в программе sendmail. 26 марта 1999 года сеть Internet поразил вирус Melissa. Вирус Melissa представляет собой макровирус программы Microsoft Word, который рассылает свои копии по 50 адресам, взятым из адресной книги почтовой программы Microsoft Outlook. Всего через несколько часов после его обнаружения компания sendmail Inc., которая занимается распространением и поддержкой программы sendmail, выпустила новый набор правил, блокирующий распространение вируса через серверы электронной почты.

 

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

 
1 HSubject: $>Check_Subject
2 D{MPat}Important Message From
3 D{MMsg}This message may contain the Melissa virus.
4
5 SCheck_Subject
6 R${MPat} $* $#error $: 553 ${MMsg}
7 RRe: ${MPat} $* $#error $: 553 ${MMsq}

Листинг 10.7. Обновление файла конфигурации sendmail для блокировки вируса Melissa

В строках 1–3 листинга 10.7 заданы макросы, которые уже должны быть вам знакомы. Строка 1 представляет собой Н-строку, согласно которой, все сообщения с заголовком Subject: пересылаются набору правил Check_Subject. В строке 2 определяется макрос с текстом, который обычно встречается в сообщениях, пораженных вирусом Melissa. С появлением новых версий вируса можно легко расширить диапазон анализа, сменив эту строку на F-строку, где задается отдельный файл содержащий строки, которые должны подвергаться проверке. В строке 3 определяется еще один макрос, используемый в качестве сообщения, которое отправляется для сигнализации о заражении.

 

В строке 5 определяется начало нового набора правил с названием Check_Subject. Согласно Н-строке, все сообщения с заголовком Subject: формата RFC 822 будут передаваться этому набору правил для проверки на наличие вируса. В строках 6 и 7 определены новые правила в наборе, которые и блокируют вирус Melissa.

 

Вирус Melissa известен тем, что он создает поддельные сообщения с текстом "Important Message From" и адресом жертвы в качестве темы письма в поле Subject: (Тема:). Набор правил в строке 6 проверяет содержимое строк в поле темы письма и, если они содержат ключевую фразу, снабжает их нулевым или несколькими маркерами (метасимволами $*). Затем он пересылает сообщение почтовой программе, которая обрабатывает ошибки, для выдачи соответствующего уведомления об ошибке отправителю. При этом само зараженное сообщение аннулируется.

 

В строке 7 эти же действия производятся с сообщениями, в поле темы которых содержится префикс "Re:". В этом случае сообщение также пересылается почтовой программе, которая обрабатывает ошибки, для выдачи соответствующего уведомления об ошибке отправителю.

 

Хотя вирус Melissa и не поражает саму программу sendmail, она, наоборот, может эффективно блокировать его воздействие на пользователей почтового сервера, использующих программу Microsoft Outlook. Этот пример еще раз демонстрирует высокую гибкость программы sendmail.

 

Резюме

Итак, для доставки почты получателям на сервере электронной почты под управлением ОС Linux нужна специальная программа — почтовый транспортный агент Mail Transfer Agent (MTA). Одним из старейших и наиболее мощных МТА для платформы Linux является программа sendmail. Настройка программы sendmail для обработки почты на конкретном узле выполняется с помощью файла конфигурации /etc/sendmail.cf. Файл конфигурации представляет собой набор правил, которые указывают, каким образом sendmail должна обрабатывать входящие сообщения и определять получателей. Также с помощью наборов правил принимается решение, каким почтовым программам далее передавать сообщения. Они же используются для организации фильтров для отсеивания нежелательных сообщений. Все проблемы, связанные с настройкой файла конфигурации, после прочтения этой лекции, где каждое действие подробно разъяснялось, должны быть устранены. В следующей лекции, "Установка и конфигурирование sendmail", рассматриваются вопросы конфигурирования sendmail для работы на определенном почтовом сервере.

 
Автор: Р. Блам  источник: http://www.INTUIT.ru 


 

13 центов(0,13$) за клик, выплаты через WebMoney каждый вторник +10% с рефералов

Мы выкупаем 100% трафа! $12 за 1000 хостов (РФ), и до $4 за 1000 хостов (зарубежный траф) + 10% с дохода Ваших рефералов!
 Выплаты через
WebMoney

~80-100$ за1000 хостов 2.5$ за 1 смс.
реф. процент - 10 %Выплаты происходят раз в неделю, в четверг на
WebMoney
 
 

 

____________________________

Посмотреть порно видео в онлайне »

_______________________________

 

   
   
Сайт управляется системой uCoz