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