Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Протокол 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-сеанса.
Код | Описание |
---|---|
500 | Ошибка в синтаксисе, команда не опознана |
501 | Ошибка в синтаксисе параметров |
502 | Команда не поддерживается |
503 | Неправильная последовательность команд |
504 | Параметр команды не поддерживается |
Сообщения об ошибках SMTP не дают полную картину происходящего. Они лишь отражают общую тенденцию процессов, происходящих во время сеанса SMTP. При поиске и устранении неполадок в работе электронной почты весьма полезно пронаблюдать реальный обмен командами и ответами на них сервера, в особенности если вы работаете с незнакомым SMTP-сервером. Часто появление ошибок типа 500, 502 и 504 может быть вызвано попыткой выполнения команд из расширений протокола SMTP, которые не поддерживаются более старыми версиями программ на сервере SMTP.
Информационные коды в ответах SMTP
Следующая категория — информационные коды. Они используются для отображения разного рода дополнительной информации о команде. Эти коды представлены в табл. 5.3.
Код | Описание |
---|---|
211 | Состояние системы или помощь |
214 | Сообщение-справка |
Как показано в листинге 5.3, код ответа 214 используется при отображении результатов работы команды HELP. Когда имеется несколько строк для вывода, после кода ответа ставится дефис, который предупреждает, что далее следует еще одна строка ответа. В последней строке код ответа и текст разделены пробелом.
Служебные коды в ответах SMTP
Еще одна категория кодов ответа — служебные коды. Служебные коды используются для отображения состояния служба SMTP на протяжении соединения. Эти коды приведены в табл. 5.4.
Код | Описание |
---|---|
220 | Служба готова |
221 | Служба закрывает канал передачи |
421 | Служба недоступна |
Каждый из этих кодов ответа будет содержать имя хоста сервера SMTP в текстовой части ответа, а также описание. Код ответа 421 является немного некорректным. Многие администраторы почтовых систем считают, что данный код ответа означает недоступность программного обеспечения SMTP на удаленном сервере. Хотя это и может быть возможной причиной появления такого кода ответа, обычно он означает, что имеется сервер SMTP, который в данный момент не принимает почтовые сообщения. Иногда это может быть следствием сильной загруженности сервера при выполнении резервного копирования данных, что сопровождается блокированием файловой системы. В таком состоянии сервер не сможет сохранять почтовые сообщения, так как файловая система блокирована. Поэтому на время резервного копирования SMTP-сервер может временно приостанавливаться. Попытка подключения к серверу спустя некоторое время может оказаться успешной.
Коды ответов на действия в SMTP
Последняя группа кодов ответов сервера относится к ответам на действия клиента 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, поэтому их легко читать и декодировать.