Почему не безопасен протокол pop3. Почтовые протоколы POP3 и IMAP. История и документация

Сегодня мы подробно расскажем про наиболее используемые в сети интернет протоколы – POP3, IMAP и SMTP. Каждый из указанных протоколов имеет определенное назначение и функциональные возможности. Давайте попробуем разобраться.

Протокол POP3 и его порты

Post Office Protocol 3 (POP3) это стандартный протокол почты созданные для получения электронных писем с удаленного сервера на e-mail клиент.POP3 позволяет вам сохранить почтовое сообщение на ваш компьютер и даже прочесть его, в случае, если вы находитесь не в сети. Важно отметить, что если вы решили использовать POP3 для подключения к учетной записи почты, письма, которые уже скачаны на компьютер, будут удалены с почтового сервера. Как пример, если вы используете несколько компьютеров для подключения к одному почтовому аккаунту, то протокол POP3 может быть не лучшим выбором в данной ситуации. С другой стороны, так как почта хранится локально, на ПК конкретного пользователя, это позволяет оптимизировать дисковое пространство на стороне почтового сервера.

По умолчанию, протокол POP3 использует следующие порты:

  • Порт 110 – это порт протокола POP3 по умолчанию. Не является безопасным.
  • Порт 995 – этот порт следует использовать в том случае, если вы хотите установить безопасное соединение.

Протокол IMAP и порты

Internet Message Access Protocol (IMAP) – это почтовый протокол, созданный для доступа к почте с локального почтового клиента. IMAP и POP3 – наиболее популярные в сети интернет протоколы, используемые для получения e-mail. Оба этих протокола поддерживается всеми современными почтовыми клиентами (MUA - Mail User Agent) и WEB – серверами.

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

По умолчанию, протокол IMAP использует следующие порты:

  • Порт 143 – порт по умолчанию. Не безопасен.
  • Порт 993 – порт для безопасного соединения.
Протокол SMTP и его порты

Simple Mail Transfer Protocol (SMTP) – это стандартный протокол для отправки почтовых сообщений по сети интернет.

Данный протокол описан в RFC 821 и RFC 822, впервые опубликованных в августе 1982 года. В рамках данных RFC, формат адреса должен быть в формате имя_пользователя@доменное_имя . Доставка почты, аналогична работе обычной почтовой службы: например, письмо на адрес [email protected], будет интерпретирован так: ivan_ivanov – адрес, а merionet.ru – почтовый индекс. Если доменное имя получателя отличается от доменного имени отправителя, то MSA (Mail Submission Agent) отправит письмо через Mail Transfer Agent (MTA). Главная идея MTA в том, чтобы перенаправлять письма в другую доменную зону, по аналогии, как традиционная почты отправляет письма в другой город или область. MTA так же получает почту от других MTA.

Протокол SMTP использует следующие порты.

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

Протокол POP3 (Post Office Protocol — version 3, третья версия протокола почтового отделения) является наиболее распространенным протоколом получения электронной почты с почтового сервера. Для этих целей также используется IMAP. В IMAP предусмотрено больше возможностей, чем в POP3, но зато POP3 намного проще. Для сравнения — POP3 описан в RFC1939 , занимающем всего 20 страниц, а RFC3501 , описывающий IMAP, состоит из целых 108 страниц. В этом посте речь пойдет о протоколе POP3.

Как всегда, начнем с запуска утилиты telnet и живого примера:

telnet mail.nic.ru 110
Trying 194.85.88.226...
Connected to mail.nic.ru.
Escape character is "^]".
+OK POP3 Server ready <[email protected]>
APOP [email protected]

Здесь мы соединяемся с pop3-сервером, работающим обычно на 110-м порту и проходим аутентификацию (не путать с авторизацией). Если в приветствии сервера присутствует похожая на e-mail строка в треугольных скобках (timestamp), значит сервер поддерживает команду APOP, позволяющую передавать пароль в зашифрованном (точнее — хэшированном) виде. В этом примере хэш вычислен следующим образом:

echo -n "<[email protected]>qwerty" | md5

То есть происходит конкатенация timestamp с паролем, а от результата вычисляется MD5. Преимущество этого метода в том, что даже при использовании незащищенного соединения злоумышленник не сможет перехватить пароль. Он увидит только хэш, который будет совершенно бесполезен, поскольку для каждого нового соединения сервер использует уникальный timestamp. Чтобы узнать пароль необходимо взломать хэш c помощью перебора, что практически бесполезно для достаточно сильных паролей, которые к тому же меняются хотя бы раз в пол года.

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

Потому большинством почтовых сервером (я лично проверил pop3.mail.ru:110 и pop.gmail.com:995/ssl/) команда APOP не поддерживается и проходить аутентификацию приходится с помощью стандартной пары логин:пароль.

USER [email protected]
+OK please send the PASS
PASS qwerty
+OK 5 messages (868540 bytes) (proxing)

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

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

HELP
+OK Valid commands: QUIT, NOOP, STAT, LIST, UIDL, DELE, RSET, RETR, ...
NOOP
+OK cool
LAST
+OK 5 is last seen

Команда HELP позволяет получить список поддерживаемых сервером команд. В этом примере команды UIDL, XTND и XMIT являются расширениями протокола POP3 и сервер не обязан их поддерживать. Команда UIDL позволяет получить уникальные идентификаторы сообщений (см описание команды LIST ниже):

UIDL
+OK 6 messages
1 3876
2 3877
3 3878
4 3879
5 3880
6 3881
.
UIDL 2
+OK 2 3877

Для чего нужны XTND и XMIT не знаю и разбираться лениво:) Желающие могут поискать ответ в Google.

Команда NOOP означает «ничего не делать». На ум приходит только одно ее применение — выполнять команду раз в 15 секунд, чтобы дать понять серверу, что клиент не повис.

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

Теперь перейдем к более полезным командам:

STAT
+OK 5 868540
LIST
+OK 5 messages
1 275368
2 11196
3 153304
4 275367
5 153305
.
LIST 2
+OK 2 11196
TOP 2 0
+OK message follows
Return-Path:
X-Blacklisted-By: cbl.abuseat.org
From: "=?koi8-r?B?48XO1NIg7cnH0sHDyck=?="
To: [email protected]
Subject: =?koi8-r?B?SGVsbG8=?=
Date: Thu, 17 Dec 2009 18:18:12 +0300
MIME-Version: 1.0
Content-Type: multipart/related;
type="multipart/alternative";
boundary="----=_NextPart_000_003C_01CA7F45.01CA7F45"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 6.00.3790.3959
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.4325
Received-SPF: none
X-Spam-Rating: 83.69

.
DELE 2
+OK marked deleted

Команда STAT позволяет определить количество сообщений в почтовом ящике (5) и их суммарный размер (868 540 байт).

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

Команда TOP позволяет получить заголовок сообщения (первый аргумент команды — id сообщения) и первые N строк тела сообщения (второй аргумент команды). В этом примере я указал N=0, потому что хотел посмотреть только заголовок сообщения. С тем же успехом можно было просто указать только один аргумент. Заканчивается ответ сервера также точкой. Команда TOP часто используется почтовыми клиентами для того, чтобы определить отправителя и тему сообщения без необходимости скачивать письмо целиком. Это экономит время и трафик пользователя.

Очевидно, тут мы имеем дело со спамом (см e-mail отправителя, X-Blacklisted-By и X-Spam-Rating), так что можно смело удалить сообщение, даже не скачивая его целиком. Для этого используется команда DELE. Сообщение будет помечено на удаление, но стерто только после того, как мы закроем соединение.

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

По завершению работы можно попрощаться с сервером и закрыть соединение:

QUIT
+OK CommuniGate Pro POP3 Server connection closed

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

Аббревиатура POP3 в переводе с английского обозначает почтовый протокол 3-ей версии. Сущность данного термина заключается в том, что POP3 представляет собой протокол, предназначенный для работы с входящей корреспонденцией. Используя протокол POP3, почтовый клиент, в первую очередь, забирает письма, пришедшие на сервер, пересылает их на Ваш компьютер, а потом Вы можете работать с полученной корреспонденцией в почтовом клиенте, и Вам не придется дополнительно обращаться к почтовому серверу.

Протокол РОРЗ предоставляет пользователям возможность обращаться к своему серверу и изымать накопившиеся письма и сообщения. Важно знать, что пользователь может получить право доступа к РОР-серверу из любой точки доступа к Всемирной Сети. Для этого пользователя необходимо запустить почтовый агент (UA), который работает по протоколу РОРЗ, а затем выполнить его настройку для работы со своим почтовым сервером.

Таким образом, отдельный персональный компьютер находится во главе модели РОР. Данный компьютер функционирует исключительно как клиент постовой системы. Доставка сообщений клиенту осуществляется по протоколу РОР, а посылаются сообщения по-прежнему с использованием SMTP. На компьютере у пользователя имеются два агента-интерфейса к почтовой системе: отправки (SMTP) и доставки (РОР). Такую ситуация специалисты по разработке протокола РОР3 называют «раздельными агентами» (split UA). О концепции раздельных агентов коротко изложено в спецификации РОР3.

В протоколе РОР3 содержится информация о трех стадиях процесса получения корреспонденции:

  • авторизация
  • транзакция
  • обновление

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

Post Office Protocol (POP) - протокол доставки почты пользователю из почтового ящика почтового сервера РОР. Многие концепции, принципы и понятия протокола POP выглядят и функционируют подобно SMTP. Команды POP практически идентичны командам SMTP, отличаясь в некоторых деталях. На рисунке изображена модель клиент-сервер по протоколу POP. Сервер POP находится между агентом пользователя и почтовыми ящиками.

В настоящее время существуют две версии протокола POP - РОР2 и РОРЗ, обладающими примерно одинаковыми возможностями, однако несовместимыми друг с другом. Дело в том, что у РОР2 и РОРЗ разные номера портов протокола. Между ними отсутствует связь, аналогичная связи между SMTP и ESMTP. Протокол РОРЗ не является расширением или модификацией РОР2 - это совершенно другой протокол. РОР2 определен в документе RFC 937 (Post Office Protocol-Version 2, Butler, et al, 1985), a РОРЗ - в RFC 1225 (Post Office Protocol-Version 3, Rose, 1991). Далее кратко рассмотрим POP вообще и более подробно - РОРЗ. PОРЗ разработан с учетом специфики доставки почты на персональные компьютеры и имеет соответствующие операции для этого.

Назначение протокола РОРЗ

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

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

Конструкция протокола РОРЗ обеспечивает возможность пользователю обратиться к своему почтовому серверу и изъять накопившуюся для него почту. Пользователь может получить доступ к РОР-серверу из любой точки доступа к Интернет. При этом он должен запустить специальный почтовый агент (UA), работающий по протоколу РОРЗ, и настроить его для работы со своим почтовым сервером. Итак, во главе модели POP находится отдельный персональный компьютер, работающий исключительно в качестве клиента почтовой системы (сервера). Подчеркнем также, что сообщения доставляются клиенту по протоколу POP, а посылаются по-прежнему при помощи SMTP. То есть на компьютере пользователя существуют два отдельных агента-интерфейса к почтовой системе - доставки (POP) и отправки (SMTP). Разработчики протокола РОРЗ называет такую ситуацию "раздельные агенты" (split UA). Концепция раздельных агентов кратко обсуждается в спецификации РОРЗ.

В протоколе РОРЗ оговорены три стадии процесса получения почты: авторизация, транзакция и обновление. После того как сервер и клиент РОРЗ установили соединение, начинается стадия авторизации. На стадии авторизации клиент идентифицирует себя для сервера. Если авторизация прошла успешно, сервер открывает почтовый ящик клиента и начинается стадия транзакции. В ней клиент либо запрашивает у сервера информацию (например, список почтовых сообщений), либо просит его совершить определенное действие (например, выдать почтовое сообщение). Наконец, на стадии обновления сеанс связи заканчивается. В табл.7 перечислены команды протокола РОРЗ, обязательные для работающей в Интернет реализации минимальной конфигурации.

Таблица 5. Команды протокола POP версии 3 (для минимальной конфигурации)

Команда
Описание

USER Идентифицирует пользователя с указанным именем

PASS
Указывает пароль для пары клиент-сервер
QUIT
Закрывает TCP-соединение

STAT
Сервер возвращает количество сообщений в почтовом ящике плюс размер почтового ящика

LIST
Сервер возвращает идентификаторы сообщений вместе с размерами сообщений (параметром команды может быть идентификатор сообщения)

RETR
Извлекает сообщение из почтового ящика (требуется указывать аргумент-идентификатор сообщения)

DELE
Отмечает сообщение для удаления (требуется указывать аргумент - идентификатор сообщения)

NOOP
Сервер возвращает положительный ответ, но не совершает никаких действий

LAST
Сервер возвращает наибольший номер сообщения из тех, к которым ранее уже обращались

RSET
Отменяет удаление сообщения, отмеченного ранее командой DELE

В протоколе РОРЗ определено несколько команд, но на них дается только два ответа: +ОК (позитивный, аналогичен сообщению-подтверждению АСK) и -ERR (негативный, аналогичен сообщению "не подтверждено" NAK). Оба ответа подтверждают, что обращение к серверу произошло и что он вообще отвечает на команды. Как правило, за каждым ответом следует его содержательное словесное описание. В RFC 1225 есть образцы нескольких типичных сеансов РОРЗ. Сейчас мы рассмотрим несколько из них, что даст возможность уловить последовательность команд в обмене между сервером и клиентом.

После того как программа установила TCP-соединение с портом протокола РОРЗ (официальный номер 110), необходимо послать команду USER с именем пользователя в качестве параметра. Если ответ сервера будет +ОК, нужно послать команду PASS с паролем этого пользователя:

CLIENT: USER kcope
ERVER: +ОК
CLIENT: PASS secret
SERVER: +ОК kcope"s maildrop has 2 messages (320 octets)
(В почтовом ящике kcope есть 2 сообщения (320 байтов) ...)

Транзакции РОРЗ

Команда STAT возвращает количество сообщений и количество байтов в сообщениях:

CLIENT: STAT
SERVER: +ОК 2 320

Команда LIST (без параметра) возвращает список сообщений в почтовом ящике и их размеры:

CLIENT: LIST
SERVER: +ОК 2 messages (320 octets)
SERVER: 1 120
SERVER: 2 200
SERVER: . ...

Команда LIST с параметром возвращает информацию о заданном сообщении:

CLIENT: LIST 2
SERVER: +ОК 2 200 ...
CLIENT: LIST 3
SERVER: -ERR no such message, only 2 messages in maildrop

Команда TOP возвращает заголовок, пустую строку и первые десять строк тела сообщения:

CLIENT: TOP 10
SERVER: +ОК
SERVER:
(сервер POP высылает заголовки сообщений, пустую строку и первые десять строк тела сообщения)
SERVER: . ...
CLIENT: TOP 100
SERVER: -ERR no such message
Команда NOOP не возвращает никакой полезной информации, за исключением позитивного ответа сервера. Однако позитивный ответ означает, что сервер находится в соединении с клиентом и ждет запросов:

CLIENT: NOOP
SERVER: +ОК

Следующие примеры показывают, как сервер POP3 выполняет действия. Например, команда RETR извлекает сообщение с указанным номером и помещает его в буфер местного UA:

CLIENT: RETR 1
SERVER: +OK 120 octets
SERVER:
(РОРЗ-сервер высылает сообщение целиком)
SERVER: . . . . . .

Команда DELE отмечает сообщение, которое нужно удалить:

CLIENT: DELE 1
SERVER: +OK message 1 deleted ...
(сообщение 1 удалено)
CLIENT: DELE 2
SERVER: -ERR message 2 already deleted
сообщение 2 уже удалено)
Команда RSET снимает метки удаления со всех отмеченных ранее сообщений:

CLIENT: RSET
SERVER: +OK maildrop has 2 messages (320 octets)
(в почтовом ящике 2 сообщения (320 байтов))

Как и следовало ожидать, команда QUIT закрывает соединение с сервером:

CLIENT: QUIT
SERVER: +OK dewey POP3 server signing off
CLIENT: QUIT
SERVER: +OK dewey POP3 server signing off (maildrop empty)
CLIENT: QUIT
SERVER: +OK dewey POP3 server signing off (2 messages left)

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

Что лучше: POP3 или IMAP – это не только дело вкуса.

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

Вместе с тем, POP3 до сих пор остается самым распространенным протоколом загрузки электронной почты. Расшифровывается аббревиатура «POP», как «Post Office Protocol». Он и работает, как традиционное почтовое отделение. Отличие IMAP от POP3 состоит в том, что последний похож на почтальона, который переносит письмо из конторы к вам домой. Естественно, что, если письмо находится у вас, оно уже не может быть ни в каком другом месте.

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

IMAP – это более новая разработка. Расшифровывается он, как «Internet Message Access Protocol», и, как следует из названия, лишь обеспечивает доступ к сообщениям на сервере. Отличие IMAP от POP3 состоит в том, что первый протокол вначале запрашивает список сообщений, хранимых на почтовом сервере. После этого ваш почтовый клиент загружает локальные копии электронных писем и позволяет работать с ними, но сами письма остаются на сервере, до тех пор, пока вы явно не удалите их оттуда.

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

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

В современном мире, наполненном всевозможными цифровыми гаджетами, выбирая между POP3 и IMAP, лучше отдать предпочтение последнему, более новому протоколу. С его помощью мы разрываем жесткую связь между устройством, почтовым клиентом и сервером электронной почты. Теперь место и тип операционной системы не имеют значения. А удешевление хранения данных, позволяет получить в свое распоряжение почтовые ящики огромного объема. Сегодня лишь единичные провайдеры дают пользоваться электронной почтой только по протоколу POP3. Если у вас нет каких-либо особых причин использовать POP3 – выбирайте протокол IMAP.