Опубликован: 21.11.2006 | Уровень: специалист | Доступ: платный
Лекция 5:

Протокол SMTP

Команда SOML

Команда SOML обозначает SEND или MAIL. Если получатели сообщения подключены к системе, то она работает как команда SEND. В противном случае она ведет себя, как команда MAIL, и пересылает сообщение в почтовый ящик получателя. Уязвимость этой команды привела к тому, что теперь она также нечасто включается в новые версии программных пакетов для работы с SMTP.

Команда SAML

Команда SAML обозначает SEND и MAIL. Она передает сообщение на терминал активного пользователя и одновременно кладет это сообщение в его почтовый ящик. И в этом случае отрицательные "возможности" команды привели к тому, что она была признана небезопасной и в настоящее время не поддерживается в SMTP.

Команда RSET

Команда RSET — сокращение от reset (англ. сброс — Прим. пер.). Если клиент запутался в ответах, получаемых от сервера, или решил, что соединение потеряно, он может послать команду RSET и вернуть сеанс к его начальной точке — выполнению команды HELO. При этом все ранее посланные команды — MAIL, RCPT и DATA будут аннулированы. Очень часто к этой команде прибегают в качестве "последнего средства", когда клиент либо потерял последовательность команд, либо получил неожиданный ответ от сервера.

Команда VRFY

Команда VRFY является сокращением от verify (англ. проверить — Прим. пер.). Ее можно использовать для определения возможности доставки сервером почты определенному получателю перед выполнением команды RCPT. Формат этой команды следующий:

VRFY username

По принятии данной команды сервер SMTP определяет, имеется ли у него на локальном сервере пользователь с заданным именем. Если такой пользователь найден, то сервер вернет ответ с полным почтовым адресом пользователя. Если такого пользователя нет на локальном сервере, то SMTP-сервер может либо вернуть негативный ответ клиенту, либо указать, что он будет пересылать все сообщения удаленному пользователю. Это зависит от того, будет ли сервер SMTP пересылать сообщения удаленному клиенту.

Команда VRFY может оказаться эффективным инструментом при поиске неполадок в работе электронной почты. Довольно часто, отправляя почтовые сообщения, пользователи ошибаются при написании имени адресата или хоста и затем недоумевают, почему их сообщения не были получены. Конечно, первое, что они предпримут, — это пожалуются администратору почтовой системы на отвратительную работу системы электронной почты. Как администратор почтовой системы вы, можете проверить работоспособность адресов электронной почты двумя путями. Во-первых, с помощью команды DNS host, которая позволяет определить правильность доменного имени и наличие почтового сервера, обслуживающего домен. И во-вторых, можно зайти с помощью telnet на порт 25 почтового сервера и затем задать команду VRFY, которая определит правильность имени пользователя. В листинге 5.3 показан пример использования команды VRFY для проверки имен пользователей.

1 [riley@shadrach riley]$ telnet localhost 25
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 220 shadrach.smallorg.org ESMTP Sendmail 8.9.3/8.9.3; Thu, 26 Aug 1999 19:20:16 -050
6 HELO localhost
7 250 shadrach.smallorg.org Hello localhost [127.0.0.1], pleased to meet you
8 VRFY rich
9 250 <rich@shadrach.smallorg.org>
10 VRFY prez@mechach.smallorg.org
11 252 <prez@mechach.smallorg.org>
12 VRFY jessica
13 550 jessica... User unknown
14 QUIT
15 221 shadrach.smallorg.org closing connection
16 Connection closed by -foreign host.
17 [riley@shadrach riley]$
Листинг 5.3. Пример команды VRFY

В строках 8–13 представлены результаты выполнения команды VRFY. В строке 8 делается попытка выполнить VRFY для локального пользователя rich. Ответ SMTP-сервера в строке 9 подтверждает, что пользователь с таким именем имеется в системе, и клиенту возвращается его полный адрес электронной почты. В строке 10 показан еще один вариант задания команды VRFY. Здесь клиент пытается выполнить команду VRFY для пользователя на удаленном компьютере. Ответ, полученный в строке 11 от системы shadrach, отличается от результата, полученного в строке 9. В разделе "Ответы сервера" значения кодов, возвращаемых сервером, обсуждаются более детально. В нашем случае отметим, что система shadrach уведомляет клиента о том, что почта будет пересылаться пользователю prez на удаленном сервере meshach.smallorg.org. Строка 12 отображает попытку проверить несуществующее имя в системе meshach. Ответ SMTP-сервера в строке 13 в пояснениях не нуждается.

Команда EXPN

Команда EXPN является сокращением от expand (англ. расширить — Прим. пер.). С ее помощью сервер SMTP может запрашивать списки рассылки и почтовые псевдонимы. Списки рассылки весьма эффективны, когда с одного адреса требуется послать большое количество одинаковых сообщений группам пользователей. Более глубоко вопросы, связанные с этим аспектом использования электронной почты, рассмотрены в "Списки рассылки" , . Кроме того, при работе с электронной почтой можно использовать в качестве адресов почтовые псевдонимы. Более подробно о них читайте в "Почтовые псевдонимы и преобразование адресов" . Формат команды EXPN следующий:

EXPN mail-list,

где mail-list — имя списка рассылки или почтовый псевдоним. Сервер SMTP при обработке данной команды либо возвращает код ошибки (если у клиента нет прав на просмотр списков), либо выводит список рассылки с адресами электронной почты один на строку.

Команда HELP

Команда HELP используется для вывода на экран списка команд, которые воспринимает сервер SMTP. Программные пакеты SMTP в соответствии с RFC 821обрабатывют основные команды, приведенные выше (кроме представляющих угрозу безопасности). Различия в реализациях SMTP заметны лишь в дополнительных функциях SMTP. В листинге 5.4 представлен результат выполнения команды HELP, заданной серверу на базе ОС Linux с SMTP-пакетом sendmail версии 8.9.3.

1 [katie@shadrach katie]$ telnet localhost 25
2 Trying 127.0.0.1...
3 Connected to localhost.
4 Escape character is '^]'.
5 228 shadrach.smallorg.org ESMTP Sendmail 8.9.3/8.9.3; Thu, 26 Aug 1999 19:50:57 -050
6 HELO localhost
7 250 shadrach.smallorg.org Hello localhost [127.0.0.1], pleased to meet you
8 HELP
9 214-This is Sendmail version 8.9.3
10 214-Topics;
11 214- HELO EHLO MAIL RCPT DATA
12 214- RSET NOOP QUIT HELP VRFY
13 214- EXPN VERB ETRN DSN
14 214-For more info use "HELP <topic>".
15 214-To report bugs in the implementation send email to
16 214- Sendmail-bugs@Sendniail.org.
17 214-For local information send email to Postmaster at your site.
18 214 End Of HELP info
19 HELP RCPT
20 214-RCPT TO: <recipient> [ <parameters> ]
21 214- Specifies the recipient. Can be used any number of times.
22 214- Parameters are ESMTP extensions. See "HELP DSN" for details.
23 214 End of HELP info
24 HELP VRFY
25 214-VRFY <recipient>
26 214- Verify an address. If you want to see what it aliases
27 214- to, use EXPN instead.
28 214 End of HELP info
29 QUIT
30 221 shadrach.smallorg.org closing connection
31 Connection closed by foreign host.
32 [katie@shadrach katie]$
Листинг 4.4. Результаты выполнения команды HELP

Как видно из листинга 5.4, доступны два уровня помощи. Получив просто команду HELP, сервер SMTP выдаст краткий список всех команд SMTP. Если же задать команду HELP с аргументом, в качестве которого присутствует другая SMTP-команда, то можно получить более детальное описание этой команды, включая ее синтаксис.

Команда NOOP

Команда NOOP — сокращение от no operation (англ. нет операции — Прим. пер.). Эта команда не оказывает никакого воздействия на SMTP-сервер, за исключением того, что сервер возвращает на нее позитивный код ответа. Она используется при тестировании соединения без пересылки сообщения.

Команда QUIT

Команда QUIT делает именно то, что она и означает (англ. выйти — Прим. пер.), т.е. сообщает SMTP-серверу о том, что клиентский компьютер закончил текущий сеанс и хочет закрыть соединение. Сервер SMTP должен ответить на эту команду, а затем инициировать и закрыть TCP-соединение. Если сервер принимает команду QUIT в процессе передачи почты, то все переданные в течение сеанса данные должны быть уничтожены и не поступят получателю.

Valentin Diduk
Valentin Diduk
Украина, одесса, кпи, 2010
Евгений Олабин
Евгений Олабин
Беларусь, Гродно