NexxDigital - компьютеры и операционные системы

компьютер с локального компьютера. Для обмена сообщениями электронной почты между различными компьютерами с 1982 года применяется простой протокол передачи почты Simple Mail Transfer Protocol ( SMTP ). Легкость его применения и транспортируемость на различные платформы сделала этот протокол стандартным для обмена электронными сообщениями между компьютерными системами в сети Internet . Для того чтобы разобраться, как он работает, давайте рассмотрим, что он собой представляет.

Описание протокола SMTP

Протокол SMTP был разработан для работы в различных сетях для транспортировки электронной почты. Однако одной из наиболее широко используемых стала сеть Internet , с установкой соединения TCP/IP через порт 25. Большинство версий ОС Linux автоматически устанавливают программный пакет по поддержке SMTP при установке различных сервисов. Для того чтобы убедиться в способности удаленного сервера работать по протоколу SMTP , можно войти на его порт 25, воспользовавшись программой telnet . Если будет получен ответ с этого порта, то на сервере запущен протокол SMTP . На локальном сервере можно проделать тоже самое, подключившись с помощью telnet на порт 25 на localhost . Пример сеанса telnet с сервером на базе ОС Linux показан в листинге 5.1.

1 $ 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; Wed, 25 Aug 1999 18:35:33 -0500 6 QUIT 7 221 shadrach.smallorg.org closing connection 8 Connection closed by foreign host. 9 $ Листинг 5.1. Пример сеанса telnet с портом 25

В строке 1 показан формат команды telnet с использованием хоста localhost и TCP-порта 25. В строке 5 показан типичный ответ сервера с ОС Linux, на котором установлен программный пакет для работы SMTP . Число, с которого начинается ответ, является трехзначным кодом ответа. Этот код может использоваться при поиске и устранении неполадок в работе электронной почты. Далее следует имя сервера SMTP и описание программного пакета SMTP , который распространяется организацией Sendmail Consortium. Строка 6 содержит команду QUIT на закрытие сеанса telnet . После этого сервер SMTP должен выдать сообщение о закрытии сеанса и разорвать TCP-соединение. Из данного примера можно сделать вывод о том, что протокол SMTP использует простые текстовые команды в формате ASCII и возвращает трехзначные кодированные ответы с текстовыми сообщениями. Протокол SMTP описывается документом Internet Request For Comment ( RFC ) номер 821, который был разработан группой Internet Engineering Task Force ( IETF ) и опубликован 21 августа 1982 года. С тех пор он претерпел несколько модификаций, но в целом основные команды протокола не изменились.

Основные команды клиента SMTP

После установления сеанса TCP сервер SMTP посылает клиенту специальное сообщение об установке соединения (как это показано в листинге 5.1). С этого момента управление соединением между двумя компьютерами осуществляется клиентом, подключившимся к серверу. Клиент управляет соединением при помощи набора специальных команд, которые он посылает серверу. Сервер, в свою очередь, должен соответствующим образом ответить на каждую посланную ему команду. В RFC 821 описаны основные команды для клиента SMTP, на которые сервер должен реагировать определенным образом. Хотя с момента создания этого документа появилось несколько расширений к протоколу SMTP, они пока поддерживаются не всеми почтовыми серверами. В этом разделе мы выделим лишь основные команды SMTP, определенные в RFC 821. В разделе "Расширения протокола SMTP" рассматриваются некоторые дополнения, реализованные в последних версиях пакета SMTP.

Формат команд в SMTP прост:

command ,

где command - четырехсимвольная команда протокола SMTP, а parameter - необязательный параметр, определяющий тип данных в команде. В табл. 5.1 приведены основные команды протокола SMTP. Далее мы рассмотрим эти команды более детально.

Таблица 5.1. Основные команды протокола SMTP
Команда Описание
HELO Открывает приглашение от клиента
MAIL Определяет отправителя сообщения
RCPT Определяет получателей сообщения
DATA Определяет начало сообщения
SEND Посылает сообщение на терминал
SOML Send-or-Mail
SAML Send-and-Mail
RSET Сброс SMTP-соединения
VRFY Проверяет имя пользователя системы
EXPN Запрашивает список псевдонимов
HELP Запрашивает список команд
NOOP No operation - Ничего не делать
QUIT Остановить сеанс SMTP
TURN Реверс ролей в SMTP (клиент становится сервером)

Команда HELO

По определению, длина команд протокола SMTP четыре символа. Приветствие, выдаваемое клиентом на сервер, и есть команда HELO . Формат команды следующий:

HELO domain name

Смысл команды HELO заключается в представлении клиента серверу SMTP. К сожалению, этот метод доступа был разработан на начальной стадии развития сети Internet, когда еще не было столь большого числа попыток несанкционированного проникновения в компьютерные системы. Как видите, клиент может назвать себя любым именем в командной строке. Это привело к тому, что в настоящее время большинство серверов SMTP эту команду используют чисто формально. Если они действительно стараются идентифицировать клиента, то подключается механизм обратного преобразования DNS с целью определения действительного имени хоста клиента согласно системе доменных имен по его IP-адресу. Как правило, в целях безопасности серверы SMTP отказывают в установлении соединения хостам, IP-адрес которых не преобразуется в соответствующее имя хоста. Посылая данную команду, клиент уведомляет сервер о желании установить с ним соединение. Отвечая на эту команду, сервер, в свою очередь, уведомляет об установке нового соединения с клиентом и готовности принимать от него последующие команды.

Пользователи-клиенты и хосты-клиенты

При работе с протоколом SMTP следует различать клиентов SMTP. Пользователи-клиенты и хосты-клиенты не одно и то же. При создании почтового сообщения пользователь системы электронной почты является одновременно и клиентом своего локального хоста . После отправки почтового сообщения он уже не является клиентом процесса SMTP. Теперь его локальный хост-компьютер осуществляет процесс доставки сообщения и сам выступает в качестве клиента SMTP. Когда локальный хост соединяется с удаленным хостом для передачи сообщения с помощью протокола SMTP, он действует как клиент SMTP-процесса. Команда HELO объявляет в качестве клиента имя локального хоста , а не реального пользователя, отославшего сообщение. Довольно часто эти понятия путают, что усложняет решение проблем, возникающих в системах электронной почты.

Команда MAIL

Команда MAIL используется для организации сеанса обмена электронной почтой с сервером после того, как была послана команда HELO . Она указывает, от кого исходит данное сообщение. Формат команды MAIL следующий:

MAIL reverse-path

Аргумент reverse-path не только определяет отправителя сообщения, но также указывает маршрут, по которому можно вернуть сообщение в случае невозможности его доставки. Если отправитель является пользователем на клиентском компьютере, который инициировал сеанс SMTP, то формат команды будет следующим:

MAIL FROM: [email protected]

Заметьте, что в поле FROM указывается адрес электронной почты отправителя сообщения, включая полное имя клиентского хост-компьютера. Эта информация должна присутствовать в поле FROM почтового сообщения (но об этом позже). Если почтовое сообщение проходило на пути от отправителя к получателю через несколько узлов, то каждый из них будет добавлять сведения о себе в поле . Таким образом документируется путь прохождения сообщения через почтовые серверы. Довольно часто электронная почта от клиентов частных сетей должна проходить через несколько серверов электронной почты, прежде чем попасть в сеть Internet. Информация, которая содержится в поле reverse-path часто полезна при разрешении проблем в системах электронной почты или для обнаружения почтовых серверов, которые пытаются скрыть свою принадлежность, посылая сообщения через неизвестные серверы SMTP.

Это простой протокол передачи почты. С английского языка переводится, как Simple Mail Transfer Protocol . Исходя из названия, можно сделать вывод, что SMTP сервер отвечает за отправку почтовых рассылок. Его задача, как правило, состоит из двух основных функций:

  • проверка правильности настроек и выдача разрешения компьютеру, который пытается отправить электронное сообщение;
  • отправка исходящего сообщения на указанный адрес и подтверждение успешной отправки сообщения. Если доставка невозможна, сервер возвращает отправителю ответ с ошибкой отправки

Отправляя email сообщения, SMTP-сервер отправителя устанавливает связь с тем сервером, который будет получать это сообщение. Такое "общение" происходит путем отправки и получения команд, формируя SMTP-сессию с неограниченным количеством SMTP-операций. Обязательными командами для каждой операции являются три:

  • определение обратного адреса (MAILFROM)
  • определение получателя email сообщения (RCPT TO)
  • отправка текста сообщения (DATA)

Определение адреса отправителя, получателя и наличие содержимого письма – это обязательные условия, без которых письмо не будет отправлено, даже по обычной, знакомой нам "бумажной" почте. Что уже говорить про электронную.


Вкратце о пользе SMTP сервера

  • Как уже упоминалось, основным предназначением SMTP сервера является отправка и контроль исходящей почты. Качественный SMTP сервер способен быстро отправлять большой объем email сообщений , уклоняясь от ограничений провайдера.
  • В случае если вы используете внешний SMTP сервер, то безопасность email сообщений и процент их доставки в папку "входящие" значительноповышается.
    Где же найти этот внешний SMTP сервер? Детальнее об этом вопросе .
  • Электронная почта может проходить несколько SMTP серверов, прежде чем попадет в почтовый ящик получателя. Так как существует риск спам-атак, провайдеры зачастую пресекают отправку электронной почты без использования SMTP сервера. Поэтому пользователи порой имеют проблемы с рассылками писем.
    Решением может выступить установка/интеграция отдельного внешнего SMTP сервера, который к тому же будет фильтровать сообщения исходящей почты на спам и вирусы .
  • Повышение безопасности рассылок достигается так же и авторизацией пользователя , который использует SMTP сервер: задав индивидуальный логин и пароль для подключения к серверу.
  • И, что важно, интеграция SMTP сервера происходит без установки дополнительного программного обеспечения или других особых требований. Вы просто прописываете основные параметры SMTP сервера в настройках вашего почтового клиента, и можете приступать к массовым email рассылкам.

Если вы планируете заниматься легальным email маркетингом, задумайтесь об использовании внешнего SMTP-сервера для безопасности и скорости рассылки своих массовых email кампаний.

SMTP (Simple Message Transfer Protocol), или в дословном переводе простой протокол передачи сообщений, был рожден в среде UNIX и предназначался исключительно для общения между собой почтовых серверов. В терминах модели OSI протокол SMTP находится на уровне приложений.

В настоящее время SMTP стал стандартом де-факто. В большой степени такая популярность объясняется сравнительной простотой реализации и широкими возможностями расширяемости без ущерба для обратной совместимости с существующими версиями почтовых систем. Немаловажным фактором является также широкая доступность спецификаций и отсутствие необходимости отчислять средства за их использование.

SMTP-системы за последнее время активно развивались в следующих направлениях:

расширение протокола общения сервер-сервер (собственно SMTP);

создание и улучшение протокола общения клиент-сервер (POP3, IMAP4);

внедрение и расширение нового формата сообщений (MIME).

Начальная версия протокола SMTP поддерживала ограниченный набор команд и сервисов для приема и передачи сообщений. В последнее время был разработан его расширенный вариант (Extended или ESMTP), обеспечивающий стандартную возможность дальнейшего расширения и поддержку таких функций как подтверждение доставки (Delivery Notification Request или DNR), согласование максимального допустимого размера сообщений, передаваемых между серверами и принудительная инициация передачи накопленной почты (dequeue). Однако одной из слабых сторон на данный момент SMTP было и продолжает быть отсутствие возможности аутентификации входящих соединений, шифрования диалога и потока передачи данных между серверами.

Отсутствие средств аутентификации входящих соединений не позволило использовать SMTP для обслуживания клиентского доступа. Классическая почтовая SMTP-система требует наличия файлового доступа клиента к своему почтовому ящику для получения и работы с сообщениями. Для реализации работы в режиме клиент-сервер был создан протокол обслуживания почтового офиса (Post Office Protocol или POP). Наиболее удачной оказалась версия POP3, широко используемая в современных SMTP-системах. Наиболее продвинутые реализации поддерживают аутентификацию с шифрованием имени и пароля и шифрование трафика по протоколу Secure Socket Layer (SSL). Однако, при использовании протокола POP3 отсутствует возможность просмотра характеристик сообщения без предварительной загрузки его на станцию клиента. Для решения проблемы просмотра и манипуляции свойствами почтового сообщения непосредственно на сервере, а также преодоления ряда других функциональных ограничений был разработан протокол IMAP4, его поддержка в большинстве коммерческих систем ожидается в ближайшем будущем. Следует заметить, что как для случая использования классического клиента (команда mail), так и для случая применения POP3 или IMAP4 отправка подготовленных клиентом сообщений требует наличия сервера SMTP. На рисунке 1.6 приведена схема представления типичной SMTP-системы, использующей как традиционный для ОС UNIX файловый метод доступа к почтовому ящику, так и доступ по протоколам POP3 и IMAP4.

Изначально SMTP-системы рассчитывались на передачу информации исключительно в текстовом виде и не были ориентированы на передачу символов национальных алфавитов, т.е. использовали 7-битный набор символов. Для решения проблемы передачи двоичных файлов был разработан стандарт UUENCODE, позволяющий внедрять предварительно преобразованные из бинарного в текстовый вид произвольные данные непосредственно в текст сообщения. Однако всеобъемлющим данный подход назвать было трудно, ибо в общем случае никакой информации о природе вложения (типе передаваемых данных и породившем их приложении) принимающая сторона не имела. По мере расширения сети Internet, усложнения программного обеспечения и активного внедрения мультимедиа назрела необходимость создания универсального формата типизации и представления двоичных данных и текста, содержащего национальные символы. Таким универсальным форматом стали многофункциональные расширения почты Internet (Multipurpose Internet Mail Extensions или MIME). Формат MIME оказался чрезвычайно удачным, поскольку в него были заложены возможности неограниченного расширения, как поддерживаемых типов данных, так и национальных кодировок.


Схема типичной SMTP-системы с поддержкой POP3 и IMAP4

Сообщение SMTP, подобно сообщению X.400, использует понятия конверта и содержимого, которое в свою очередь имеет заголовок и тело. Функциональное назначение их полностью идентично. Состав полей в заголовке определяется форматом тела сообщения (UUENCODE или MIME). Ни одно поле не является обязательным, но, как правило, указываются такие поля как, кому (To:), от кого (From:) и тема (Subject:). В случае использования формата MIME, в заголовке обязательно должна присутствовать строка "MIME-Version: 1.0". Полный перечень возможных полей в заголовке сообщения SMTP содержится в RFC 2076.

Отличительной особенностью SMTP-систем является то, что в них, как правило, обеспечивается фактическая независимость процесса передачи от формата содержимого. За интерпретацию содержимого должна отвечать только клиентская программа (mail reader). Однако платой за совместимость на уровне MTA в данном случае является неэффективность передачи любых нетекстовых данных или сообщений, использующих символы национальных алфавитов, вследствие предварительной трансляции информации в текстовое представление. В зависимости от используемого алгоритма преобразования размер фактически передаваемых данных может возрасти на 30-100%.

Немаловажной проблемой при передаче данных через SMTP-системы является обеспечение конфиденциальности. Поскольку сообщения передаются в текстовом виде, они могут быть легко перехвачены и произвольным образом изменены. Для решения проблем с защитой информации был создан стандарт на шифрование тела сообщения, так называемый засекреченные многофункциональные расширения почты (Secure MIME или S/MIME). Однако, этот протокол не в состоянии защитить от перехвата заголовки сообщений.

Simple Mail Transfer Protocol не зависит от транспортной среды и может использоваться для доставки почты в сетях с протоколами, отличными от TCP/IP и Х.25. Достигается это за счет концепции IPCE (InterProcess Communication Environment). IPCE позволяет взаимодействовать процессам, поддерживающим SMTP в интерактивном режиме, а не в режиме "STOP-GO".

Модель протокола. Взаимодействие в рамках SMTP строится по принципу двусторонней связи, которая устанавливается между отправителем и получателем почтового сообщения. При этом отправитель инициирует соединение и посылает запросы на обслуживание, а получатель на эти запросы отвечает. Фактически, отправитель выступает в роли клиента, а получатель - сервера.


Схема взаимодействия по протоколу SMTP

Канал связи устанавливается непосредственно между отправителем и получателем сообщения. При таком взаимодействии почта достигает абонента в течение нескольких секунд после отправки.

Протокол SMTP

O В этой главе:

O Основные команды протокола

O Серверы-ретрансляторы

O Непосредственная пересылка

Для доставки почты в большинстве случаев используется протокол SMTP (Simple Mail Transfer Protocol ).

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

Современные SMTP-сервера используют различные защитные механизмы, препятствующие отправке корреспонденции неизвестными пользователями. Подробно об этом рассказывается в главе «Почтовый сервер изнутри».

В терминологии SMTP-протокола нет таких понятий как «клиент» и «сервер». Вместо этого говорят об отправителе (sender ) и получателе (receiver ). То, что большинство называют «SMTP-сервером», является одновременно и отправителем, и получателем. Когда клиент устанавливает с ним соединение для передачи письма, сервер выступает в роли получателя, а когда доставляет сообщение абоненту, становится отправителем.

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

Приведенный ниже пример демонстрирует, как посредством протокола SMTP отправить абоненту сообщение. Первым шагом необходимо запустить telnet-клиента и, установив соединение с выбранным SMTP-сервером (например, mail.aport.ru) по двадцать пятому порту, дождаться выдачи приглашения.

Рисунок 009 Подключение к серверу mail.aport.ru

Первые три символа возвращенной сервером строки представляют собой код завершения операции. Полный перечень кодов всевозможных ошибок содержится в RFC-821, и здесь не приводится.

Для передачи корреспонденции одного лишь TCP-соединения не достаточно, и необходимо установить еще одно, так называемое SMTP-соединение. Это достигается возвращением ответного приветствия серверу с указанием имени узла клиента (если у него есть имя) или IP-адреса (если у клиента нет имени).

Далеко не всегда требуется указывать свой точный адрес. Часто достаточно ввести произвольную текстовую строку, например “ABDCEF”

· HELO ppp-15.krintel.ru

Ответное приветствие осуществляется командой “HELO

”. Сервер, установив SMTP-соединение, возвращает код успешного завершения операции (250) и в большинстве случаев определяет IP-адрес клиента или его доменное имя.

Следующим шагом требуется указать отправителя сообщения. Для этого необходимо воспользоваться командой «MAIL FROM» с указанием собственного почтового адреса при желании заключенного в угловые скобки.

Например:

· HELO ppp-15.krintel.ru

· 250 camel.mail.ru Hello ppp-15.krintel.ru

· MAIL FROM:«[email protected]»

Затем указывается получатель сообщения, передаваемый с помощью команды “RCPT TO”, пример использования которой продемонстрирован ниже:

· HELO ppp-15.krintel.ru

· 250 camel.mail.ru Hello ppp-15.krintel.ru

· MAIL FROM:«[email protected]»

· 250 «[email protected]» is syntactically correct

· RCPT TO:«[email protected]»

При возникновении потребности в отправке одного и того же сообщения нескольким респондентам, достаточно вызвать “RCPT TO” еще один (или более) раз (максимальное количество получателей обычно не ограничено). Если кому-то из них сервер не возьмется доставить сообщение, он вернет ошибку, никак, однако не сказывающуюся на остальных получателях.

Команда “DATA”, вызываемая без аргументов, переводит сервер в ожидание получения текста письма.

· 354 Enter message, ending with "." on a line by itself

Последовательность завершения ввода представляет собой обыкновенную точку, «окаймленную» с двух сторон переносами строк. Если такая последовательность встретится в тексте сообщения, формирование письма будет немедленно завершено. Почтовые клиенты, обычно распознают такую ситуацию и прибегают к перекодировке, но при работе с telnet-клиентом эта забота ложиться на пользователя.

Пример использования команды “DATA” приведен ниже:

· HELO ppp-15.krintel.ru

· 250 camel.mail.ru Hello ppp-15.krintel.ru

· MAIL FROM:«[email protected]»

· 250 «[email protected]» is syntactically correct

· RCPT TO:«[email protected]»

· 250 «[email protected]» verified

· Hello, Sailor!

· 250 OK id=12ZDEd-000Eks-00

Команда “QUIT” завершает сеанс и закрывает соединение.

· 221 camel.mail.ru closing connection

Содержимое полученного сообщения (механизм получения сообщений на локальный компьютер пользователя рассмотрен в главах «Протокол POP» и «Протокол IMAP4») может выглядеть, например, следующим образом:

· From [email protected] Sun Mar 26 17:38:03 2000

· Received: from ppp-15.krintel.ru ()

· by camel.mail.ru with smtp (Exim 3.02 #107)

· id 12ZDEd-000Eks-00

· Message-Id: «[email protected]»

· From: [email protected]

· Hello,Sailor!

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

Например, ниже показан заголовок письма, вытащенного автором этой книги из его собственного почтового ящика:

· From [email protected] Wed Mar 22 16:57:03 2000

· Received: from gate.chiti.uch.net ()

· by msk2.mail.ru with esmtp (Exim 3.02 #116)

· id 12Xld1-0008jx-00

· Received: from 13.chiti.uch.net ()

· by gate.chiti.uch.net (8.8.8/8.8.8) with SMTP id PAA29678

· From: "irt" «[email protected] »

Анализ заголовка позволяет установить, что письмо было отправлено с адреса 13.chiti.uch.net через сервер исходящей почты gate.chiti.uch.net. Если попробовать установить с ним соединение, то результат может выглядеть так:

Для проверки возможности пересылки сообщения необходимо послать серверу приглашение, а затем идентифицировать отправителя и получателя письма. Например, это может выглядеть так:

· HELO kpnc.krintel.ru

· 250 gate.chiti.uch.net Hello kpnc.krintel.ru , pleased to meet you

· MAIL FROM:«[email protected]»

· 250 «[email protected]»… Sender ok

· RCPT TO:«[email protected]»

· 250 «[email protected]»… Recipient ok

Код успешного завершения операции (250) и срока «Recipient ok» свидетельствуют о том, что сервер согласился на пересылку. Остается ввести текст послания и можно отправлять письмо. Спустя какое-то время (обычно не превышающее одной минуты) сообщение должно прийти по назначению. А его заголовок может выглядеть, например, так:

· From [email protected] Sun Mar 26 17:28:33 2000

· Received: from gate.chiti.uch.net ()

· by camel.mail.ru with esmtp (Exim 3.02 #107)

· id 12ZD5a-000Dhm-00

· Received: from kpnc.krintel.ru (kpnc.krintel.ru )

· by gate.chiti.uch.net (8.8.8/8.8.8) with SMTP id QAA02468

· (envelope-from [email protected])

· From: [email protected]

· Message-Id: «[email protected]»

Жирным шрифтом выделен адрес отправителя, показывая, что он не смог остаться анонимным. Если это оказывается неприемлемо, среди входящих писем своего почтового ящика можно попробовать отыскать такие, в чьих заголовках нет никаких сведений об отправителе, за исключением той информации, которую он пожелал сообщить сам.

Один из анонимных серверов расположен (точнее, был когда-то расположен на момент написания этой главы) по адресу dore.on.ru. Однако его использование посторонними лицами запрещено, что и демонстрирует следующий эксперимент:

· HELO kpnc.krintel.ru

· MAIL FROM:«[email protected]»

· 250 «[email protected]» Sender Ok

· RCPT TO:«[email protected]»

· 550 Relaying denied for «[email protected]»

Сервер, действительно, не делает никаких видимых попыток определить адрес клиента, но в то же время пересылать его корреспонденцию за пределы сервера наотрез отказывается. Причем достоверно известно, что владельцы этого сервера используют его для рассылки сообщений по нелокальным адресам. Отсюда вытекает существование механизма, позволяющего отличить «своих» от «чужих». Права «чужих» ограничиваются доставкой писем по локальным адресам, а «своим» разрешается отправлять сообщения и за пределы сервера. Ввиду отсутствия в протоколе SMTP средств аутентификации пользователей, отличить одних от других помогает IP адрес клиента. Локальные пользователи, находящиеся в одной подсети с сервером, считаются «своими», и наоборот .

Но если сервер не снабжен функцией определения IP адреса клиентов, ему не остается ничего другого, кроме как воспользоваться информацией, предоставленной самим отправителем, поверив тому на слово. Поэтому, существует возможность сообщения подложных данных, и, выдачи себя за локального пользователя, имеющего право отправки сообщений по любому адресу.

Клиент дважды указывает свой адрес: приветствуя сервер, командой “HELO” он сообщает свой домен, а в поле “MAIL FROM” приводит собственный обратный адрес. Некоторые сервера проверяют одно из этих значений, а некоторые оба одновременно.

В эксперименте, приведенном ниже, отправитель сообщает не свой собственный домен, а домен владельца сервера, и в качестве обратного адреса, использует один из адресов локальных пользователей сервера (чтобы его узнать, необходимо получить с этого сервера хотя бы одно письмо, или попробовать выяснить имена зарегистрированных пользователей методом перебора):

· 220 WITHELD FTGate server ready -Fox Mulder

· HELO dore.on.ru

· MAIL FROM:«[email protected]»

· RCPT TO:«[email protected]»

· 250 Recipient Ok

В результате такого подлога, сервер оказался введен в заблуждение и согласился доставить письмо. Очевидно, подлинный отправитель сообщения не может быть установлен по заголовку, поскольку в нем находится только та информация, которую отправитель пожелал оставить самостоятельно.

Для массовой рассылки лучшего способа и придумать невозможно, но вот для обычной переписки такая методика не подходит. Ведь ответ на письмо возвратится по адресу [email protected]! Этого можно избежать, если добавить в заголовок поле “Reply-To”, содержащее истинный адрес отправителя (тот, который он захотел оставить сам). Это может выглядеть, например, таким образом:

· 220 WITHELD FTGate server ready -Fox Mulder

· HELO dore.on.ru

· MAIL FROM:«[email protected]»

· 250 «[email protected]» Sender Ok

· RCPT TO:«[email protected]»

· 250 Recipient Ok

· 354 Start mail input; end with «CRLF».«CRLF»

· Reply-To:«[email protected]»

· 250 Ok Message queued

· 221 dore.on.ru Service closing transmission channel

Заголовок такого письма должен выглядеть приблизительно так:

· Received: from relay1.aha.ru ( verified)

· by aha.ru (CommuniGate Pro SMTP 3.1b2)

· Received: from warlock.miem.edu.ru (miem-as.ins.ru )

· by relay1.aha.ru (8.9.3/8.9.3/aha-r/0.04B) with ESMTP id UAA07173

· Received: from dore.miem.edu.ru (rtuis.miem.edu.ru )

· by warlock.miem.edu.ru (8.9.3/8.9.3) with ESMTP id UAA00637

· Received: from fox by dore.on.ru (FTGate 2, 1, 2, 1);

· Message-ID: «000301bec6ff$c87f5220$16fe7dc1@fox»

· From: «[email protected]»

· To: «[email protected]»

· Subject: TEST

· Reply-To:«[email protected]»

При попытке ответить отправителю, почтовый клиент получателя извлечет содержимое поля “Reply-To” и отправит письмо по указанному в нем адресу. Именно этим и пользуются спамеры для достижения полной анонимности с одной стороны, и возможности получения ответов от заинтересованных лиц - с другой.

Если внимательно посмотреть на заголовок письма, в нем можно обнаружить несколько строк “Received”. Их оставили транзитные сервера, иначе называемые Релеями (от английского relay ).

Любой почтовый клиент может отправить письмо напрямую. Однако для этого придется собственноручно указать в настойках сервера исходящей почты адрес получателя.

Например, чтобы отправить письмо для [email protected] с помощью “OutLock Express” придется зайти в «Учетные записи» (меню «Сервис»), выбрать «Свойства» и перейти к закладке «Серверы», задав для исходящей почты сервер «computerra.ru».

Очевидно, это слишком утомительно и непрактично. До тех пор, пока программное обеспечение не научиться выполнять такую операцию автоматически, пользователи будут вынуждены пользоваться прежними методами.

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

Ретранслятор - точно такой же SMTP-сервер, как и все остальные, обсуждаемые в этой главе. В зависимости от настоек сервера маршрут пересылки письма может варьироваться. Одно сообщение может отправляться напрямую, а другое - долго «крутиться» на Релеях. Доверие это прекрасно, но только когда не касается вопросов безопасности. Кто рискнет доверять ретрансляторам неизвестного происхождения? Тем более, дальнейший маршрут письма каждым из транзитных серверов определяется самостоятельно, и нет никаких гарантий, что в эту цепочку не вклиниться злоумышленник.

Но протокол SMTP позволяет отправителю самостоятельно задавать маршрут пересылки сообщения Параметр команды “RCPT TO” может содержать не только адрес получателя, но и путь ретрансляции!

Формат его следующий:

· RCPT TO:«@s1,@s2,@s3,@sn:name@host»

где s1,s2,s3,sn - имена (или IP адреса) промежуточных хвостов, а name@host почтовый ящик получателя. В первую очередь сообщение передается узлу s1 - самому левому серверу в цепочке. Он модифицирует параметр команды RCPT TO, «выкусывая» из нее имя своего узла:

· RCPT TO:«@s2,@s3,@sn:name@host»

Затем, извлекается адрес следующего получателя - s2. Если сервер s1 не берется за доставку корреспонденции серверу s2, письмо возвращается назад отправителю с сообщением об ошибке. В противном случае процесс повторяется до тех пор, пока сообщение не окажется в почтовом ящике получателя.

Недостаток такой схемы заключается в том, что некоторые SMTP сервера для пересылки на очередной хвост могут прибегать к услугам своих собственных ретрансляторов. Таким образом, гарантируется, что письмо при успешной доставке посетит все заданные узлы в указанном порядке. Но не всегда выполняется прямая пересылка между соседними хвостами в цепочке.

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

К сожалению, большинство почтовых клиентов, проверяя корректность ввода адреса получателя, считают такую операцию синтаксически неправильной и отказываются отправлять письмо. Приходится в очередной раз запускать telnet и передавать сообщение вручную.

Узнать какие именно команды поддерживаются конкретным SMTP сервером можно с помощью «HELP», а подробнее о назначении каждой из них “HELP command”.

Для получения детальной информации о командах протокола SMTP можно обратиться к RFC-788, RFC-821, RFC-822, RFC-1341, RFC-1342, RFC-1426, RFC-1521, RFC-1806, RFC-1830, RFC-2045, RFC-2046, RFC-2047, RFC-2048, RFC-2049, RFC-2076.

Из книги Техника сетевых атак автора Касперски Крис

Протокол SMTP O В этой главе:O Основные команды протоколаO Серверы-ретрансляторыO Непосредственная пересылкаO Автоматизация почтовой рассылки и спамO Анонимная рассылка писемДля доставки почты в большинстве случаев используется протокол SMTP (Simple Mail Transfer Protocol).При его

автора Реймонд Эрик Стивен

5.3.1. Учебный пример: SMTP, простой протокол передачи почты В примере 5.7. иллюстрируется транзакция SMTP (Simple Mail Transfer Protocol - простой протокол передачи почты), который описан в спецификации RFC 2821. В данном примере строки, начинающиеся с С:, отправляются почтовым транспортным

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

5.3.1. Учебный пример: SMTP, простой протокол передачи почты В примере 5.7. иллюстрируется транзакция SMTP (Simple Mail Transfer Protocol - простой протокол передачи почты), который описан в спецификации RFC 2821. В данном примере строки, начинающиеся с C:, отправляются почтовым транспортным

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

5.24 Протокол ARP Перед тем как датаграмма будет передана с одной системы локальной сети на другую, она будет обрамлена заголовком и завершающей частью кадра. Кадр доставляется на сетевой адаптер, физический адрес которого совпадает с физическим адресом назначения из

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

8.9 Протокол RIP Наиболее широко используемым протоколом IGP является RIP, заимствованный из протокола маршрутизации сетевой системы компании Xerox (Xerox Network System - XNS). Популярность RIP основана на его простоте и доступности.RIP был первоначально реализован в TCP/IP операционной

Из книги Сетевые средства Linux автора Смит Родерик В.

8.17 Протокол BGP В Интернете широко используется протокол граничного шлюза (Border Gateway Protocol - BGP). Текущей версией протокола является BGP-4.В современном Интернете существует множество провайдеров, объединенных между собой на манер сети межсоединений. При движении к точке

Из книги автора

14.6 Протокол FTP С протоколом FTP связаны следующие понятия:? Команды и их параметры, пересылаемые по управляющему соединению? Числовые коды, возвращенные в ответ на команду? Формат пересылаемых данныхНиже рассмотрен набор команд FTP. Они передаются по управляющему

Из книги автора

15.17 Протокол NFS Последней реализацией NFS является версия 3, хотя продолжают успешно применяться реализации версии 2. Программа NFS сервера имеет номер 100003 и, по соглашению, NFS захватывает при инициализации порт

Из книги автора

16.9 Команды SMTP Сценарий из раздела 16.6.1 содержал наиболее часто используемые команды SMTP. Полный набор команд SMTP представлен в таблице 16.1.Таблица 16.1 Команды SMTP Команда Описание HELO Идентифицирует отправителя для получателя. MAIL FROM Начало почтовой транзакции и указание на

Из книги автора

16.12.2 Диалог в улучшенной версии SMTP Показанный ниже пример демонстрирует, как улучшенный агент пересылки почты формирует транзакцию для отправки сообщения MIME в 8-битном формате:? Получатель объявляет о своих улучшенных возможностях, включая 8BITMIME.? Команда MAIL FROM имеет

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

Из книги автора

Из книги автора

Специальные функции сервера SMTP В последующих разделах описываются различные характеристики почтового сервера, которые задаются при его настройке. Чтобы не описывать эти характеристики для каждого сервера, рассмотрим их

(SMTP) - это стандарт для e-mail-почты. Изначально был зафиксирован в RFC 821 (1982 г.), последний раз обновлялся в 2008 году с расширенными добавлениями SMTP по RFC 5321 (широко распространенным сегодня протоколом).

Хотя почтовые серверы и другие почтовые агенты применяют SMTP для передачи и получения e-mail-корреспонденции, программное обеспечение пользовательского класса, как правило, использует SMTP-порты только для отправки данных на сервер для ретрансляции. Для получения сообщений клиентские приложения обычно используют либо IMAP, либо POP3. Данные протоколы наиболее удобны и востребованы для этих целей: имеют расширенный функционал и широкий спектр возможностей.

Характерные особенности

SMTP-связь между почтовыми серверами использует порт TCP 25. Почтовые клиенты часто отправляют исходящие письма на почтовый сервер по порту 587. Несмотря на то что устаревшие почтовые провайдеры по-прежнему разрешают использовать нестандартный порт 465 для этой цели.

SMTP-соединения, защищенные TLS, известные как SMTPS, могут быть выполнены с использованием технологии STARTTLS.

Запатентованные системы и системы электронной почты используют свои собственные нестандартные протоколы для доступа к почтовым ящикам на своих почтовых серверах — все компании используют порты SMTP-сервера, когда отправка или получение электронной почты происходят за пределами их собственных систем.

Назначение SMTP

Почти все действия в Интернете становятся возможными благодаря протоколам — специальным правилам сетевого программного обеспечения, которые позволяют компьютеру связываться со всеми сетями, чтобы пользователи могли делать покупки, читать новости, отправлять электронную почту. Протоколы жизненно важны для повседневной сетевой деятельности — они встроены в сетевое программное обеспечение и используются по умолчанию.

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

Техническая терминология

SMTP — это протокол TCP/IP, используемый для работы с e-mail-почтой. Однако поскольку он ограничен возможностью отправлять сообщения в очередь на принимающей стороне, он обычно используется либо с POP3, либо с IMAP, которые позволяют хранить данные на сервер и при необходимости загружать их. Иными словами, обычно используют приложение, которое выбирает SMTP для отправки e-mail и POP3 или IMAP для получения корреспонденции. В системах на основе Unix sendmail является наиболее широко используемым SMTP-сервером для электронной почты. В коммерческий пакет Sendmail входит сервер POP3. Microsoft Exchange включает в себя SMTP-сервер и так же может быть настроен на поддержку POP3.

SMTP, как правило, используется для работы через интернет-порт 25. Альтернативой SMTP, который широко используется в Европе, является X.400. Многие почтовые серверы теперь поддерживают Extended Simple Mail Transfer Protocol (ESMTP), который позволяет передавать мультимедийные файлы в виде электронной почты.

История

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

Дальнейшие реализации включают FTP Mail Protocol, начиная с 1973 года. Работа по развитию продолжалась в 1970-х гг., пока ARPANET не перешла в современный Интернет в 1980 году. Затем Джон Постель предложил протокол передачи почтовых данных.

SMTP начал широко применяться в начале 1980-х гг. В то время данный протокол был дополнением к Unix для почтовой программы Unix Copy Program. SMTP лучше всего работает, когда отправляющая и принимающая машины подключены к Сети, используют механизм хранения и отправки и являются примерами технологии push.

Модель обработки почты

E-mail-почта отправляется почтовым клиентом (почтовым агентом пользователя, MUA) на почтовый сервер (агент отправки почты, MSA) с использованием SMTP на TCP-порт 587. Большинство провайдеров почтовых ящиков по-прежнему разрешают отправку на традиционный порт 25. MSA доставляет почту на свой почтовый агент (агент передачи почты, MTA). Зачастую эти агенты являются экземплярами общего программного обеспечения, активированного с различными параметрами на одном компьютере. Локальная обработка может выполняться либо на одной машине, либо разделяться между несколькими машинами. Процессы почтового агента на одной машине могут обмениваться файлами, но если обработка выполняется на нескольких машинах, они передают сообщения между собой, используя SMTP-порт, где каждая машина настроена на использование следующей машины в качестве интеллектуального хоста.

Обзор протокола

SMTP представляет собой текстовый протокол, ориентированный на соединение, в котором отправитель почты общается с почтовым получателем путем выдачи командных строк и предоставления необходимых данных по надежному упорядоченному каналу потока данных. Сеанс SMTP состоит из команд, созданных SMTP-клиентом (инициирующим агентом, отправителем или передатчиком) и соответствующими ответами от SMTP-сервера (агента прослушивания или получателя). Сеанс может включать в себя ноль или более SMTP-транзакций, которые состоят из трех последовательностей команд/ответов:


Помимо промежуточного ответа для DATA, ответ каждого сервера может быть либо положительным, либо отрицательным (код 2xx). Отрицательные ответы могут быть постоянными (коды 5xx) или временными (коды 4xx). Отклонение — это постоянный сбой, и клиент должен отправить сообщение отказов на сервер, на который он его получил. Падение - это положительный ответ, за которым следует отказ от сообщения.

Почтовые SMTP-порты и их значение

SMTP — только протокол доставки. При обычном использовании почта отправляется на целевой почтовый сервер, например, SMTP-сервер порта mail. Данные маршрутизируются на основе целевого сервера, а не отдельных пользователей, к которым он адресован. Другие протоколы (POP или IMAP) специально разработаны для использования отдельными пользователями, которые получают сообщения и управляют почтовыми ящиками. SMTP, POP и IMAP являются неприемлемыми протоколами для ретрансляции почты с помощью компьютеров с прерывистой связью. Они предназначены для работы после окончательной доставки, когда информация, критически важная для правильной работы почтового ретранслятора, была удалена.

Пуск очереди пустых сообщений

Remote Message Queue Starting - это функция SMTP, которая позволяет удаленному хосту запустить обработку почты на сервере, чтобы она могла получать сообщения, предназначенные для нее, отправив команду TURN. Однако эта функция создавала потенциальную угрозу безопасности данных и была расширена в RFC 1985 командой ETRN, которая более надежно работает с использованием метода аутентификации на основе информации о системе доменных имен.

Международный адрес электронной почты

Пользователи, чей сценарий не является латинским, или которые используют диакритические символы не в наборе символов ASCII, испытывали трудности с требованием адреса электронной почты латинского алфавита (SMTP-порт mail.ru). RFC 6531 был создан для решения этой проблемы, предоставляя возможности интернационализации для SMTP, расширения SMTPUTF8 и поддержки многобайтовых и не-ASCII-символов в адресах электронной почты. Примеры: диакритические знаки и другие языковые символы (греческий и китайский). Также актуально для SMTP-порта Yandex.

Текущая поддержка этого документа на данный момент ограничена, но есть большой интерес к широкому внедрению RFC 6531 и соответствующих RFC в таких странах, как Китай, которые имеют большую пользовательскую базу, где Latin (ASCII) является иностранным сценарием.

Исходящая почта SMTP-сервера

Клиент электронной почты должен знать IP-адрес своего исходного SMTP-сервера. Это должно быть указано как часть его конфигурации (обычно это имя DNS). Этот сервер будет предоставлять исходящие сообщения от имени пользователя.

Ограничения доступа к серверу исходящей почты

Администраторам сервера необходимо наложить определенный контроль на тех клиентов, которые могут использовать сервер. Это позволяет бороться со злоупотреблениями и спамом. Широко использовались подобные решения:

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

Современные SMTP-серверы обычно предлагают альтернативную систему, требующую аутентификации клиентов по учетным данным, прежде чем разрешать доступ.

SMTP — какой порт используется?

Связь между почтовыми серверами обычно всегда использует стандартное значение порта TCP 25, назначенного для SMTP. Тем не менее почтовые клиенты обычно вместо этого используют определенные порты порта smtp ssl. Большинство провайдеров интернет-услуг теперь блокируют весь трафик исходящего порта от своих клиентов в качестве меры защиты от спама. По той же причине предприятия обычно настраивают свой брандмауэр, чтобы разрешить исходящий порт с назначенных почтовых серверов.

Пример транспорта SMTP

Типичный пример отправки сообщения через SMTP на два почтовых ящика (alice и theboss), расположенных в одном и том же почтовом домене (example.com или localhost.com), воспроизводится в следующем сеансе обмена. После того как отправитель сообщения (клиент SMTP) устанавливает надежный канал связи для приемника сообщений (SMTP-сервер), сеанс открывается с сервером, обычно содержащим его полное доменное имя (FQDN), в этом случае smtp, example или com. Клиент инициирует свое диалоговое окно, отвечая командой HELO, идентифицирующей себя в параметре команды с его полным доменным именем (или литералом адреса, если он недоступен).

Дополнительные расширения

Клиенты узнают, какие опции поддерживает сервер, используя приветствие EHLO, вместо исходного HELO. Клиенты возвращаются в HELO только в том случае, если сервер не поддерживает расширения SMTP.

Современные клиенты могут использовать ключевое слово SSRE расширения ESMTP для запроса сервера для максимального размера сообщения, которое будет принято. Старые клиенты и серверы могут пытаться передавать сообщения с избыточным размером, которые будут отклонены после использования сетевых ресурсов, включая время подключения к сетевым ссылкам.

Методы защиты от спама и аутентификация по электронной почте

Исходный дизайн SMTP не имел возможности идентифицировать отправителей или проверять, разрешено ли серверам отправлять от их имени. В результате возможно использование спуфинга электронной почты, что обычно используется в почтовом спаме и фишинге.

Производятся специальные предложения для изменения SMTP или их замены полностью. Одним из примеров этого является Internet Mail 2000, но ни он, ни какой-либо другой не добились большого успеха перед сетевым эффектом огромной установленной базы классического SMTP. Вместо этого почтовые серверы теперь используют целый ряд методов, в том числе DomainKeys, DomainKeys Identified Mail, Policy Policy Framework и DMARC, DNSBLs и greylisting для отклонения или карантина подозрительных писем.



Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ:
NexxDigital - компьютеры и операционные системы