Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1811 / 140 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 5:

Протокол SMTP

Команда TURN

В целях безопасности команда TURN пока не включена в реализации SMTP-серверов. Хотя, согласно RFC 821, она входит в стандартный набор SMTP-команд, к сожалению, хакеры использовали ее совсем для других целей (как и много других хороших идей). Идея применения команды TURN была несколько модифицирована в документах RFC, описывающих расширения протокола SMTP. Более подробно эта команда рассматривается в разделе "Расширения SMTP", где описана ее расширенная версия — команда ETRN.

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

Как уже обсуждалось ранее, для идентификации клиента с которым организуется сеанс, сервер использует доменное имя, получаемое с помощью команды HELO. Смысл команды TURN заключается в разрешении серверу поменяться ролями с клиентом и отсылать ему почту, которая имеется для домена клиента. Единственная проблема, которая возникает при использовании такого алгоритма, — насколько надежен клиент и является ли он тем, за кого себя выдает. Если хакер, подключившись к серверу SMTP, называет себя чужим именем, то сервер будет вынужден отослать всю почту, предназначенную для этого домена, прямо на хост хакера. Приехали!

Ответы сервера

На каждую команду, посланную клиентом, SMTP-сервер должен ответить соответствующим сообщением. Как видно из листингов 5.2 и 5.3, ответы сервера состоят из двух частей. В первой части отображаются трехзначные коды, которые используются программным обеспечением SMTP для выводов об успешном (или не очень) выполнении тех или иных команд сервером, с указанием причины невыполнения, если команда не была выполнена. Вторая часть представляет собой строку текста, которая помогает человеку анализировать происходящее. Часто эта текстовая строка передается программным обеспечением сервера SMTP и отображается как часть ответа сервера.

Обычно текстовая строка и код в ответе разделяются пробелом. Если ответ содержит несколько строк (например, при использовании команды HELP, см. листинг 5.4), код и текст разделяются дефисом (-) и только последняя строка ответа сервера содержит пробел в качестве разделителя. Это помогает клиентскому хосту ориентироваться, как много строк он примет от сервера. Существует четыре категории кодов ответа. Ниже мы рассмотрим их подробнее.

Коды ошибок, возвращаемые в ответах SMTP

В табл. 5.2 представлены коды ошибок, которые могут появиться во время SMTP-сеанса.

Таблица 5.2. Коды ошибок SMTP
Код Описание
500 Ошибка в синтаксисе, команда не опознана
501 Ошибка в синтаксисе параметров
502 Команда не поддерживается
503 Неправильная последовательность команд
504 Параметр команды не поддерживается

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

Информационные коды в ответах SMTP

Следующая категория — информационные коды. Они используются для отображения разного рода дополнительной информации о команде. Эти коды представлены в табл. 5.3.

Таблица 5.3. Информационные коды SMTP
Код Описание
211 Состояние системы или помощь
214 Сообщение-справка

Как показано в листинге 5.3, код ответа 214 используется при отображении результатов работы команды HELP. Когда имеется несколько строк для вывода, после кода ответа ставится дефис, который предупреждает, что далее следует еще одна строка ответа. В последней строке код ответа и текст разделены пробелом.

Служебные коды в ответах SMTP

Еще одна категория кодов ответа — служебные коды. Служебные коды используются для отображения состояния служба SMTP на протяжении соединения. Эти коды приведены в табл. 5.4.

Таблица 5.4. Служебные коды SMTP
Код Описание
220 Служба готова
221 Служба закрывает канал передачи
421 Служба недоступна

Каждый из этих кодов ответа будет содержать имя хоста сервера SMTP в текстовой части ответа, а также описание. Код ответа 421 является немного некорректным. Многие администраторы почтовых систем считают, что данный код ответа означает недоступность программного обеспечения SMTP на удаленном сервере. Хотя это и может быть возможной причиной появления такого кода ответа, обычно он означает, что имеется сервер SMTP, который в данный момент не принимает почтовые сообщения. Иногда это может быть следствием сильной загруженности сервера при выполнении резервного копирования данных, что сопровождается блокированием файловой системы. В таком состоянии сервер не сможет сохранять почтовые сообщения, так как файловая система блокирована. Поэтому на время резервного копирования SMTP-сервер может временно приостанавливаться. Попытка подключения к серверу спустя некоторое время может оказаться успешной.

Коды ответов на действия в SMTP

Последняя группа кодов ответов сервера относится к ответам на действия клиента SMTP. В табл. 5.5 приведены коды ответов на действия, выполняемые при сеансе SMTP.

Таблица 5.5. Коды ответов на действия клиента SMTP
Код Описание
250 Запрошенное действие выполнено успешно (ОК)
251 Пользователь не является локальным, сообщение будет переслано по <путь-пересылки>
354 Начать ввод сообщения: закончить по <CRLF>.<CRLF>
450 Запрошенное действие не выполнено — почтовый ящик недоступен
451 Запрошенное действие отвергнуто — ошибка обработки
452 Запрошенное действие не выполнено — в системе недостаточно дискового пространства
550 Запрошенное действие не выполнено — почтовый ящик недоступен
551 Пользователь не является локальным, попробуйте переслать сообщение по <путь-пересылки>
552 Запрошенное действие отвергнуто — превышены допустимые пределы хранения
553 Запрошенное действие не выполнено — указано недопустимое имя почтового ящика
554 Операция прекращена

Коды действий являются результатом попыток SMTP-сервера выполнить запросы клиента, такие как команды MAIL, RCPT и DATA. Все они возвращают состояние выполнения того или иного действия. Благодаря этому во время сеанса SMTP клиент может принимать решения о необходимости каких-либо действий.

Коды ответов сервера SMTP — "актеры второго плана" в мире SMTP. Некоторые программы-клиенты электронной почты возвращают отправителю письма все коды ответов, содержащие ошибки. В таком случае намного легче проверить коды ответов, чем списки кодов, чтобы определить, что идет не так, как нужно. Иногда, однако, тяжело определить причину неправильной обработки сообщений электронной почты. Например, возвращаемое письмо не было правильно смаршрутизировано, и пользователь не получил соответствующий код ошибки. Кроме того, часто администраторам почтовых систем приходится обращаться к сетевым анализаторам для того, чтобы проследить реальный путь TCP-пакетов в ЛВС и увидеть коды ошибок, поступающие от SMTP-сервера. Помните, что пакеты данных протокола SMTP представляют собой текст в формате ASCII, поэтому их легко читать и декодировать.