Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Протокол POP3
В этой лекции
- Описание протокола POP3
- Реализация POP3 в ОС Linux
В предыдущей лекции описывался процесс пересылки почтового сообщения пользователю удаленного компьютера с использованием протокола SMTP. В начале 80-х годов пользователь, которому предназначалось электронное письмо, должен был находиться за терминалом и быть зарегистрированным в системе, чтобы получить и прочесть электронное сообщение с помощью примитивной программы текстового процессора. Сегодня положение вещей в корне изменилось. Пользователи компьютеров хотят иметь свободу во времени и пространстве при чтении своей электронной почты; кроме того, они хотят это делать с помощью приятных графических интерфейсов. Если по каким-либо причинам пользователь не может быть допущен непосредственно на почтовый сервер под управлением ОС Linux для чтения своей почты в среде X Window, то наилучший выход в такой ситуации — организовать такому пользователю соединение с сервером по локальной сети. Тогда с помощью соответствующего клиентского программного обеспечения на локальном ПК пользователь сможет обращаться к своему почтовому ящику на сервере. Протокол, который позволяет считывать почтовые сообщения с удаленного почтового сервера, описан в RFC 1939 и назван протоколом почтового офиса Post Office Protocol (POP). В настоящее время используется версия 3 этого протокола, отсюда название — POP3.
Описание протокола POP3
Подобно протоколу SMTP (описанному в "Протокол SMTP" , "Протокол SMTP"), работа протокола POP3 также основана на использовании набора команд. Сервер POP3 прослушивает TCP-порт номер 110 на предмет запросов на установку соединения и отвечает на них, выдавая специальную строку-приглашение, которая сигнализирует о его готовности к приему команд. Один из методов убедиться в том, что на данном хост-компьютере запущен сервер POP3 — попытаться зайти с помощью telnet на порт 110. Если при этом вы получите соответствующее приглашение сервера POP3, значит, POP3-сервер работает на данном компьютере. В листинге 6.1 представлен пример такого сеанса.
1 [frank@shadrach frank]$ telnet localhost 110 2 Trying 127.0.0.1... 3 Connected to localhost. 4 Escape character is '^]'. 5 +OK POP3 localhost v7.59 server ready 6 QUIT 7 +OK Sayonara 8 Connection closed by foreign host. 9 [frank@shadrach frank]$Листинг 6.1. Пример сеанса с клиентом POP3
В строке 1 показан пример вызова соединения с портом TCP 110 на локальном компьютере с помощью команды telnet. Строка 5 представляет собой приглашение, выдаваемое сервером POP3. В строке 6 клиентом задается POP3-команда завершить сеанс работы с сервером, а в строке 7 представлено прощальное сообщение, выдаваемое сервером POP3. По завершении сеанса сервер POP3 инициирует закрытие TCP-соединения. Как правило, клиент отреагирует на закрытие TCP-соединения.
Первое, что происходит при сеансе POP3, — это регистрация клиента на сервере. Существует несколько способов регистрации. После регистрации на сервере POP3 клиент посылает на сервер запрос с требованием проверить, имеются ли в почтовом ящике с соответствующим идентификатором пользователя сообщения. В функции протокола POP3 не входит обеспечение клиента возможностями манипулирования сообщениями внутри его почтового ящика. Протокол POP3 всего лишь посылает список имеющихся у него для клиента сообщений, и высылает каждое из них клиенту. Клиент же может производить операции над сообщениями, только после получения их к себе на локальный компьютер из почтового ящика.
Методы установления подлинности клиента в POP3
После того как клиент POP3 установил TCP-соединение с сервером, он должен идентифицировать себя. Это одновременно является подтверждением того, что сообщения посылаются именно тому пользователю, для которого они предназначены. Стандартная проверка подлинности пользователя в POP3 выполняется с помощью набора команд для идентификации пользователя и пароля. К сожалению, при регистрации на сервере передача идентификатора пользователя и пароля осуществляется в текстовом виде. Конечно, такой метод использовать опасно, особенно в тех случаях, когда при установлении соединения с удаленным сервером пакеты проходят через неизвестные сети. Устранить эти недостатки попытались в документе RFC 1734, где описывается более безопасный способ подключения к серверу POP3 посредством команды AUTH. В последующих разделах описываются оба метода проверки подлинности клиентов, а также третий, более новый метод под названием АPOP.
Команды USER/PASS
Комбинация команд USER/PASS — самая простая в реализации, но в то же время самая опасная с точки зрения безопасности. Каждый раз при соединении клиента с сервером POP3 с целью проверки почты по сети посылается его идентификатор пользователя и пароль в виде текста в формате ASCII. Это просто находка для хакера!
Формат этих команд следующий:
USER username PASS password
В роли username выступает идентификатор пользователя для сервера POP3. Соответственно, параметр password означает пароль для этого идентификатора пользователя. В листинге 6.2 показан пример сеанса POP3 с применением комбинации USER/PASS.
1 [melanie@shadrach melanie]$ telnet localhost 110 2 Trying 127.0.0.1... 3 Connected to localhost. 4 Escape character is '^]'. 5 +OK POP3 localhost v7.59 server ready 6 USER melanie 7 +OK User name accepted, password please 8 PASS toybox 9 +OK Mailbox open, 0 messages 10 QUIT 11 +OK Sayonara 12 Connection closed by foreign host. 13 [melanie@shadrach melanie]$Листинг 6.2. Пример регистрации клиента POP3 с использованием USER/PASS
В строке 6 клиент посылает команду USER со своим идентификатором пользователя в текстовом виде. В ответ сервер POP3 запрашивает пароль для этого пользователя. В строке 8 клиент посылает пароль на сервер. После того как получен пароль, производится сравнение комбинации идентификатор пользователя/пароль с имеющимися на сервере. Единственная защита сервера POP3 заключается в том, что сервер не возвращает ответ клиенту о неправильности идентификатора пользователя, а дожидается ввода пароля. Это исключает возможность подбора хакерами корректных идентификаторов пользователя для данного хоста POP3. В листинге 6.3 можно наблюдать разницу между реакцией на неправильный пароль для корректного идентификатора и на неправильный идентификатор пользователя.
1 [rich@shadrach rich]$ telnet localhost 110 2 Trying 127.0.0.1... 3 Connected to localhost. 4 Escape character is '^]'. 5 +OK POP3 localhost v7.59 server ready 6 USER rich 7 +OK User name accepted, password please 8 PASS hello 9 -ERR Bad login 10 USER baduser 11 +OK User name accepted; password please 12 PASS hello 13 -ERR Bad login 14 QUIT 15 +OK Sayonara 16 Connection closed by foreign host. 17 [rich@shadrach rich]$Листинг 6.3. Пример попыток регистрации на сервере POP3
В строке 6 задано корректное имя пользователя, но в 8-й строке набран неправильный пароль. Ответ сервера POP3 в строке 9 вполне понятен и в пояснениях не нуждается. В строке 10 делается попытка подключиться к серверу с неправильным идентификатором пользователя, на что в строке 13 получен соответствующий ответ сервера POP3. Обратите внимание, что и в той, и в другой ситуации сервер сгенерировал одинаковое сообщение об ошибке. Это также препятствует подбору хакерами корректных идентификаторов пользователя с помощью обращения к серверу POP3. Конечно, имеется и обратная сторона медали: такие сообщения могут ввести администраторов почтовых систем в заблуждение при поиске неполадок.
Применение идентификатора пользователя и пароля открытым текстом при работе с POP3 становится еще более опасным, когда пользователь проверяет содержимое почтового ящика несколько раз в день (или в час). Большинство клиентских программ для работы с электронной почтой можно конфигурировать так, чтобы они обращались к почтовому ящику через определенные интервалы времени. Это подарок для хакера, так как при помощи сетевого анализатора он легко может получить идентификатор и пароль пользователя. Эти недостатки были в некоторой степени устранены с помощью команды APOP, описанной в RFC 1939.