
- •Почтовые агенты в различных ос
- •Структура email-сообщения
- •Заголовки почтового сообщения
- •Примеры почтовых сообщений с заголовками
- •Основные команды протокола smtp
- •Vrfy email_адрес
- •Пример smtp-сеанса
- •Основные команды протокола pop-3
- •Программа sendmail: ее функции и составные части
- •Псевдонимы, списки рассылки и форвардинг
- •Конфигурация sendmail (файл sendmail.Cf)
- •Правила
- •Правила выбора агентов доставки
- •Порядок применения наборов правил
- •Специальные наборы правил (check_...)
- •Обсуждение
- •Задание 6.
Обсуждение
Sendmail по-видимому является наиболее легендарной программой из обоймы Unix. Он ведет свою историю с того времени, когда действовало и было широко распространено множество служб электронной почты. Для того, чтобы правильно обрабатывать сообщения всех возможных форматов и подстраиваться под любые изменения, потребовалось развить достаточно изощренный язык файла конфигурации программы. Хотя этот язык не так сложен, как кажется на первый взгляд, с точки зрения настоящего положения вещей - унификации и стандартизации Интернет - он кажется неколько избыточным. Однако, богатство возможностей, предоставляемых администратору, окупает усилия, потраченные на изучение формата файла sendmail.cf.
Существует также возможность автоматически генерировать файл sendmail.cf с помощью макропроцессора m4. Необходимые сценарии поставляются вместе с sendmail. Для получения желаемой конфигурации следует составить инструкции для m4, где указываются типовой сценарий sendmail.cf и дополнительные опции. Несомненно, этот подход имеет большие преимущества при создании sendmail.cf с нуля, но это редко требуется, так как система поставляется как правило уже с готовым конфигурационным файлом. Но при внесении изменений в конфигурацию непосредственное редактирование sendmail.cf - более простой и наглядный способ. Подбробнее о конфигурировании sendmail с помощью m4 см. в литературе.
Более того, в большинстве случаев все, что нужно сделать администратору, - это проконтролировать, что макрос j содержит полное доменное имя хоста, а класс w содержит весь список почтовых доменов, для которых данных хост принимает почту. Более сложные задачи, требующие знания языка sendmail.cf и редактирования конфигурационного файла, могут возникнуть у администратора почтового сервера предприятия. Примеры типичных задач и способов их решения приведены в таблице.
Задачи |
Способы решения |
Настройка политики приема и ретраснляции сообщений |
Создание/редактирование наборов праил типа check_... |
Маскарад - сокрытие деталей доменной структуры организации путем приведения всех обратных адресов к одному унифицированному почтовому домену |
Внесение изменений в набор 1 или набор, указанный параметром "S=" агента доставки |
Доставка определенного типа сообщений через специальных агентов - например, запись в базу данных |
Идентификация типа сообщений (по особому доменному имени [добавить его в класс w], по именам пользователей, принадлежащих определенному классу, и т.п.); определение нового агента; добавление правил выбора нового агента для идентифицированных сообщений в набор 0 |
Взаимодействие (шлюзование) с системой электронной почты, работающей по другим протоколам |
Внесение изменений в различные наборы правил в зависимости от конкретного случая |
Управление работой sendmail и тестирование конфигурации
Тестовый режим
Перед тем, как запустить sendmail с новым конфигурационным файлом рекомендуется провести тестирование измененных наборов правил. С помощью команды
/usr/lib/sendmail -bt -C ./sendmail.cf.new
sendmail запускается в диалоговом тестовом режиме (./sendmail.cf.new - новый конфигурационный файл). Ожидаемый ввод:
>номер_набора адрес(рабочее пространство)
Программа произведет разбор рабочего пространства с помощью указанного набора правил. Несколько наборов правил могут быть указаны через запятую в порядке их вызова. Если набор правил 3 не указан явно, то адреса должны вводиться в сфокусированном виде. Примеры (определить агента доставки для адреса m2@vvsu.ru):
3,0 m2@vvsu.ru
0 m2 < @ vvsu . ru >
Другие команды тестового режима:
.DmValue
присвоить макросу m значение Value.
.CcValue
добавить в класс c значение Value.
$m
вывести значение макроса m.
$=c
вывести значения класса c.
=Sruleset
вывести все правила набора ruleset.
=M
вывести определения всех агентов доставки.
/mx name
найти в DNS запись MX для имени name.
/tryflags флаг
установить флаг, указывающий, как будет интерпретирован адрес в аргументе команды parse (см. следующую команду):
-
Флаг
Интерпретация адреса
er
адрес получателя в конверте
hr
адрес получателя в заголовке
es
адрес отправителя в конверте
hs
адрес отправителя в заголовке
/parse адрес
Произвести полный разбор адреса, как если бы он был указан в поступившем на обработку сообщении. Адрес интепретировать в соответствии с установкой флага командой tryflags; по умолчанию - адрес получателя из конверта сообщения.
Выход из тестового режима - Ctrl-D.
При запуске sendmail можно указать отладочные опции, включение которых приведет к выводу дополнительной информации. Наиболее полезные опции (аргументы командной строки):
-d0.1
Вывести информацию о версии программы, опции компиляции, информацию о системе.
-d0.4
Вывести все имена и псевдонимы данного компьютера.
-d21.12
Выводить информацию о выполнении каждого правила в процессе разбора.
ПРИМЕЧАНИЕ. Для проверки в тестовом режиме наборов check_relay и check_compat необходимо использовать дополнительный набор правил (так как комбинация $| в тестовом режиме по какой-то причине воспринимается не как один, а как два токена):
STranslate
R$* $$| $* $1 $| $2
("$$" обозначает собственно знак доллара). Набор Translate должен вызываться непосредственно перед check_relay или check_compat. Пример проверки check_compat в тестовом режиме:
>Translate,check_compat m2@vvsu.ru $| xhawk@mail.ru
Запуск сервера sendmail
Запуск sendmail в режиме демона выполняется командой
/usr/lib/sendmail -bd -q1h
где "-q1h" - периодичность обработки сообщений, поставленных в очередь (1 час); допускаются значения и в минутах, например, "-q15m".
При загрузке системы перед запуском sendmail проверяется наличие конфигурационного файла и очищается очередь почтовых сообщений (каталог /var/spool/mqueue), все эти действия в ОС Solaris заносятся в загрузочный скрипт /etc/init.d/sendmail, который вызывается в /etc/rc2 как /etc/rc2.d/S88sendmail. В других Unix-системах производятся аналогичные действия.
Управление очередью сообщений
В очередь помещаются сообщения, немедленная доставка которых по какой-либо причине не удалась. Очередь находится в каталоге /var/spool/mqueue. Просмотр очереди выполняется командой (/usr/bin/)mailq; для каждого сообщения указан его идентификатор, размер, адреса отправителя и получателя и текущий статус сообщения.
Каждое сообщение представлено в виде нескольких (обычно двух) файлов. Их имена состоят из двухсимвольного префикса, обозначающего тип файла (df - файл с письмом, qf - файл со служебными данными по обработке этого письма), и идентификатора сообщения (выводимого командой mailq). Для удаления письма из очереди (т.е. для его полной ликвидации) нудно удалить все файлы этого сообщения. Например, для удаления сообщения с идентификатором MAA12345 нужно удалить файлы dfMAA12345, qfMAA12345 и т.п.
Для внеочередной обработки сообщений, стоящих в очереди, надо подать команду
#/usr/lib/sendmail -q
Sendmail и /etc/hosts
Для работы sendmail требуется, чтобы в файле /etc/hosts наряду с коротким именем компьютера было прописано его полное имя:
212.16.195.100 athena athena.vvsu.ru
Установка сервера POP3
Сервер POP3 под Unix реализован в виде одной программы-демона, например, программы popper. Для ее запуска необходимо внести номер порта для сервиса pop3 (порт 110/tcp) в /etc/services и соответствующую строку в /etc/inetd.conf, например:
pop3 stream tcp nowait root /usr/local/lib/popper popper -s
Задания
Задание 1. Отправить почтовое сообщение по адресу firekeeper@iae.nsk.su через непосредственный диалог с SMTP-сервером, предварительно установив адрес почтового сервера, который принимает почту для этого адресата.
Задание 2. Создать на своем компьютере два специальных почтовых адреса: один - список рассылки сообщений студентам группы; другой - автомат, отвечающий на каждое письмо новогодним поздравлением.
Задание 3. Обеспечить доступ к почте для пользователей своего компьютера по протоколу POP-3. Создать POP-пользователя (пользователя, который может только получать/отправлять почту и менять пароль).
Задание 4. Получить почту по протоколу POP-3 вручную.
Задание 5. На своем компьютере проанализировать политику приема сообщений для отправки через SMTP. Проверить комбинации следующих параметров: МТА-клиент находится в своем домене или в другом; в MAIL FROM указывается адрес локального пользователя, или адрес, принадлежащий нашему домену, или адрес из другого домена; получатель (RCPT TO) - локальный пользователь, или находится в нашем домене, или находится в другом домене. Найти соответствующие правила в конфигурационном файле.
Изменить политику так, чтобы через SMTP принимались только сообщения, адрес отправителя или получателя которых - локальный для вашего компьютера; при этом адрес MTA-клиента не имеет значения.