Почтовые системы использующие протокол SMTP

Автор работы: Пользователь скрыл имя, 19 Апреля 2013 в 21:31, курсовая работа

Описание работы

Электронная почта (e-mail), несомненно, одно из самых популярных приложений. показывает, что примерно половина всех TCP соединений занята передачей почтовых сообщений с использованием простого протокола передачи почты (SMTP - Simple Mail Transfer Protocol). (С точки зрения количества переданных байт, по FTP соединениям передается значительно больше данных.) обнаружил, что среднее почтовое сообщение содержит примерно 1500 байт данных, однако некоторые сообщения содержат мегабайты данных, потому что электронная почта иногда используется для посылки файлов.

Содержание работы

Введение 4
1. Почтовые системы использующие протокол SMTP 6
1.1 Протокол SMTP (Simple Mail Transfer Protocol) 6
1.2 Как происходит отправка почтовых сообщений 8
1.3 Электронная почта корпорации DaVinci 10
2. работа протокола SMTP 14
2.1 Алгоритм работы протокола SMTP 14
Схема взаимодействия различных частей почтовой системы 15
2.1 Команды VRFY и EXPN 18
2.3 Некоторые другие команды, используемые в SMTP 20
2.4 Безопасность SMTP и спам 21
Пример простейшей SMTP-сессии 21
Команды SMTP 21
Расширения ESMTP 24
Стандарты RFС 24
Список используемой литературы 26

Файлы: 1 файл

курсач по сетям.docx

— 80.52 Кб (Скачать файл)

 

250 dxmint.cern.ch hello crnvma.cern.ch, pleased to meet you (отклик 250 также является положительным) 
mail from:<> (так как на моей PC нет резидентной почтовой программы, я не указываю обратного адреса)

250 <>... sender ok

(команда прошла успешно)

RCPT TO:ysemenov@cernvm.cern.ch

(указываем адрес места  назначения)


250 <ysemenov@cernvm.cern.ch>... recipient ok

DATA

(начало ввода текста  сообщения)

nu-i-nu...

(текст сообщения)

.

(знак конца сообщения)

QUIT

(прерывание или завершение  процедуры)


221 dxmint.cern.ch closing connection (сообщение об успешном завершении процедуры)

Почтовое сообщение отправлено без использования доступа к  локальной почтовой программе (mail на sun, например). Следует отметить, что работа через порт 25 в данном случае открывает богатые возможности для хакеров. Вообще умелый программист может многого достичь, используя номера портов. Здесь есть над чем поработать людям, ответственным за безопасность сетей. Аналогично, не имея авторизации, можно выявить клиентов почтового сервера, используя команду VRFY:

tn ns.itep.ru 25 
220 ns.itep.ru 5.67a8/ida-1.5 sendmail is ready at sat, 29 jul 1995 13:53:03 
vrfy bobyshev 
250 andrey bobyshev  
и т.д. 
quit

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

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

 

Схема взаимодействия различных частей почтовой системы

Рис. 4.4.14.1 Схема взаимодействия различных  частей почтовой системы

Для решения поставленной задачи SMTP-сервер должен знать имя конечного получателя и название почтового ящика места  назначения. Аргументом команды MAIL является адрес отправителя (обратный адрес). Аргументом команды RCPT служит адрес  конечного получателя. Обратный адрес  используется для посылки сообщения  в случае ошибки.

Все отклики имеют цифровые коды. Команды, отклики и имена ЭВМ  не чувствительны к тому, строчные или прописные символы использованы при их написании. Это не всегда справедливо  при написании имен и адресов  получателя.

Многие почтовые системы работают только с ASCII-символами. Если транспортный канал работает с октетами, 7-битные коды будут дополнены нулевым  восьмым битом. Именно здесь коренилась проблема пересылки почтовых сообщений  на русском языке несколько лет  назад(русский алфавит требует 8-битового представления).

Как уже было сказано, процедура  отправки почтового сообщения начинается с посылки команды MAIL, которая  имеет формат:

MAIL <SP> FROM:<reverse-path> <CRLF>,

где <SP> - пробел, <CRLF> - комбинация кодов возврата каретки и перехода на новую строку, а <reverse-path> - обратный путь.

Эта команда сообщает SMTP-получателю, что стартует новая процедура  и следует сбросить в исходное состояние все статусные таблицы, буферы и т.д. Если команда прошла, получатель реагирует откликом: 250 OK.

Аргумент может содержать не только адрес почтового ящика, в общем случае является списком адресов ЭВМ-серверов, через которые пришло данное сообщение, включая, разумеется, и адрес почтового ящика отправителя. Первым в списке <reverse-path> стоит адрес ЭВМ-отправителя.

После прохождения команды MAIL посылается команда RCPT:

RCPT <SP> TO:<forward-path> <CRLF>

Эта команда указывает адрес  конечного получателя (<forward-path>). При благополучном прохождении команды получатель посылает код-отклик 250 OK, и запоминает полученный адрес. Если получатель неизвестен, SMTP-сервер пошлет отклик 550 Failure reply. Команда RCPT может повторяться сколько угодно раз, если адресат не один.

Аргумент может содержать не только адрес почтового ящика, но и маршрутный список ЭВМ по дороге к нему. Первым в этом списке должно стоять имя ЭВМ, получившей данную команду. По завершении этого этапа посылается собственно сообщение:

DATA <CRLF>

При правильном приеме этого сообщения SMTP-сервер реагирует посылкой отклика 354 Intermediate reply (промежуточный отклик), и рассматривает все последующие строки в качестве почтового текста. При получении кода конца текста отправляется отклик: 250 OK.

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

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

1. 251 User not local; will forward to <forward-path>

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

2. 551 User not local; please try <forward-path>

Получатель знает правильный адрес  и предлагает отправителю переадресовать сообщение по адресу <forward-path>.

 

2.1 Команды VRFY и EXPN

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

Реакция на команду VRFY зависит от аргумента. Так если среди клиентов почтового  сервера имеется два пользователя с именем Ivanov, откликом на команду "VRFY Ivanov" будет "553 User ambiguous". В общем случае команда VRFY Ivanov может получить в качестве откликов:

250 Vasja Ivanov Ivanov@cl.itep.ru 
или: 
251 User not local; will forward to Ivanov@cl.itep.ru 
или: 
550 String does not match anything (данная строка ничему не соответствует). 
или: 
551 User not local; please try Vasja@ns.itep.ru 
или: 
VRFY Chtozachertovchina 
553 User ambiguous (несуществующее имя)

В случае пропечатки списка адресов отклик занимает несколько строк, например:

EXPN Example-People 
250-Juri Semenov Semenov@ns.itep.ru 
250-Alexey Sher Sher@suncom.itep.ru 
250-Andrey Bobyshev Bobyshev@ns.itep.ru 
250-Igor Gursky Gursky@ns.itep.ru

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

Основной задачей почты служит доставка сообщений в почтовый ящик адресата. Сходную форму услуги оказывают  некоторые ЭВМ, доставляя сообщения  на экран терминала (в рамках SMTP). Для посылки сообщений на экран  терминала адресата предусмотрено  три команды:

1. SEND <SP> FROM:<reverse-path> <CRLF>

Команда SEND требует, чтобы почтовое сообщение было доставлено на терминал. Если терминал адресата не активен  в данный момент, то откликом на команду RCPT будет код 450.

2. SOML <SP> FROM:<reverse-path> <CRLF>

Команда Send Or MaiL (SOML) пересылает сообщение на экран адресата, если он активен, в противном случае сообщение будет уложено в его почтовый ящик.

3. SAML <SP> FROM:<reverse-path> <CRLF>

Команда Send And MaiL (SAML) предполагает доставку сообщение на экран терминала адресата и занесение в его почтовый ящик.

Для открытия и закрытия коммуникационного  канала используются команды:

HELO <SP> <domain> <CRLF>, где <domain> - имя запрашивающего домена. 
QUIT <CRLF>

Выражение может быть маршрутом, имеющим вид "@ONE,@TWO:VANJA@THREE", где ONE, TWO и THREE - имена ЭВМ. Что подчеркивает различие между адресом и маршрутом. Концептуально элементы из <forward-path> переносятся в <reverse-path> при пересылке сообщений от одного SMTP-сервера к другому.

Если SMTP-сервер обнаружит, что доставка сообщения по адресу <forward-path> невозможна, тогда он формирует сообщение о "не доставленном письме", используя <reverse-path>. Следует также помнить, что ни прямой ни обратный адреса-маршруты, вообще говоря, могут не иметь ничего общего с текстом заголовка почтового сообщения.

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

MAIL FROM:< >

Если вы или ваша программа не указали обратного адреса, не следует  думать, что это помешает работе почтовой программы и она не будет знать, куда посылать отклики. Ваш обратный IP-адрес указан в каждом пакете, посылаемом адресату! Практически все почтовые программы позволяют произвольно модифицировать поле <reverse-path>. Это может быть удобно, если вы собираетесь в командировку, но эта возможность широко используется и спамерами.

 

 

 

 

2.3 Некоторые другие команды, используемые в SMTP

Команда TURN используется для того, чтобы поменять местами функции программ, взаимодействовавших по телекоммуникационному каналу. Программа-отправитель становится получателем (после того как она выдаст команду TURN и получит отклик 250), а программа-получатель - отправителем. Если программа не хочет или не может поменять свою функцию, она пошлет отклик 502.

Команда RESET (RSET) прерывает текущую процедуру отправки почтового сообщения. Все буферы и таблицы очищаются, получатель должен послать отклик 250 OK.

Команда HELP вынуждает получателя послать справочную информацию отправителю команды HELP. Команда может содержать аргумент (имя команды). Команда не изменяет состояния таблиц или буферов.

Команда NOOP не оказывает влияния на какие-либо параметры или результаты предшествующих команд, она только вынуждает получателя послать отклик 250 OK. Может использоваться для проверки работоспособности TCP-канала.

Допустимо написание команд строчными  или прописными символами, например: MAIL, Mail, mail, MaIl или mAIl.

Для того чтобы программа SMTP-сервера  была работоспособна, она должна понимать следующий минимум команд: HELO, MAIL, RCPT, DATA, RSET, NOOP, QUIT.

Предельная длина имени пользователя или домена равна 64 символам. Максимальная длина <reverse-path> или <forward-path> составляет 256 символов, включая разделители (пробелы, точки, запятые и пр.). Командная строка не должна быть длиннее 512 символов. Максимальный размер строки отклика не должен превышать, включая его код и <CRLF>, 512 символов. Максимальная длина строки составляет, включая <CRLF>, 1000 символов. Предельно допустимое число адресатов равно 100, последнее полезно помнить, если вы храните этот список в файле.

 

2.4 Безопасность SMTP и спам

Изначально SMTP не поддерживал единой схемы авторизации. В результате этого спам стал практически неразрешимой проблемой, так как было невозможно определить, кто на самом деле является отправителем сообщения — фактически можно отправить письмо от имени  любого человека. В настоящее время  производятся попытки решить эту  проблему при помощи спецификаций SPF, Sender ID, Yahoo Domain Keys. Единой спецификации на настоящий момент не существует.

Пример  простейшей SMTP-сессии

C: — клиент, S: — сервер

S: (ожидает соединения) 
C: (Подключается к порту 25 сервера) 
S:220 mail.company.tld ESMTP CommuniGate Pro 5.1.4i is glad to see you! 
C:HELO 
S:250 domain name should be qualified 
C:MAIL FROM: <someusername@somecompany.ru> 
S:250 someusername@somecompany.ru sender accepted 
C:RCPT TO:<user1@company.tld> 
S:250 user1@company.tld ok 
C:RCPT TO: <user2@company.tld > 
S:550 user2@company.tld  unknown user account 
C:DATA 
S:354 Enter mail, end with "." on a line by itself 
C:Hi! 
C:. 
S:250 769947 message accepted for delivery 
C:QUIT 
S:221 mail.company.tld CommuniGate Pro SMTP closing connection 
S: (закрывает соединение)

В результате такой сессии письмо будет доставлено адресату user1@company.tld, но не будет доставлено адресату user2@company.tld, потому что такого адреса не существует.

Команды SMTP

  • HELO <SP> <string><CRLF> — Идентифицирует SMTP-сервер отправителя, открывает сеанс

Пример

HELO user.example.net 
250 server.example.com Hello user.example.net [192.168.1.1] pleased to meet you

  • QUIT<CRLF> — Завершает SMTP-сеанс.

Пример

QUIT 
221 2.0.0 server.example.com closing connection

  • MAIL <SP> FROM:<reverse-path> <CRLF> — Задает адрес отправителя. Адрес следует указывать в угловых скобках. Некоторые серверы могут проигнорировать то, что им передают адрес без угловых скобок, но те серверы, что неукоснительно следуют описанию RFC, отклонят такой адрес.

Пример

MAIL FROM: <USER@EXAMPLE.NET> 
250 2.1.0 USER@EXAMPLE.NET... Sender ok

  • RCPT <SP> TO:<forward-path> <CRLF> — Задает адрес получателя. Адрес следует указывать в угловых скобках. Некоторые серверы могут проигнорировать то, что им передают адрес без угловых скобок, но те серверы, что неукоснительно следуют описанию RFC, отклонят такой адрес.

Пример

RCPT TO: <USER2@EXAMPLE.COM> 
250 2.1.5 USER2@EXAMPLE.COM... Recipient ok

  • DATA <CRLF> — Указывает на начало сообщения. Для окончания сообщения указывается <CRLF>.<CRLF>.

Пример:

DATA 
354 Enter mail, end with "." on a line by itself 
this is a test message. 

250 2.0.0 l3PDY91f000484 Message accepted for delivery

  • VRFY <SP> <string><CRLF> — проверяет существование получателя.

Пример (пояснение чуть ниже):

VRFY 
252 2.5.2 Cannot VRFY user; try RCPT to attempt delivery (or try finger)

  • EXPN <SP> <string><CRLF> — показывает список адресов для списка рассылки.

Пример (пояснения чуть ниже):

EXPN 
502 5.7.0 Sorry, we do not allow this operation

  • NOOP<CRLF> — пустая операция

Пример:

NOOP 
250 2.0.0 OK

  • TURN<CRLF> — сервер и клиент меняются ролями после ответа сервера 200 OK

Пример: (команда не реализована)

TURN 
502 5.5.1 Command not implemented: "TURN"

  • RSET<CRLF> — сброс сессии в исходное состояние

Пример:

RSET 
250 2.0.0 Reset state

  • HELP<CRLF> — информация о поддерживаемых командах. Некоторые сервера поддерживают справку по отдельным командам, например, HELP MAIL (sendmail), некоторые выводят по этой команде лишь список доступных команд без пояснения (Microsoft Exchange Server).

Пример:

HELP 
214-2.0.0 This is sendmail version 8.12.9 
214-2.0.0 Topics: 
214-2.0.0       HELO    EHLO    MAIL    RCPT    DATA 
214-2.0.0       RSET    NOOP    QUIT    HELP    VRFY 
214-2.0.0       EXPN    VERB    ETRN    DSN     AUTH 
214-2.0.0       STARTTLS 
214-2.0.0 For more info use "HELP <topic>". 
214-2.0.0 To report bugs in the implementation send email to 
214-2.0.0       sendmail-bugs@sendmail.org. 
214-2.0.0 For local information send email to Postmaster at your site. 
214 2.0.0 End of HELP info 
HELP MAIL 
214-2.0.0 MAIL FROM: <sender> [ <parameters> ] 
214-2.0.0       Specifies the sender.  Parameters are ESMTP extensions. 
214-2.0.0       See "HELP DSN" for details. 
214 2.0.0 End of HELP info

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

Расширения ESMTP

RFC 1869 предписывает начинать сессию не командой HELO, а командой EHLO. В случае, если сервер не поддерживает расширений, то он ответит на EHLO ошибкой, в этом случае клиент должен послать команду HELO и не использовать расширения протокола.

Если же сервер поддерживает ESMTP, то кроме приветствия он сообщит  список поддерживаемых расширений протокола SMTP, например:

ehlo office.company1.tld 
250-mail.company2.tld is pleased to meet you 
250-DSN 
250-SIZE 
250-STARTTLS 
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5 GSSAPI MSN NTLM 
250-ETRN 
250-TURN 
250-ATRN 
250-NO-SOLICITING 
250-HELP 
250-PIPELINING 
250 EHLO

Стандарты RFС

  • RFC 1870 SMTP Service Extension for Message Size Declaration (заменяет RFC 1653)
  • RFC 2034 SMTP Service Extension for Returning Enhanced Error Codes
  • RFC 2505 Anti-Spam Recommendations for SMTP MTAs (BCP 30)
  • RFC 2554 SMTP Service Extension for Authentication
  • RFC 2821 The Simple Mail Transfer Protocol (заменяет RFC 821 aka STD 10, RFC 974 и RFC 1869)
  • RFC 2822 Internet Message Format (заменяет RFC 822 aka STD 11)
  • RFC 2920 SMTP Service Extension for Command Pipelining (STD 60)
  • RFC 3030 SMTP Service Extensions for Transmission of Large and Binary MIME Messages
  • RFC 3207 SMTP Service Extension for Secure SMTP over Transport Layer Security (заменяет RFC 2487)
  • RFC 3461 SMTP Service Extension for Delivery Status Notifications (заменяет RFC 1891)
  • RFC 3462 The Multipart/Report Content Type for the Reporting of Mail System Administrative Messages (заменяет RFC 1892)
  • RFC 3463 Enhanced Status Codes for SMTP (заменяет RFC 1893)
  • RFC 3464 An Extensible Message Format for Delivery Status Notifications (заменяет RFC 1894)
  • RFC 3552 Guidelines for Writing RFC Text on Security Considerations
  • RFC 3834 Recommendations for Automatic Responses to Electronic Mail
  • RFC 4409 Message Submission for Mail (заменяет RFC 2476)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Заключение
  • Основная задача протокола SMTP (Simple Mail Transfer Protocol) заключается в том, чтобы обеспечивать передачу электронных сообщений (почту). Для работы через протокол SMTP клиент создаёт TCP соединение с сервером через порт 25. Затем клиент и SMTP сервер обмениваются информацией пока соединение не будет закрыто или прервано. Основной процедурой в SMTP является передача почты (Mail Procedure). Далее идут процедуры форвардинга почты (Mail Forwarding), проверка имён почтового ящика и вывод списков почтовых групп. Самой первой процедурой является открытие канала передачи, а последней - его закрытие.

 

Информация о работе Почтовые системы использующие протокол SMTP